Complete API v2 Reference

Every operation below is generated from the OpenAPI v2 specification and includes parameters, request fields, response fields, errors, and examples.

Acceptances

GET /api/v2/acceptances

List acceptances

operationIdlistAcceptances
TagAcceptances
SecuritybearerAuth

Returns acceptances visible to the authenticated account. Use documented query parameters for filtering, sorting, and pagination.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/acceptances" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 250
Number of records per page. Default is 50; maximum is 250. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 50
sort query no string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, acceptance_date, external_id, created_at, updated_at. Default: -id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. "-id"
include query no string form false Comma-separated optional relations. Allowed values: offers. The same filter may also be sent as filter[include] where supported by the Laravel query adapter. "offers"
id query no integer:int64 form true min: 1 Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. 1001
external_id query no string form true Filter by external_id using exact matching. The same filter may also be sent as filter[external_id] where supported by the Laravel query adapter. "EXT-10045"
status_id query no integer:int64 form true min: 1 Filter by status_id using exact matching. The same filter may also be sent as filter[status_id] where supported by the Laravel query adapter. 1
warehouse_id query no integer:int64 form true min: 1 Filter by warehouse_id using exact matching. The same filter may also be sent as filter[warehouse_id] where supported by the Laravel query adapter. 42
shop_id query no integer:int64 form true min: 1 Filter by shop_id using exact matching. The same filter may also be sent as filter[shop_id] where supported by the Laravel query adapter. 12
type_id query no integer:int64 form true min: 1 Filter by type_id using exact matching. The same filter may also be sent as filter[type_id] where supported by the Laravel query adapter. 1
user_id query no integer:int64 form true min: 1 Filter by user_id using exact matching. The same filter may also be sent as filter[user_id] where supported by the Laravel query adapter. 15
document_barcode query no string form true Filter by document_barcode using partial text matching. The same filter may also be sent as filter[document_barcode] where supported by the Laravel query adapter. "ASN-100245-BARCODE"
comment query no string form true Filter by comment using partial text matching. The same filter may also be sent as filter[comment] where supported by the Laravel query adapter. "Priority"
acceptance_date_from query no string:date form true Lower inclusive date boundary for acceptance_date. The same filter may also be sent as filter[acceptance_date_from] where supported by the Laravel query adapter. "2026-07-14"
acceptance_date_to query no string:date form true Upper inclusive date boundary for acceptance_date. The same filter may also be sent as filter[acceptance_date_to] where supported by the Laravel query adapter. "2026-07-14"
created_at_from query no string:date form true Lower inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_from] where supported by the Laravel query adapter. "2026-07-14"
created_at_to query no string:date form true Upper inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_to] where supported by the Laravel query adapter. "2026-07-14"
updated_at_from query no string:date form true Lower inclusive date boundary for updated_at. The same filter may also be sent as filter[updated_at_from] where supported by the Laravel query adapter. "2026-07-14"
updated_at_to query no string:date form true Upper inclusive date boundary for updated_at. The same filter may also be sent as filter[updated_at_to] where supported by the Laravel query adapter. "2026-07-14"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<Acceptance>
data[] no Acceptance Inbound receiving document. Relation fields are present when loaded by the controller or requested through include.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].external_id no string | null "ASN-100245"
data[].document_barcode no string | null "ASN-100245-BARCODE"
data[].domain_id no integer:int64 | null min: 1 3
data[].status_id no enum:int64 | null enum: 1, 2, 3, 4, 5, 6, 7 1 - new; 2 - accepting; 3 - checking; 4 - closed; 5 - deleted; 6 - cancelled; 7 - arrived at warehouse. 1
data[].user_id no integer:int64 | null min: 1 9
data[].warehouse_id no integer:int64 | null min: 1 42
data[].shop_id no integer:int64 | null min: 1 12
data[].type_id no enum:int64 | null enum: 1, 2, 3 1 - standard acceptance; 2 - return acceptance; 3 - cross-dock acceptance. The type is immutable after creation. 1
data[].type_code no enum | null enum: acceptance, return, crossdock "acceptance"
data[].comment no string | null "Inbound from supplier"
data[].counts yes AcceptanceCounts
data[].counts.expected yes number:float 10
data[].counts.accepted yes number:float 0
data[].counts.placed yes number:float 0
data[].acceptance_date no string:date | null "2026-07-14"
data[].offers no array<AcceptanceLine>
data[].offers[] no AcceptanceLine Declared acceptance line plus live accepted/placed quantities and actual lot allocations. Placement requires a positive storage-place ID. Deleted warehouse rows are excluded.
data[].offers[].id yes integer:int64 readOnly min: 1 1001
data[].offers[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].offers[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].offers[].acceptance_id yes integer:int64 min: 1 5101
data[].offers[].product_id yes integer:int64 min: 1 1201
data[].offers[].expected_quantity yes number:float min: 0 10
data[].offers[].accepted_quantity yes number:float min: 0 0
data[].offers[].placed_quantity yes number:float min: 0 0
data[].offers[].price no number:float | null 4.99
data[].offers[].batch no string | null "LOT-2026"
data[].offers[].production_date no string:date | null "2026-01-15"
data[].offers[].expiration_date no string:date | null "2027-01-15"
data[].offers[].barcode no string | null maxLength: 64 "4601234567890"
data[].offers[].product no object | null
data[].offers[].product.id yes integer:int64 readOnly min: 1 1201
data[].offers[].product.name yes string "Coffee 250g"
data[].offers[].product.external_id no string | null "EXT-10045"
data[].offers[].accepted_lots no array<AcceptanceLot>
data[].offers[].accepted_lots[] no AcceptanceLot
data[].offers[].accepted_lots[].batch yes string | null "LOT-2026"
data[].offers[].accepted_lots[].production_date yes string:date | null "2026-01-15"
data[].offers[].accepted_lots[].expiration_date yes string:date | null "2027-01-15"
data[].offers[].accepted_lots[].accepted_quantity yes number:float min: 0 5
data[].offers[].accepted_lots[].placed_quantity yes number:float min: 0 3
data[].crossdock_case no object | null Cross-dock case created atomically with an acceptance of type 3.
data[].crossdock_case.id yes integer:int64 min: 1 1001
data[].crossdock_case.public_id yes string "01J2CROSSDOCKCASE000000001"
data[].crossdock_case.status yes enum enum: draft, planned, released, in_progress, exception, completed, cancelled "draft"
data[].crossdock_case.process_version yes string "direct_order_v1"
data[].crossdock_case.version yes integer:int64 min: 1 1
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "id": 5101,
      "external_id": "ASN-100245",
      "document_barcode": "ASN-100245-BARCODE",
      "domain_id": 3,
      "status_id": 1,
      "user_id": 9,
      "warehouse_id": 42,
      "shop_id": 12,
      "type_id": 1,
      "comment": "Inbound from supplier",
      "counts": {
        "expected": 10,
        "accepted": 0,
        "placed": 0
      },
      "acceptance_date": "2026-07-14",
      "offers": [
        {
          "id": 7101,
          "acceptance_id": 5101,
          "product_id": 1201,
          "expected_quantity": 10,
          "accepted_quantity": 0,
          "placed_quantity": 0,
          "price": 4.99,
          "batch": "LOT-2026",
          "production_date": "2026-01-15",
          "expiration_date": "2027-01-15",
          "barcode": "4601234567890",
          "product": {
            "id": 1201,
            "name": "Coffee 250g",
            "external_id": "EXT-10045"
          },
          "created_at": "2026-07-14T09:00:00Z",
          "updated_at": "2026-07-14T09:30:00Z"
        }
      ],
      "created_at": "2026-07-14T09:00:00Z",
      "updated_at": "2026-07-14T09:30:00Z"
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/acceptances?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/acceptances?page=2",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/acceptances?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "https://betawms.ffcdek.ru/api/v2/acceptances",
    "per_page": 50,
    "to": 50,
    "total": 73
  }
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
POST /api/v2/acceptances

Create standard, return, or cross-dock acceptance

operationIdcreateAcceptances
TagAcceptances
SecuritybearerAuth

Creates one of the three visible acceptance types. type_id=1 creates a standard acceptance, type_id=2 creates a return acceptance, and type_id=3 enters the isolated cross-dock workflow.
For type_id=3, send a transport Idempotency-Key, a UUID data.command_id, at least one line, and the optional data.crossdock schedule fields. The client warehouse and shop are resolved in tenant scope. Before any insert, NWMS checks that cross-docking is enabled on the selected client warehouse. The acceptance, draft case, supplies, command, and initial audit event are committed atomically.
If cross-docking is disabled on the selected client warehouse, the request returns the API v2 validation envelope and leaves no partial acceptance. The response includes type_code=crossdock, crossdock_case, meta.crossdock_configuration, and meta.command_replayed.
The acceptance type is immutable. Continue the process through the Cross-docking operations: create orders/targets, plan, release, execute source and target scans, load, and close.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/acceptances" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CreateAcceptanceRequest required

Field Required Type Flags Constraints Description Example
data yes CreateAcceptancePayload

Request examples

standard

{
  "data": {
    "warehouse_id": 42,
    "shop_id": 12,
    "type_id": 1,
    "external_id": "ASN-100245",
    "lines": [
      {
        "product_id": 1201,
        "expected_quantity": 10,
        "barcode": "4601234567890"
      }
    ]
  }
}

crossDock

{
  "data": {
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "warehouse_id": 43,
    "shop_id": 12,
    "type_id": 3,
    "external_id": "ASN-XD-100245",
    "acceptance_date": "2026-08-03",
    "crossdock": {
      "external_id": "XD-2026-001",
      "planned_arrival_at": "2026-08-03T08:00:00Z",
      "cutoff_at": "2026-08-03T12:00:00Z",
      "planned_departure_at": "2026-08-03T14:00:00Z"
    },
    "lines": [
      {
        "product_id": 1201,
        "expected_quantity": 35,
        "external_line_id": "ASN-XD-LINE-1",
        "barcode": "4601234567890"
      }
    ]
  }
}

Responses

201 Created.

Created.

Field Required Type Flags Constraints Description Example
data yes Acceptance Inbound receiving document. Relation fields are present when loaded by the controller or requested through include.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.external_id no string | null "ASN-100245"
data.document_barcode no string | null "ASN-100245-BARCODE"
data.domain_id no integer:int64 | null min: 1 3
data.status_id no enum:int64 | null enum: 1, 2, 3, 4, 5, 6, 7 1 - new; 2 - accepting; 3 - checking; 4 - closed; 5 - deleted; 6 - cancelled; 7 - arrived at warehouse. 1
data.user_id no integer:int64 | null min: 1 9
data.warehouse_id no integer:int64 | null min: 1 42
data.shop_id no integer:int64 | null min: 1 12
data.type_id no enum:int64 | null enum: 1, 2, 3 1 - standard acceptance; 2 - return acceptance; 3 - cross-dock acceptance. The type is immutable after creation. 1
data.type_code no enum | null enum: acceptance, return, crossdock "acceptance"
data.comment no string | null "Inbound from supplier"
data.counts yes AcceptanceCounts
data.counts.expected yes number:float 10
data.counts.accepted yes number:float 0
data.counts.placed yes number:float 0
data.acceptance_date no string:date | null "2026-07-14"
data.offers no array<AcceptanceLine>
data.offers[] no AcceptanceLine Declared acceptance line plus live accepted/placed quantities and actual lot allocations. Placement requires a positive storage-place ID. Deleted warehouse rows are excluded.
data.offers[].id yes integer:int64 readOnly min: 1 1001
data.offers[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].acceptance_id yes integer:int64 min: 1 5101
data.offers[].product_id yes integer:int64 min: 1 1201
data.offers[].expected_quantity yes number:float min: 0 10
data.offers[].accepted_quantity yes number:float min: 0 0
data.offers[].placed_quantity yes number:float min: 0 0
data.offers[].price no number:float | null 4.99
data.offers[].batch no string | null "LOT-2026"
data.offers[].production_date no string:date | null "2026-01-15"
data.offers[].expiration_date no string:date | null "2027-01-15"
data.offers[].barcode no string | null maxLength: 64 "4601234567890"
data.offers[].product no object | null
data.offers[].product.id yes integer:int64 readOnly min: 1 1201
data.offers[].product.name yes string "Coffee 250g"
data.offers[].product.external_id no string | null "EXT-10045"
data.offers[].accepted_lots no array<AcceptanceLot>
data.offers[].accepted_lots[] no AcceptanceLot
data.offers[].accepted_lots[].batch yes string | null "LOT-2026"
data.offers[].accepted_lots[].production_date yes string:date | null "2026-01-15"
data.offers[].accepted_lots[].expiration_date yes string:date | null "2027-01-15"
data.offers[].accepted_lots[].accepted_quantity yes number:float min: 0 5
data.offers[].accepted_lots[].placed_quantity yes number:float min: 0 3
data.crossdock_case no object | null Cross-dock case created atomically with an acceptance of type 3.
data.crossdock_case.id yes integer:int64 min: 1 1001
data.crossdock_case.public_id yes string "01J2CROSSDOCKCASE000000001"
data.crossdock_case.status yes enum enum: draft, planned, released, in_progress, exception, completed, cancelled "draft"
data.crossdock_case.process_version yes string "direct_order_v1"
data.crossdock_case.version yes integer:int64 min: 1 1
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 5101,
    "external_id": "ASN-100245",
    "document_barcode": "ASN-100245-BARCODE",
    "domain_id": 3,
    "status_id": 1,
    "user_id": 9,
    "warehouse_id": 42,
    "shop_id": 12,
    "type_id": 1,
    "comment": "Inbound from supplier",
    "counts": {
      "expected": 10,
      "accepted": 0,
      "placed": 0
    },
    "acceptance_date": "2026-07-14",
    "offers": [
      {
        "id": 7101,
        "acceptance_id": 5101,
        "product_id": 1201,
        "expected_quantity": 10,
        "accepted_quantity": 0,
        "placed_quantity": 0,
        "price": 4.99,
        "batch": "LOT-2026",
        "production_date": "2026-01-15",
        "expiration_date": "2027-01-15",
        "barcode": "4601234567890",
        "product": {
          "id": 1201,
          "name": "Coffee 250g",
          "external_id": "EXT-10045"
        },
        "created_at": "2026-07-14T09:00:00Z",
        "updated_at": "2026-07-14T09:30:00Z"
      }
    ],
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

crossDockCreated

{
  "data": {
    "id": 5101,
    "external_id": "ASN-XD-100245",
    "domain_id": 3,
    "status_id": 1,
    "warehouse_id": 43,
    "shop_id": 12,
    "type_id": 3,
    "type_code": "crossdock",
    "counts": {
      "expected": 35,
      "accepted": 0,
      "placed": 0
    },
    "acceptance_date": "2026-08-03",
    "crossdock_case": {
      "id": 1001,
      "public_id": "01J2CROSSDOCKCASE000000001",
      "status": "draft",
      "process_version": "direct_order_v1",
      "version": 1
    }
  },
  "meta": {
    "api_version": "v2",
    "command_replayed": false,
    "crossdock_configuration": {
      "physical_warehouse_id": 42,
      "enabled": true,
      "process_version": "direct_order_v1"
    }
  }
}

400 Bad request

AcceptanceCreateBadRequest

Bad request.

Field Required Type Flags Constraints Description Example
(root) no ErrorResponse Standard and return acceptances retain the existing API v2 error adapter. Cross-dock creation uses the strict validation envelope with meta.error_code and no top-level error field.
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

IDEMPOTENCY_KEY_REQUIRED

{
  "message": "Bad request.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "IDEMPOTENCY_KEY_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

409 Conflict

AcceptanceCreateConflict

The request conflicts with the current resource or command state.

Field Required Type Flags Constraints Description Example
(root) no ErrorResponse Standard and return acceptances retain the existing API v2 error adapter. Cross-dock creation uses the strict validation envelope with meta.error_code and no top-level error field.
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

CROSSDOCK_COMMAND_CONFLICT

{
  "message": "The request conflicts with the current resource or command state.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "CROSSDOCK_COMMAND_CONFLICT",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

422 Validation error

AcceptanceCreateValidationError

The given data was invalid.

Field Required Type Flags Constraints Description Example
(root) no ValidationErrorResponse Standard and return acceptances retain the existing API v2 error adapter. Cross-dock creation uses the strict validation envelope with meta.error_code and no top-level error field.
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

CROSSDOCK_WAREHOUSE_DISABLED

{
  "message": "The given data was invalid.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "CROSSDOCK_WAREHOUSE_DISABLED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
GET /api/v2/acceptances/{id}

Get acceptance

operationIdgetAcceptances
TagAcceptances
SecuritybearerAuth

Returns one acceptance when it exists and is visible to the authenticated account.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/acceptances/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Acceptance ID. 1001

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes Acceptance Inbound receiving document. Relation fields are present when loaded by the controller or requested through include.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.external_id no string | null "ASN-100245"
data.document_barcode no string | null "ASN-100245-BARCODE"
data.domain_id no integer:int64 | null min: 1 3
data.status_id no enum:int64 | null enum: 1, 2, 3, 4, 5, 6, 7 1 - new; 2 - accepting; 3 - checking; 4 - closed; 5 - deleted; 6 - cancelled; 7 - arrived at warehouse. 1
data.user_id no integer:int64 | null min: 1 9
data.warehouse_id no integer:int64 | null min: 1 42
data.shop_id no integer:int64 | null min: 1 12
data.type_id no enum:int64 | null enum: 1, 2, 3 1 - standard acceptance; 2 - return acceptance; 3 - cross-dock acceptance. The type is immutable after creation. 1
data.type_code no enum | null enum: acceptance, return, crossdock "acceptance"
data.comment no string | null "Inbound from supplier"
data.counts yes AcceptanceCounts
data.counts.expected yes number:float 10
data.counts.accepted yes number:float 0
data.counts.placed yes number:float 0
data.acceptance_date no string:date | null "2026-07-14"
data.offers no array<AcceptanceLine>
data.offers[] no AcceptanceLine Declared acceptance line plus live accepted/placed quantities and actual lot allocations. Placement requires a positive storage-place ID. Deleted warehouse rows are excluded.
data.offers[].id yes integer:int64 readOnly min: 1 1001
data.offers[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].acceptance_id yes integer:int64 min: 1 5101
data.offers[].product_id yes integer:int64 min: 1 1201
data.offers[].expected_quantity yes number:float min: 0 10
data.offers[].accepted_quantity yes number:float min: 0 0
data.offers[].placed_quantity yes number:float min: 0 0
data.offers[].price no number:float | null 4.99
data.offers[].batch no string | null "LOT-2026"
data.offers[].production_date no string:date | null "2026-01-15"
data.offers[].expiration_date no string:date | null "2027-01-15"
data.offers[].barcode no string | null maxLength: 64 "4601234567890"
data.offers[].product no object | null
data.offers[].product.id yes integer:int64 readOnly min: 1 1201
data.offers[].product.name yes string "Coffee 250g"
data.offers[].product.external_id no string | null "EXT-10045"
data.offers[].accepted_lots no array<AcceptanceLot>
data.offers[].accepted_lots[] no AcceptanceLot
data.offers[].accepted_lots[].batch yes string | null "LOT-2026"
data.offers[].accepted_lots[].production_date yes string:date | null "2026-01-15"
data.offers[].accepted_lots[].expiration_date yes string:date | null "2027-01-15"
data.offers[].accepted_lots[].accepted_quantity yes number:float min: 0 5
data.offers[].accepted_lots[].placed_quantity yes number:float min: 0 3
data.crossdock_case no object | null Cross-dock case created atomically with an acceptance of type 3.
data.crossdock_case.id yes integer:int64 min: 1 1001
data.crossdock_case.public_id yes string "01J2CROSSDOCKCASE000000001"
data.crossdock_case.status yes enum enum: draft, planned, released, in_progress, exception, completed, cancelled "draft"
data.crossdock_case.process_version yes string "direct_order_v1"
data.crossdock_case.version yes integer:int64 min: 1 1
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 5101,
    "external_id": "ASN-100245",
    "document_barcode": "ASN-100245-BARCODE",
    "domain_id": 3,
    "status_id": 1,
    "user_id": 9,
    "warehouse_id": 42,
    "shop_id": 12,
    "type_id": 1,
    "comment": "Inbound from supplier",
    "counts": {
      "expected": 10,
      "accepted": 0,
      "placed": 0
    },
    "acceptance_date": "2026-07-14",
    "offers": [
      {
        "id": 7101,
        "acceptance_id": 5101,
        "product_id": 1201,
        "expected_quantity": 10,
        "accepted_quantity": 0,
        "placed_quantity": 0,
        "price": 4.99,
        "batch": "LOT-2026",
        "production_date": "2026-01-15",
        "expiration_date": "2027-01-15",
        "barcode": "4601234567890",
        "product": {
          "id": 1201,
          "name": "Coffee 250g",
          "external_id": "EXT-10045"
        },
        "created_at": "2026-07-14T09:00:00Z",
        "updated_at": "2026-07-14T09:30:00Z"
      }
    ],
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
PUT /api/v2/acceptances/{id}

Update acceptance

operationIdreplaceAcceptances
TagAcceptances
SecuritybearerAuth

Updates an editable acceptance header and may upsert or delete lines. Closed or already processed documents reject changes with validation or lifecycle errors.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/acceptances/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Acceptance ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

ReplaceAcceptanceRequest required

Field Required Type Flags Constraints Description Example
data yes ReplaceAcceptancePayload Legacy PUT payload. Current backend applies partial-update semantics and may upsert or delete lines.
data.external_id no string | null "ASN-100245"
data.document_barcode no string | null "ASN-100245-BARCODE"
data.comment no string | null "Inbound from supplier"
data.acceptance_date no string:date | null "2026-07-14"
data.allow_add_offers_during_acceptance no boolean false
data.lines no array<AcceptanceLineUpsertPayload>
data.lines[] no AcceptanceLineUpsertPayload Acceptance line payload. The product is resolved by product_id or product_external_id.
data.lines[] no object
data.lines[] no object
data.lines_delete no array<integer:int64>
data.lines_delete[] no integer:int64 min: 1 7101

Request examples

default

{
  "data": {
    "comment": "Updated supplier note",
    "lines_delete": [
      7102
    ]
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes Acceptance Inbound receiving document. Relation fields are present when loaded by the controller or requested through include.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.external_id no string | null "ASN-100245"
data.document_barcode no string | null "ASN-100245-BARCODE"
data.domain_id no integer:int64 | null min: 1 3
data.status_id no enum:int64 | null enum: 1, 2, 3, 4, 5, 6, 7 1 - new; 2 - accepting; 3 - checking; 4 - closed; 5 - deleted; 6 - cancelled; 7 - arrived at warehouse. 1
data.user_id no integer:int64 | null min: 1 9
data.warehouse_id no integer:int64 | null min: 1 42
data.shop_id no integer:int64 | null min: 1 12
data.type_id no enum:int64 | null enum: 1, 2, 3 1 - standard acceptance; 2 - return acceptance; 3 - cross-dock acceptance. The type is immutable after creation. 1
data.type_code no enum | null enum: acceptance, return, crossdock "acceptance"
data.comment no string | null "Inbound from supplier"
data.counts yes AcceptanceCounts
data.counts.expected yes number:float 10
data.counts.accepted yes number:float 0
data.counts.placed yes number:float 0
data.acceptance_date no string:date | null "2026-07-14"
data.offers no array<AcceptanceLine>
data.offers[] no AcceptanceLine Declared acceptance line plus live accepted/placed quantities and actual lot allocations. Placement requires a positive storage-place ID. Deleted warehouse rows are excluded.
data.offers[].id yes integer:int64 readOnly min: 1 1001
data.offers[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].acceptance_id yes integer:int64 min: 1 5101
data.offers[].product_id yes integer:int64 min: 1 1201
data.offers[].expected_quantity yes number:float min: 0 10
data.offers[].accepted_quantity yes number:float min: 0 0
data.offers[].placed_quantity yes number:float min: 0 0
data.offers[].price no number:float | null 4.99
data.offers[].batch no string | null "LOT-2026"
data.offers[].production_date no string:date | null "2026-01-15"
data.offers[].expiration_date no string:date | null "2027-01-15"
data.offers[].barcode no string | null maxLength: 64 "4601234567890"
data.offers[].product no object | null
data.offers[].product.id yes integer:int64 readOnly min: 1 1201
data.offers[].product.name yes string "Coffee 250g"
data.offers[].product.external_id no string | null "EXT-10045"
data.offers[].accepted_lots no array<AcceptanceLot>
data.offers[].accepted_lots[] no AcceptanceLot
data.offers[].accepted_lots[].batch yes string | null "LOT-2026"
data.offers[].accepted_lots[].production_date yes string:date | null "2026-01-15"
data.offers[].accepted_lots[].expiration_date yes string:date | null "2027-01-15"
data.offers[].accepted_lots[].accepted_quantity yes number:float min: 0 5
data.offers[].accepted_lots[].placed_quantity yes number:float min: 0 3
data.crossdock_case no object | null Cross-dock case created atomically with an acceptance of type 3.
data.crossdock_case.id yes integer:int64 min: 1 1001
data.crossdock_case.public_id yes string "01J2CROSSDOCKCASE000000001"
data.crossdock_case.status yes enum enum: draft, planned, released, in_progress, exception, completed, cancelled "draft"
data.crossdock_case.process_version yes string "direct_order_v1"
data.crossdock_case.version yes integer:int64 min: 1 1
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 5101,
    "external_id": "ASN-100245",
    "document_barcode": "ASN-100245-BARCODE",
    "domain_id": 3,
    "status_id": 1,
    "user_id": 9,
    "warehouse_id": 42,
    "shop_id": 12,
    "type_id": 1,
    "comment": "Inbound from supplier",
    "counts": {
      "expected": 10,
      "accepted": 0,
      "placed": 0
    },
    "acceptance_date": "2026-07-14",
    "offers": [
      {
        "id": 7101,
        "acceptance_id": 5101,
        "product_id": 1201,
        "expected_quantity": 10,
        "accepted_quantity": 0,
        "placed_quantity": 0,
        "price": 4.99,
        "batch": "LOT-2026",
        "production_date": "2026-01-15",
        "expiration_date": "2027-01-15",
        "barcode": "4601234567890",
        "product": {
          "id": 1201,
          "name": "Coffee 250g",
          "external_id": "EXT-10045"
        },
        "created_at": "2026-07-14T09:00:00Z",
        "updated_at": "2026-07-14T09:30:00Z"
      }
    ],
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
PATCH /api/v2/acceptances/{id}

Update acceptance

operationIdpatchAcceptances
TagAcceptances
SecuritybearerAuth

Partially updates an editable acceptance. Omitted fields are not changed.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request PATCH "${NWMS_BASE_URL}/api/v2/acceptances/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Acceptance ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

PatchAcceptanceRequest required

Field Required Type Flags Constraints Description Example
data yes PatchAcceptancePayload Partial acceptance update payload. Omitted fields are unchanged.
data.external_id no string | null "ASN-100245"
data.document_barcode no string | null "ASN-100245-BARCODE"
data.comment no string | null "Inbound from supplier"
data.acceptance_date no string:date | null "2026-07-14"
data.allow_add_offers_during_acceptance no boolean false
data.lines no array<AcceptanceLineUpsertPayload>
data.lines[] no AcceptanceLineUpsertPayload Acceptance line payload. The product is resolved by product_id or product_external_id.
data.lines[] no object
data.lines[] no object
data.lines_delete no array<integer:int64>
data.lines_delete[] no integer:int64 min: 1 7101

Request examples

default

{
  "data": {
    "comment": "Updated supplier note"
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes Acceptance Inbound receiving document. Relation fields are present when loaded by the controller or requested through include.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.external_id no string | null "ASN-100245"
data.document_barcode no string | null "ASN-100245-BARCODE"
data.domain_id no integer:int64 | null min: 1 3
data.status_id no enum:int64 | null enum: 1, 2, 3, 4, 5, 6, 7 1 - new; 2 - accepting; 3 - checking; 4 - closed; 5 - deleted; 6 - cancelled; 7 - arrived at warehouse. 1
data.user_id no integer:int64 | null min: 1 9
data.warehouse_id no integer:int64 | null min: 1 42
data.shop_id no integer:int64 | null min: 1 12
data.type_id no enum:int64 | null enum: 1, 2, 3 1 - standard acceptance; 2 - return acceptance; 3 - cross-dock acceptance. The type is immutable after creation. 1
data.type_code no enum | null enum: acceptance, return, crossdock "acceptance"
data.comment no string | null "Inbound from supplier"
data.counts yes AcceptanceCounts
data.counts.expected yes number:float 10
data.counts.accepted yes number:float 0
data.counts.placed yes number:float 0
data.acceptance_date no string:date | null "2026-07-14"
data.offers no array<AcceptanceLine>
data.offers[] no AcceptanceLine Declared acceptance line plus live accepted/placed quantities and actual lot allocations. Placement requires a positive storage-place ID. Deleted warehouse rows are excluded.
data.offers[].id yes integer:int64 readOnly min: 1 1001
data.offers[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].acceptance_id yes integer:int64 min: 1 5101
data.offers[].product_id yes integer:int64 min: 1 1201
data.offers[].expected_quantity yes number:float min: 0 10
data.offers[].accepted_quantity yes number:float min: 0 0
data.offers[].placed_quantity yes number:float min: 0 0
data.offers[].price no number:float | null 4.99
data.offers[].batch no string | null "LOT-2026"
data.offers[].production_date no string:date | null "2026-01-15"
data.offers[].expiration_date no string:date | null "2027-01-15"
data.offers[].barcode no string | null maxLength: 64 "4601234567890"
data.offers[].product no object | null
data.offers[].product.id yes integer:int64 readOnly min: 1 1201
data.offers[].product.name yes string "Coffee 250g"
data.offers[].product.external_id no string | null "EXT-10045"
data.offers[].accepted_lots no array<AcceptanceLot>
data.offers[].accepted_lots[] no AcceptanceLot
data.offers[].accepted_lots[].batch yes string | null "LOT-2026"
data.offers[].accepted_lots[].production_date yes string:date | null "2026-01-15"
data.offers[].accepted_lots[].expiration_date yes string:date | null "2027-01-15"
data.offers[].accepted_lots[].accepted_quantity yes number:float min: 0 5
data.offers[].accepted_lots[].placed_quantity yes number:float min: 0 3
data.crossdock_case no object | null Cross-dock case created atomically with an acceptance of type 3.
data.crossdock_case.id yes integer:int64 min: 1 1001
data.crossdock_case.public_id yes string "01J2CROSSDOCKCASE000000001"
data.crossdock_case.status yes enum enum: draft, planned, released, in_progress, exception, completed, cancelled "draft"
data.crossdock_case.process_version yes string "direct_order_v1"
data.crossdock_case.version yes integer:int64 min: 1 1
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 5101,
    "external_id": "ASN-100245",
    "document_barcode": "ASN-100245-BARCODE",
    "domain_id": 3,
    "status_id": 1,
    "user_id": 9,
    "warehouse_id": 42,
    "shop_id": 12,
    "type_id": 1,
    "comment": "Inbound from supplier",
    "counts": {
      "expected": 10,
      "accepted": 0,
      "placed": 0
    },
    "acceptance_date": "2026-07-14",
    "offers": [
      {
        "id": 7101,
        "acceptance_id": 5101,
        "product_id": 1201,
        "expected_quantity": 10,
        "accepted_quantity": 0,
        "placed_quantity": 0,
        "price": 4.99,
        "batch": "LOT-2026",
        "production_date": "2026-01-15",
        "expiration_date": "2027-01-15",
        "barcode": "4601234567890",
        "product": {
          "id": 1201,
          "name": "Coffee 250g",
          "external_id": "EXT-10045"
        },
        "created_at": "2026-07-14T09:00:00Z",
        "updated_at": "2026-07-14T09:30:00Z"
      }
    ],
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
DELETE /api/v2/acceptances/{id}

Delete acceptance

operationIddeleteAcceptances
TagAcceptances
SecuritybearerAuth

Deletes the resource when the authenticated account has permission and the current lifecycle state allows deletion. If deletion is blocked by related records or document state, the API returns a validation error.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request DELETE "${NWMS_BASE_URL}/api/v2/acceptances/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}"

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Acceptance ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes object | null
meta yes object
meta.api_version yes enum enum: v2 "v2"
meta.deleted yes boolean true
meta.id yes integer:int64 min: 1 1001

Response examples

success

{
  "data": null,
  "meta": {
    "api_version": "v2",
    "deleted": true,
    "id": 1001
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
POST /api/v2/acceptances/{id}/cancel

Cancel acceptance

operationIdcancelAcceptance
TagAcceptances
SecuritybearerAuth

Cancels a standard or return acceptance in status 1 (new) or 7 (arrived). Cancellation is rejected when stock is already bound to a storage place. Cross-dock acceptances must use POST /api/v2/crossdock/cases/{case}/cancel.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/acceptances/1001/cancel" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}"

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Acceptance ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes Acceptance Inbound receiving document. Relation fields are present when loaded by the controller or requested through include.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.external_id no string | null "ASN-100245"
data.document_barcode no string | null "ASN-100245-BARCODE"
data.domain_id no integer:int64 | null min: 1 3
data.status_id no enum:int64 | null enum: 1, 2, 3, 4, 5, 6, 7 1 - new; 2 - accepting; 3 - checking; 4 - closed; 5 - deleted; 6 - cancelled; 7 - arrived at warehouse. 1
data.user_id no integer:int64 | null min: 1 9
data.warehouse_id no integer:int64 | null min: 1 42
data.shop_id no integer:int64 | null min: 1 12
data.type_id no enum:int64 | null enum: 1, 2, 3 1 - standard acceptance; 2 - return acceptance; 3 - cross-dock acceptance. The type is immutable after creation. 1
data.type_code no enum | null enum: acceptance, return, crossdock "acceptance"
data.comment no string | null "Inbound from supplier"
data.counts yes AcceptanceCounts
data.counts.expected yes number:float 10
data.counts.accepted yes number:float 0
data.counts.placed yes number:float 0
data.acceptance_date no string:date | null "2026-07-14"
data.offers no array<AcceptanceLine>
data.offers[] no AcceptanceLine Declared acceptance line plus live accepted/placed quantities and actual lot allocations. Placement requires a positive storage-place ID. Deleted warehouse rows are excluded.
data.offers[].id yes integer:int64 readOnly min: 1 1001
data.offers[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].acceptance_id yes integer:int64 min: 1 5101
data.offers[].product_id yes integer:int64 min: 1 1201
data.offers[].expected_quantity yes number:float min: 0 10
data.offers[].accepted_quantity yes number:float min: 0 0
data.offers[].placed_quantity yes number:float min: 0 0
data.offers[].price no number:float | null 4.99
data.offers[].batch no string | null "LOT-2026"
data.offers[].production_date no string:date | null "2026-01-15"
data.offers[].expiration_date no string:date | null "2027-01-15"
data.offers[].barcode no string | null maxLength: 64 "4601234567890"
data.offers[].product no object | null
data.offers[].product.id yes integer:int64 readOnly min: 1 1201
data.offers[].product.name yes string "Coffee 250g"
data.offers[].product.external_id no string | null "EXT-10045"
data.offers[].accepted_lots no array<AcceptanceLot>
data.offers[].accepted_lots[] no AcceptanceLot
data.offers[].accepted_lots[].batch yes string | null "LOT-2026"
data.offers[].accepted_lots[].production_date yes string:date | null "2026-01-15"
data.offers[].accepted_lots[].expiration_date yes string:date | null "2027-01-15"
data.offers[].accepted_lots[].accepted_quantity yes number:float min: 0 5
data.offers[].accepted_lots[].placed_quantity yes number:float min: 0 3
data.crossdock_case no object | null Cross-dock case created atomically with an acceptance of type 3.
data.crossdock_case.id yes integer:int64 min: 1 1001
data.crossdock_case.public_id yes string "01J2CROSSDOCKCASE000000001"
data.crossdock_case.status yes enum enum: draft, planned, released, in_progress, exception, completed, cancelled "draft"
data.crossdock_case.process_version yes string "direct_order_v1"
data.crossdock_case.version yes integer:int64 min: 1 1
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 5101,
    "external_id": "ASN-100245",
    "document_barcode": "ASN-100245-BARCODE",
    "domain_id": 3,
    "status_id": 1,
    "user_id": 9,
    "warehouse_id": 42,
    "shop_id": 12,
    "type_id": 1,
    "comment": "Inbound from supplier",
    "counts": {
      "expected": 10,
      "accepted": 0,
      "placed": 0
    },
    "acceptance_date": "2026-07-14",
    "offers": [
      {
        "id": 7101,
        "acceptance_id": 5101,
        "product_id": 1201,
        "expected_quantity": 10,
        "accepted_quantity": 0,
        "placed_quantity": 0,
        "price": 4.99,
        "batch": "LOT-2026",
        "production_date": "2026-01-15",
        "expiration_date": "2027-01-15",
        "barcode": "4601234567890",
        "product": {
          "id": 1201,
          "name": "Coffee 250g",
          "external_id": "EXT-10045"
        },
        "created_at": "2026-07-14T09:00:00Z",
        "updated_at": "2026-07-14T09:30:00Z"
      }
    ],
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
GET /api/v2/acceptances/{id}/lines

List acceptances

operationIdlistAcceptancesLines
TagAcceptances
SecuritybearerAuth

Returns acceptances visible to the authenticated account. Use documented query parameters for filtering, sorting, and pagination.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/acceptances/1001/lines" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Acceptance ID. 1001
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 500
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 100
sort query no string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, product_id, expected_quantity, price, expiration_date, created_at. Default: -id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. "-id"
id query no integer:int64 form true min: 1 Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. 1001
product_id query no integer:int64 form true min: 1 Filter by product_id using exact matching. The same filter may also be sent as filter[product_id] where supported by the Laravel query adapter. 1201
barcode query no string form true Filter by barcode using partial text matching. The same filter may also be sent as filter[barcode] where supported by the Laravel query adapter. "4601234567890"
batch query no string form true Filter by batch using partial text matching. The same filter may also be sent as filter[batch] where supported by the Laravel query adapter. "LOT-2026"
expiration_date_from query no string:date form true Lower inclusive date boundary for expiration_date. The same filter may also be sent as filter[expiration_date_from] where supported by the Laravel query adapter. "2026-07-14"
expiration_date_to query no string:date form true Upper inclusive date boundary for expiration_date. The same filter may also be sent as filter[expiration_date_to] where supported by the Laravel query adapter. "2026-07-14"
created_at_from query no string:date form true Lower inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_from] where supported by the Laravel query adapter. "2026-07-14"
created_at_to query no string:date form true Upper inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_to] where supported by the Laravel query adapter. "2026-07-14"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<AcceptanceLine>
data[] no AcceptanceLine Declared acceptance line plus live accepted/placed quantities and actual lot allocations. Placement requires a positive storage-place ID. Deleted warehouse rows are excluded.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].acceptance_id yes integer:int64 min: 1 5101
data[].product_id yes integer:int64 min: 1 1201
data[].expected_quantity yes number:float min: 0 10
data[].accepted_quantity yes number:float min: 0 0
data[].placed_quantity yes number:float min: 0 0
data[].price no number:float | null 4.99
data[].batch no string | null "LOT-2026"
data[].production_date no string:date | null "2026-01-15"
data[].expiration_date no string:date | null "2027-01-15"
data[].barcode no string | null maxLength: 64 "4601234567890"
data[].product no object | null
data[].product.id yes integer:int64 readOnly min: 1 1201
data[].product.name yes string "Coffee 250g"
data[].product.external_id no string | null "EXT-10045"
data[].accepted_lots no array<AcceptanceLot>
data[].accepted_lots[] no AcceptanceLot
data[].accepted_lots[].batch yes string | null "LOT-2026"
data[].accepted_lots[].production_date yes string:date | null "2026-01-15"
data[].accepted_lots[].expiration_date yes string:date | null "2027-01-15"
data[].accepted_lots[].accepted_quantity yes number:float min: 0 5
data[].accepted_lots[].placed_quantity yes number:float min: 0 3
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "id": 7101,
      "acceptance_id": 5101,
      "product_id": 1201,
      "expected_quantity": 10,
      "accepted_quantity": 0,
      "placed_quantity": 0,
      "price": 4.99,
      "batch": "LOT-2026",
      "production_date": "2026-01-15",
      "expiration_date": "2027-01-15",
      "barcode": "4601234567890",
      "product": {
        "id": 1201,
        "name": "Coffee 250g",
        "external_id": "EXT-10045"
      },
      "created_at": "2026-07-14T09:00:00Z",
      "updated_at": "2026-07-14T09:30:00Z"
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/acceptances/5101/lines?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/acceptances/5101/lines?page=2",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/acceptances/5101/lines?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "https://betawms.ffcdek.ru/api/v2/acceptances/5101/lines",
    "per_page": 100,
    "to": 100,
    "total": 123
  }
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
POST /api/v2/acceptances/{id}/lines

Create acceptance

operationIdcreateAcceptancesLines
TagAcceptances
SecuritybearerAuth

Create acceptance. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/acceptances/1001/lines" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Acceptance ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

AddAcceptanceLinesRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.lines yes array<AcceptanceLineCreatePayload> minItems: 1
data.lines[] no AcceptanceLineCreatePayload Acceptance line payload. The product is resolved by product_id or product_external_id.
data.lines[] no object
data.lines[] no object

Request examples

default

{
  "data": {
    "lines": [
      {
        "product_external_id": "EXT-10045",
        "expected_quantity": 10
      }
    ]
  }
}

Responses

201 Created.

Created.

Field Required Type Flags Constraints Description Example
data yes array<AcceptanceLine>
data[] no AcceptanceLine Declared acceptance line plus live accepted/placed quantities and actual lot allocations. Placement requires a positive storage-place ID. Deleted warehouse rows are excluded.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].acceptance_id yes integer:int64 min: 1 5101
data[].product_id yes integer:int64 min: 1 1201
data[].expected_quantity yes number:float min: 0 10
data[].accepted_quantity yes number:float min: 0 0
data[].placed_quantity yes number:float min: 0 0
data[].price no number:float | null 4.99
data[].batch no string | null "LOT-2026"
data[].production_date no string:date | null "2026-01-15"
data[].expiration_date no string:date | null "2027-01-15"
data[].barcode no string | null maxLength: 64 "4601234567890"
data[].product no object | null
data[].product.id yes integer:int64 readOnly min: 1 1201
data[].product.name yes string "Coffee 250g"
data[].product.external_id no string | null "EXT-10045"
data[].accepted_lots no array<AcceptanceLot>
data[].accepted_lots[] no AcceptanceLot
data[].accepted_lots[].batch yes string | null "LOT-2026"
data[].accepted_lots[].production_date yes string:date | null "2026-01-15"
data[].accepted_lots[].expiration_date yes string:date | null "2027-01-15"
data[].accepted_lots[].accepted_quantity yes number:float min: 0 5
data[].accepted_lots[].placed_quantity yes number:float min: 0 3
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": [
    {
      "id": 7101,
      "acceptance_id": 5101,
      "product_id": 1201,
      "expected_quantity": 10,
      "accepted_quantity": 0,
      "placed_quantity": 0,
      "price": 4.99,
      "batch": "LOT-2026",
      "production_date": "2026-01-15",
      "expiration_date": "2027-01-15",
      "barcode": "4601234567890",
      "product": {
        "id": 1201,
        "name": "Coffee 250g",
        "external_id": "EXT-10045"
      },
      "created_at": "2026-07-14T09:00:00Z",
      "updated_at": "2026-07-14T09:30:00Z"
    }
  ],
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
PUT /api/v2/acceptances/{id}/lines/{lineId}

Update acceptance

operationIdreplaceAcceptancesLines
TagAcceptances
SecuritybearerAuth

Update acceptance. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/acceptances/1001/lines/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Acceptance ID. 1001
lineId path yes integer:int64 min: 1 Document line ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

ReplaceAcceptanceLineRequest required

Field Required Type Flags Constraints Description Example
data yes AcceptanceLineReplacePayload Legacy PUT line update payload. Current backend treats PUT as partial update.
data.expected_quantity no number:float | null min: 0 10
data.price no number:float | null 4.99
data.batch no string | null "LOT-2026"
data.production_date no string:date | null "2026-01-15"
data.expiration_date no string:date | null "2027-01-15"
data.barcode no string | null maxLength: 64 "4601234567890"

Request examples

default

{
  "data": {
    "expected_quantity": 12,
    "batch": "LOT-2026"
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes AcceptanceLine Declared acceptance line plus live accepted/placed quantities and actual lot allocations. Placement requires a positive storage-place ID. Deleted warehouse rows are excluded.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.acceptance_id yes integer:int64 min: 1 5101
data.product_id yes integer:int64 min: 1 1201
data.expected_quantity yes number:float min: 0 10
data.accepted_quantity yes number:float min: 0 0
data.placed_quantity yes number:float min: 0 0
data.price no number:float | null 4.99
data.batch no string | null "LOT-2026"
data.production_date no string:date | null "2026-01-15"
data.expiration_date no string:date | null "2027-01-15"
data.barcode no string | null maxLength: 64 "4601234567890"
data.product no object | null
data.product.id yes integer:int64 readOnly min: 1 1201
data.product.name yes string "Coffee 250g"
data.product.external_id no string | null "EXT-10045"
data.accepted_lots no array<AcceptanceLot>
data.accepted_lots[] no AcceptanceLot
data.accepted_lots[].batch yes string | null "LOT-2026"
data.accepted_lots[].production_date yes string:date | null "2026-01-15"
data.accepted_lots[].expiration_date yes string:date | null "2027-01-15"
data.accepted_lots[].accepted_quantity yes number:float min: 0 5
data.accepted_lots[].placed_quantity yes number:float min: 0 3
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 7101,
    "acceptance_id": 5101,
    "product_id": 1201,
    "expected_quantity": 10,
    "accepted_quantity": 0,
    "placed_quantity": 0,
    "price": 4.99,
    "batch": "LOT-2026",
    "production_date": "2026-01-15",
    "expiration_date": "2027-01-15",
    "barcode": "4601234567890",
    "product": {
      "id": 1201,
      "name": "Coffee 250g",
      "external_id": "EXT-10045"
    },
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
PATCH /api/v2/acceptances/{id}/lines/{lineId}

Update acceptance

operationIdpatchAcceptancesLines
TagAcceptances
SecuritybearerAuth

Update acceptance. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request PATCH "${NWMS_BASE_URL}/api/v2/acceptances/1001/lines/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Acceptance ID. 1001
lineId path yes integer:int64 min: 1 Document line ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

PatchAcceptanceLineRequest required

Field Required Type Flags Constraints Description Example
data yes AcceptanceLinePatchPayload Editable acceptance line fields. The line ID is taken from the path and must not be repeated in the body.
data.expected_quantity no number:float | null min: 0 10
data.price no number:float | null 4.99
data.batch no string | null "LOT-2026"
data.production_date no string:date | null "2026-01-15"
data.expiration_date no string:date | null "2027-01-15"
data.barcode no string | null maxLength: 64 "4601234567890"

Request examples

default

{
  "data": {
    "expected_quantity": 12
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes AcceptanceLine Declared acceptance line plus live accepted/placed quantities and actual lot allocations. Placement requires a positive storage-place ID. Deleted warehouse rows are excluded.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.acceptance_id yes integer:int64 min: 1 5101
data.product_id yes integer:int64 min: 1 1201
data.expected_quantity yes number:float min: 0 10
data.accepted_quantity yes number:float min: 0 0
data.placed_quantity yes number:float min: 0 0
data.price no number:float | null 4.99
data.batch no string | null "LOT-2026"
data.production_date no string:date | null "2026-01-15"
data.expiration_date no string:date | null "2027-01-15"
data.barcode no string | null maxLength: 64 "4601234567890"
data.product no object | null
data.product.id yes integer:int64 readOnly min: 1 1201
data.product.name yes string "Coffee 250g"
data.product.external_id no string | null "EXT-10045"
data.accepted_lots no array<AcceptanceLot>
data.accepted_lots[] no AcceptanceLot
data.accepted_lots[].batch yes string | null "LOT-2026"
data.accepted_lots[].production_date yes string:date | null "2026-01-15"
data.accepted_lots[].expiration_date yes string:date | null "2027-01-15"
data.accepted_lots[].accepted_quantity yes number:float min: 0 5
data.accepted_lots[].placed_quantity yes number:float min: 0 3
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 7101,
    "acceptance_id": 5101,
    "product_id": 1201,
    "expected_quantity": 10,
    "accepted_quantity": 0,
    "placed_quantity": 0,
    "price": 4.99,
    "batch": "LOT-2026",
    "production_date": "2026-01-15",
    "expiration_date": "2027-01-15",
    "barcode": "4601234567890",
    "product": {
      "id": 1201,
      "name": "Coffee 250g",
      "external_id": "EXT-10045"
    },
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
DELETE /api/v2/acceptances/{id}/lines/{lineId}

Delete acceptance

operationIddeleteAcceptancesLines
TagAcceptances
SecuritybearerAuth

Deletes the resource when the authenticated account has permission and the current lifecycle state allows deletion. If deletion is blocked by related records or document state, the API returns a validation error.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request DELETE "${NWMS_BASE_URL}/api/v2/acceptances/1001/lines/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}"

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Acceptance ID. 1001
lineId path yes integer:int64 min: 1 Document line ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes object | null
meta yes object
meta.api_version yes enum enum: v2 "v2"
meta.deleted yes boolean true
meta.id yes integer:int64 min: 1 1001

Response examples

success

{
  "data": null,
  "meta": {
    "api_version": "v2",
    "deleted": true,
    "id": 1001
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
POST /api/v2/acceptances/{id}/offers deprecated

Create acceptance

operationIdcreateAcceptancesOffers
TagAcceptances
SecuritybearerAuth

Create acceptance. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
This /offers route is a compatibility alias for /lines; use the /lines route in new integrations.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/acceptances/1001/offers" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Acceptance ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

AddAcceptanceLinesRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.lines yes array<AcceptanceLineCreatePayload> minItems: 1
data.lines[] no AcceptanceLineCreatePayload Acceptance line payload. The product is resolved by product_id or product_external_id.
data.lines[] no object
data.lines[] no object

Request examples

default

{
  "data": {
    "lines": [
      {
        "product_external_id": "EXT-10045",
        "expected_quantity": 10
      }
    ]
  }
}

Responses

201 Created.

Created.

Field Required Type Flags Constraints Description Example
data yes array<AcceptanceLine>
data[] no AcceptanceLine Declared acceptance line plus live accepted/placed quantities and actual lot allocations. Placement requires a positive storage-place ID. Deleted warehouse rows are excluded.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].acceptance_id yes integer:int64 min: 1 5101
data[].product_id yes integer:int64 min: 1 1201
data[].expected_quantity yes number:float min: 0 10
data[].accepted_quantity yes number:float min: 0 0
data[].placed_quantity yes number:float min: 0 0
data[].price no number:float | null 4.99
data[].batch no string | null "LOT-2026"
data[].production_date no string:date | null "2026-01-15"
data[].expiration_date no string:date | null "2027-01-15"
data[].barcode no string | null maxLength: 64 "4601234567890"
data[].product no object | null
data[].product.id yes integer:int64 readOnly min: 1 1201
data[].product.name yes string "Coffee 250g"
data[].product.external_id no string | null "EXT-10045"
data[].accepted_lots no array<AcceptanceLot>
data[].accepted_lots[] no AcceptanceLot
data[].accepted_lots[].batch yes string | null "LOT-2026"
data[].accepted_lots[].production_date yes string:date | null "2026-01-15"
data[].accepted_lots[].expiration_date yes string:date | null "2027-01-15"
data[].accepted_lots[].accepted_quantity yes number:float min: 0 5
data[].accepted_lots[].placed_quantity yes number:float min: 0 3
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": [
    {
      "id": 7101,
      "acceptance_id": 5101,
      "product_id": 1201,
      "expected_quantity": 10,
      "accepted_quantity": 0,
      "placed_quantity": 0,
      "price": 4.99,
      "batch": "LOT-2026",
      "production_date": "2026-01-15",
      "expiration_date": "2027-01-15",
      "barcode": "4601234567890",
      "product": {
        "id": 1201,
        "name": "Coffee 250g",
        "external_id": "EXT-10045"
      },
      "created_at": "2026-07-14T09:00:00Z",
      "updated_at": "2026-07-14T09:30:00Z"
    }
  ],
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
PUT /api/v2/acceptances/{id}/offers/{lineId} deprecated

Update acceptance

operationIdreplaceAcceptancesOffers
TagAcceptances
SecuritybearerAuth

Update acceptance. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
This /offers route is a compatibility alias for /lines; use the /lines route in new integrations.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/acceptances/1001/offers/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Acceptance ID. 1001
lineId path yes integer:int64 min: 1 Document line ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

ReplaceAcceptanceLineRequest required

Field Required Type Flags Constraints Description Example
data yes AcceptanceLineReplacePayload Legacy PUT line update payload. Current backend treats PUT as partial update.
data.expected_quantity no number:float | null min: 0 10
data.price no number:float | null 4.99
data.batch no string | null "LOT-2026"
data.production_date no string:date | null "2026-01-15"
data.expiration_date no string:date | null "2027-01-15"
data.barcode no string | null maxLength: 64 "4601234567890"

Request examples

default

{
  "data": {
    "expected_quantity": 12,
    "batch": "LOT-2026"
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes AcceptanceLine Declared acceptance line plus live accepted/placed quantities and actual lot allocations. Placement requires a positive storage-place ID. Deleted warehouse rows are excluded.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.acceptance_id yes integer:int64 min: 1 5101
data.product_id yes integer:int64 min: 1 1201
data.expected_quantity yes number:float min: 0 10
data.accepted_quantity yes number:float min: 0 0
data.placed_quantity yes number:float min: 0 0
data.price no number:float | null 4.99
data.batch no string | null "LOT-2026"
data.production_date no string:date | null "2026-01-15"
data.expiration_date no string:date | null "2027-01-15"
data.barcode no string | null maxLength: 64 "4601234567890"
data.product no object | null
data.product.id yes integer:int64 readOnly min: 1 1201
data.product.name yes string "Coffee 250g"
data.product.external_id no string | null "EXT-10045"
data.accepted_lots no array<AcceptanceLot>
data.accepted_lots[] no AcceptanceLot
data.accepted_lots[].batch yes string | null "LOT-2026"
data.accepted_lots[].production_date yes string:date | null "2026-01-15"
data.accepted_lots[].expiration_date yes string:date | null "2027-01-15"
data.accepted_lots[].accepted_quantity yes number:float min: 0 5
data.accepted_lots[].placed_quantity yes number:float min: 0 3
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 7101,
    "acceptance_id": 5101,
    "product_id": 1201,
    "expected_quantity": 10,
    "accepted_quantity": 0,
    "placed_quantity": 0,
    "price": 4.99,
    "batch": "LOT-2026",
    "production_date": "2026-01-15",
    "expiration_date": "2027-01-15",
    "barcode": "4601234567890",
    "product": {
      "id": 1201,
      "name": "Coffee 250g",
      "external_id": "EXT-10045"
    },
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
DELETE /api/v2/acceptances/{id}/offers/{lineId} deprecated

Delete acceptance

operationIddeleteAcceptancesOffers
TagAcceptances
SecuritybearerAuth

Deletes the resource when the authenticated account has permission and the current lifecycle state allows deletion. If deletion is blocked by related records or document state, the API returns a validation error.
This /offers route is a compatibility alias for /lines; use the /lines route in new integrations.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request DELETE "${NWMS_BASE_URL}/api/v2/acceptances/1001/offers/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}"

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Acceptance ID. 1001
lineId path yes integer:int64 min: 1 Document line ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes object | null
meta yes object
meta.api_version yes enum enum: v2 "v2"
meta.deleted yes boolean true
meta.id yes integer:int64 min: 1 1001

Response examples

success

{
  "data": null,
  "meta": {
    "api_version": "v2",
    "deleted": true,
    "id": 1001
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}

Account

GET /api/v2/me

Get current user

operationIdgetCurrentUser
TagAccount
SecuritybearerAuth

Returns one account when it exists and is visible to the authenticated account.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/me" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

This operation has no path, query, or header parameters.

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes User Authenticated or visible NWMS user.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.name yes string "Client Manager"
data.email yes string:email "client.manager@nwms.cloud"
data.language no string | null "en"
data.storage_id no string | null "default"
data.domain_id no integer:int64 | null min: 1 3
data.warehouse_id no integer:int64 | null min: 1 42
data.parent_id no integer:int64 | null min: 1 15
data.data_scope no string | null "domain"
data.roles no array<string>
data.roles[] no string "clients"
data.domain no object | null
data.domain.id yes integer:int64 min: 1 3
data.domain.name yes string "Demo Domain"
data.warehouse no object | null
data.warehouse.id yes integer:int64 min: 1 42
data.warehouse.name yes string "Warehouse Sofia"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 15,
    "name": "Client Manager",
    "email": "client.manager@nwms.cloud",
    "language": "en",
    "storage_id": "default",
    "domain_id": 3,
    "warehouse_id": 42,
    "parent_id": null,
    "data_scope": "domain",
    "roles": [
      "clients"
    ],
    "domain": {
      "id": 3,
      "name": "Demo Domain"
    },
    "warehouse": {
      "id": 42,
      "name": "Warehouse Sofia"
    },
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}

Closed Boxes

GET /api/v2/closed-boxes

List closed boxes currently in stock

operationIdlistClosedBoxes
TagClosed Boxes
SecuritybearerAuth

Returns only sealed physical handling units that have a unique SSCC and a positive current warehouse ledger row. Each result represents one unique physical box, so balance=1 and balance_unit=box. warehouse_id identifies the client stock warehouse; physical_warehouse_id identifies the fulfillment warehouse where the box is physically located.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/closed-boxes" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 500
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 100
sort query no string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, sscc, warehouse_id, physical_warehouse_id, created_at, updated_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. "id"
id query no integer:int64 form true min: 1 Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. 1001
public_id query no string form true Filter by public_id using exact matching. The same filter may also be sent as filter[public_id] where supported by the Laravel query adapter. "4fe557e8-70f7-4b36-a124-d3afad4041d4"
sscc query no string form true Filter by sscc using exact matching. The same filter may also be sent as filter[sscc] where supported by the Laravel query adapter. "038123450000000013"
warehouse_id query no integer:int64 form true min: 1 Filter by warehouse_id using exact matching. The same filter may also be sent as filter[warehouse_id] where supported by the Laravel query adapter. 42
physical_warehouse_id query no integer:int64 form true min: 1 Filter by physical_warehouse_id using exact matching. The same filter may also be sent as filter[physical_warehouse_id] where supported by the Laravel query adapter. 41
package_product_id query no integer:int64 form true min: 1 Filter by package_product_id using exact matching. The same filter may also be sent as filter[package_product_id] where supported by the Laravel query adapter. 1202
product_id query no integer:int64 form true min: 1 Filter by product_id using exact matching. The same filter may also be sent as filter[product_id] where supported by the Laravel query adapter. 1201
base_product_id query no integer:int64 form true min: 1 Filter by base_product_id using exact matching. The same filter may also be sent as filter[base_product_id] where supported by the Laravel query adapter. 1200
status query no string form true Filter by status using exact matching. The same filter may also be sent as filter[status] where supported by the Laravel query adapter. "waiting"
case_id query no integer:int64 form true min: 1 Filter by case_id using exact matching. The same filter may also be sent as filter[case_id] where supported by the Laravel query adapter. 1
created_at_from query no string:date form true Lower inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_from] where supported by the Laravel query adapter. "2026-07-14"
created_at_to query no string:date form true Upper inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_to] where supported by the Laravel query adapter. "2026-07-14"
updated_at_from query no string:date form true Lower inclusive date boundary for updated_at. The same filter may also be sent as filter[updated_at_from] where supported by the Laravel query adapter. "2026-07-14"
updated_at_to query no string:date form true Upper inclusive date boundary for updated_at. The same filter may also be sent as filter[updated_at_to] where supported by the Laravel query adapter. "2026-07-14"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<ClosedBox>
data[] no ClosedBox One sealed physical handling unit identified by a unique SSCC and currently present in warehouse stock. warehouse_id is the client stock warehouse; physical_warehouse_id is the fulfillment warehouse where the box is physically located.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at yes string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at yes string:date-time | null "2026-07-14T10:30:00Z"
data[].public_id yes string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data[].sscc yes string minLength: 18
maxLength: 18
pattern: ^\d{18}$
Unique normalized GS1 SSCC. Leading zeroes are preserved. "038123450000000013"
data[].warehouse_id yes integer:int64 | null min: 1 42
data[].warehouse_name yes string | null "Client warehouse Sofia"
data[].physical_warehouse_id yes integer:int64 min: 1 41
data[].physical_warehouse_name yes string | null "FF warehouse Sofia"
data[].balance yes enum:int64 min: 1
max: 1
enum: 1
Current balance of this unique SSCC in boxes. A row is returned only while the sealed box is in stock, therefore the value is always 1. 1
data[].balance_unit yes enum enum: box "box"
data[].status yes string "routed"
data[].seal_state yes enum enum: sealed "sealed"
data[].box_type yes string "box"
data[].barcode yes string minLength: 1
maxLength: 190
"038123450000000013"
data[].package_product_id yes integer:int64 | null min: 1 1202
data[].package_product_name yes string | null "Coffee box 12"
data[].container_place_id yes integer:int64 | null min: 1 5501
data[].place_id yes integer:int64 | null min: 1 501
data[].place_barcode yes string | null "SHELF-501"
data[].contents yes array<ClosedBoxItem>
data[].contents[] no ClosedBoxItem
data[].contents[].product_id yes integer:int64 min: 1 1202
data[].contents[].product_name yes string | null "Coffee box 12"
data[].contents[].base_product_id yes integer:int64 min: 1 1201
data[].contents[].base_product_name yes string | null "Coffee 250g"
data[].contents[].quantity yes number:float min: 0 Recorded quantity in product units. For a quant product this is the number of boxes. 1
data[].contents[].base_quantity yes number:float min: 0 Recorded quantity converted to base product units. 12
data[].contents[].current_quantity yes number:float min: 0 Current positive quantity in the warehouse ledger row linked to this box content. 1
data[].contents[].batch yes string | null "LOT-2026"
data[].contents[].production_date yes string:date | null "2026-01-15"
data[].contents[].expiration_date yes string:date | null "2027-01-15"
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "id": 5501,
      "public_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
      "sscc": "038123450000000013",
      "warehouse_id": 42,
      "warehouse_name": "Client warehouse Sofia",
      "physical_warehouse_id": 41,
      "physical_warehouse_name": "FF warehouse Sofia",
      "balance": 1,
      "balance_unit": "box",
      "status": "routed",
      "seal_state": "sealed",
      "box_type": "box",
      "barcode": "038123450000000013",
      "package_product_id": 1202,
      "package_product_name": "Coffee box 12",
      "container_place_id": 5501,
      "place_id": 501,
      "place_barcode": "SHELF-501",
      "contents": [
        {
          "product_id": 1202,
          "product_name": "Coffee box 12",
          "base_product_id": 1201,
          "base_product_name": "Coffee 250g",
          "quantity": 1,
          "base_quantity": 12,
          "current_quantity": 1,
          "batch": "LOT-2026",
          "production_date": "2026-01-15",
          "expiration_date": "2027-01-15"
        }
      ],
      "created_at": "2026-08-12T09:00:00Z",
      "updated_at": "2026-08-12T09:30:00Z"
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/closed-boxes?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/closed-boxes?page=2",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/closed-boxes?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "https://betawms.ffcdek.ru/api/v2/closed-boxes",
    "per_page": 100,
    "to": 100,
    "total": 123
  }
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
GET /api/v2/closed-boxes/{box}

Get one closed box

operationIdgetClosedBox
TagClosed Boxes
SecuritybearerAuth

Returns one current sealed box by internal numeric ID, public UUID, or exact 18-digit SSCC. Opened, shipped, cancelled, consumed, expected-only, and zero-balance handling units return 404.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/closed-boxes/038123450000000013" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
box path yes string Closed box internal ID, public UUID, or 18-digit SSCC. "038123450000000013"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes ClosedBox One sealed physical handling unit identified by a unique SSCC and currently present in warehouse stock. warehouse_id is the client stock warehouse; physical_warehouse_id is the fulfillment warehouse where the box is physically located.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at yes string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at yes string:date-time | null "2026-07-14T10:30:00Z"
data.public_id yes string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.sscc yes string minLength: 18
maxLength: 18
pattern: ^\d{18}$
Unique normalized GS1 SSCC. Leading zeroes are preserved. "038123450000000013"
data.warehouse_id yes integer:int64 | null min: 1 42
data.warehouse_name yes string | null "Client warehouse Sofia"
data.physical_warehouse_id yes integer:int64 min: 1 41
data.physical_warehouse_name yes string | null "FF warehouse Sofia"
data.balance yes enum:int64 min: 1
max: 1
enum: 1
Current balance of this unique SSCC in boxes. A row is returned only while the sealed box is in stock, therefore the value is always 1. 1
data.balance_unit yes enum enum: box "box"
data.status yes string "routed"
data.seal_state yes enum enum: sealed "sealed"
data.box_type yes string "box"
data.barcode yes string minLength: 1
maxLength: 190
"038123450000000013"
data.package_product_id yes integer:int64 | null min: 1 1202
data.package_product_name yes string | null "Coffee box 12"
data.container_place_id yes integer:int64 | null min: 1 5501
data.place_id yes integer:int64 | null min: 1 501
data.place_barcode yes string | null "SHELF-501"
data.contents yes array<ClosedBoxItem>
data.contents[] no ClosedBoxItem
data.contents[].product_id yes integer:int64 min: 1 1202
data.contents[].product_name yes string | null "Coffee box 12"
data.contents[].base_product_id yes integer:int64 min: 1 1201
data.contents[].base_product_name yes string | null "Coffee 250g"
data.contents[].quantity yes number:float min: 0 Recorded quantity in product units. For a quant product this is the number of boxes. 1
data.contents[].base_quantity yes number:float min: 0 Recorded quantity converted to base product units. 12
data.contents[].current_quantity yes number:float min: 0 Current positive quantity in the warehouse ledger row linked to this box content. 1
data.contents[].batch yes string | null "LOT-2026"
data.contents[].production_date yes string:date | null "2026-01-15"
data.contents[].expiration_date yes string:date | null "2027-01-15"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 5501,
    "public_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "sscc": "038123450000000013",
    "warehouse_id": 42,
    "warehouse_name": "Client warehouse Sofia",
    "physical_warehouse_id": 41,
    "physical_warehouse_name": "FF warehouse Sofia",
    "balance": 1,
    "balance_unit": "box",
    "status": "routed",
    "seal_state": "sealed",
    "box_type": "box",
    "barcode": "038123450000000013",
    "package_product_id": 1202,
    "package_product_name": "Coffee box 12",
    "container_place_id": 5501,
    "place_id": 501,
    "place_barcode": "SHELF-501",
    "contents": [
      {
        "product_id": 1202,
        "product_name": "Coffee box 12",
        "base_product_id": 1201,
        "base_product_name": "Coffee 250g",
        "quantity": 1,
        "base_quantity": 12,
        "current_quantity": 1,
        "batch": "LOT-2026",
        "production_date": "2026-01-15",
        "expiration_date": "2027-01-15"
      }
    ],
    "created_at": "2026-08-12T09:00:00Z",
    "updated_at": "2026-08-12T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}

DataMatrix

GET /api/v2/datamatrix

List datamatrix

operationIdlistDataMatrix
TagDataMatrix
SecuritybearerAuth

Returns codes visible to the authenticated account. accepted_at and shipped_at are read-only ISO 8601 timestamps with an explicit installation timezone offset, or null. Each is the latest recorded acceptance/shipment event for this code in its CURRENT domain and warehouse; document dates and marking/extinguishing dates are never substituted. Historical events not recorded by the system remain null. Import and manual status changes do not create physical acceptance/shipment events. These fields are available from GET /api/v2/datamatrix; do not send them to create/status commands.
Use accepted_at_from / accepted_at_to or shipped_at_from / shipped_at_to at the query root or inside filter[...]. A YYYY-MM-DD boundary is interpreted in the installation timezone; _to includes the entire day. An ISO timestamp must include seconds and Z or an explicit offset (e.g. 2026-10-22T10:00:00+03:00); fractional seconds are not accepted. Exact time boundaries are inclusive and compared in UTC. Encode + as %2B in URLs, or use curl --data-urlencode. Invalid dates, arrays and reversed ranges return HTTP 422. Either bound may be omitted; different field ranges are combined with AND. Null dates do not match a nonempty range.
Sort by accepted_at, shipped_at (prefix - for descending); comma-separated sort keys are supported. Equal values use the code ID ascending as a final tie-breaker. Nulls sort first ascending and last descending. Without the lifecycle event table these fields are null and event date filters return an empty list. This table is required for operational date tracking. Date ranges select the latest per-code event, not an event history or a reliable incremental change cursor.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/datamatrix" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 500
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 100
sort query no string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Comma-separated sort fields: id, status_id, warehouse_id, created_at, updated_at, used_at, accepted_at, shipped_at. Prefix - for descending. Default: -id. Equal values use code ID ascending as a final tie-breaker. Nulls first ascending, last descending. "-id"
id query no integer:int64 form true min: 1 Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. 1001
status_id query no DataMatrixStatusId form true Filter by status_id using exact matching. The same filter may also be sent as filter[status_id] where supported by the Laravel query adapter.
warehouse_id query no integer:int64 form true min: 1 Filter by warehouse_id using exact matching. The same filter may also be sent as filter[warehouse_id] where supported by the Laravel query adapter. 42
acceptance_id query no integer:int64 form true min: 1 Filter by acceptance_id using exact matching. The same filter may also be sent as filter[acceptance_id] where supported by the Laravel query adapter. 1
order_id query no integer:int64 form true min: 1 Filter by order_id using exact matching. The same filter may also be sent as filter[order_id] where supported by the Laravel query adapter. 1
product_id query no integer:int64 form true min: 1 Filter by product_id using exact matching. The same filter may also be sent as filter[product_id] where supported by the Laravel query adapter. 1201
barcode query no string form true Filter by barcode using partial text matching. The same filter may also be sent as filter[barcode] where supported by the Laravel query adapter. "4601234567890"
datamatrix query no string form true Filter by datamatrix using partial text matching. The same filter may also be sent as filter[datamatrix] where supported by the Laravel query adapter. "010460123456789021ABC123"
short_code query no string form true Filter by short_code using partial text matching. The same filter may also be sent as filter[short_code] where supported by the Laravel query adapter. "ABC123"
batch query no string form true Filter by batch using partial text matching. The same filter may also be sent as filter[batch] where supported by the Laravel query adapter. "LOT-2026"
created_at_from query no string:date form true Lower inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_from] where supported by the Laravel query adapter. "2026-07-14"
created_at_to query no string:date form true Upper inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_to] where supported by the Laravel query adapter. "2026-07-14"
used_at_from query no string:date form true Lower inclusive date boundary for used_at. The same filter may also be sent as filter[used_at_from] where supported by the Laravel query adapter. "2026-07-14"
used_at_to query no string:date form true Upper inclusive date boundary for used_at. The same filter may also be sent as filter[used_at_to] where supported by the Laravel query adapter. "2026-07-14"
production_date_from query no string:date form true Lower inclusive date boundary for production_date. The same filter may also be sent as filter[production_date_from] where supported by the Laravel query adapter. "2026-07-14"
production_date_to query no string:date form true Upper inclusive date boundary for production_date. The same filter may also be sent as filter[production_date_to] where supported by the Laravel query adapter. "2026-07-14"
expiration_date_from query no string:date form true Lower inclusive date boundary for expiration_date. The same filter may also be sent as filter[expiration_date_from] where supported by the Laravel query adapter. "2026-07-14"
expiration_date_to query no string:date form true Upper inclusive date boundary for expiration_date. The same filter may also be sent as filter[expiration_date_to] where supported by the Laravel query adapter. "2026-07-14"
accepted_at_from query no string Inclusive lower bound for accepted_at. YYYY-MM-DD (installation timezone, full end day) or ISO 8601 with seconds and Z/offset (inclusive exact time). No fractional seconds. Also accepts filter[accepted_at_from]. Invalid/reversed bounds: 422. "2026-10-22"
accepted_at_to query no string Upper bound for accepted_at. YYYY-MM-DD (installation timezone, full end day) or ISO 8601 with seconds and Z/offset (inclusive exact time). No fractional seconds. Also accepts filter[accepted_at_to]. Invalid/reversed bounds: 422. "2026-10-22"
shipped_at_from query no string Inclusive lower bound for shipped_at. YYYY-MM-DD (installation timezone, full end day) or ISO 8601 with seconds and Z/offset (inclusive exact time). No fractional seconds. Also accepts filter[shipped_at_from]. Invalid/reversed bounds: 422. "2026-10-22"
shipped_at_to query no string Upper bound for shipped_at. YYYY-MM-DD (installation timezone, full end day) or ISO 8601 with seconds and Z/offset (inclusive exact time). No fractional seconds. Also accepts filter[shipped_at_to]. Invalid/reversed bounds: 422. "2026-10-22"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<DataMatrix>
data[] no DataMatrix Marked goods DataMatrix code.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date | null readOnly Stored code upload date; date precision. "2026-10-19"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].domain_id no integer:int64 | null min: 1 3
data[].warehouse_id no integer:int64 | null min: 1 42
data[].status_id no enum:int64 | null enum: 0, 1, 2 0 - Imported and available for future warehouse operations. 1 - Reserved or attached by an operational document. 2 - Used by an outbound or completed operation. 0
data[].acceptance_id no integer:int64 | null min: 1 5101
data[].order_id no integer:int64 | null min: 1 8101
data[].product_id no integer:int64 | null min: 1 1201
data[].barcode no string | null maxLength: 14 "04601234567890"
data[].short_code no string | null maxLength: 14 "ABC123"
data[].crypto_tail no string | null "CRYPTO"
data[].datamatrix no string | null maxLength: 125 "010460123456789021ABC123"
data[].production_date no string:date | null "2026-01-15"
data[].expiration_date no string:date | null "2027-01-15"
data[].batch no string | null "LOT-2026"
data[].used_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].accepted_at no string:date-time | null "2026-10-22T10:00:00+03:00"
data[].shipped_at no string:date-time | null "2026-10-22T10:00:00+03:00"
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "id": 6101,
      "domain_id": 3,
      "warehouse_id": 42,
      "status_id": 0,
      "acceptance_id": 5101,
      "order_id": null,
      "product_id": 1201,
      "barcode": "04601234567890",
      "short_code": "ABC123",
      "crypto_tail": "CRYPTO",
      "datamatrix": "010460123456789021ABC123",
      "production_date": "2026-01-15",
      "expiration_date": "2027-01-15",
      "batch": "LOT-2026",
      "created_at": "2026-10-19",
      "used_at": null,
      "accepted_at": "2026-10-22T10:00:00+03:00",
      "shipped_at": null
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/datamatrix?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/datamatrix?page=2",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/datamatrix?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "https://betawms.ffcdek.ru/api/v2/datamatrix",
    "per_page": 100,
    "to": 100,
    "total": 123
  }
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}
POST /api/v2/datamatrix

Create datamatrix

operationIdcreateDataMatrix
TagDataMatrix
SecuritybearerAuth

Imports one or more DataMatrix codes. Batch rate limits and idempotency protect repeated imports.
Listing without order_id is supported. order_id accepts one value, comma-separated values or repeated array parameters; order_ids is unsupported. Statuses: 0 unused, 1 in warehouse (possibly assigned to an order), 2 extinguished. created_at and used_at have date precision; there is no reliable updated_at/change cursor for reassignment or cancellation.
Listing without order_id is supported. order_id accepts one value, comma-separated values or repeated array parameters; order_ids is unsupported. Statuses: 0 unused, 1 in warehouse (possibly assigned to an order), 2 extinguished. created_at and used_at have date precision; there is no reliable updated_at/change cursor for reassignment or cancellation.
Listing without order_id is supported. order_id accepts one value, comma-separated values or repeated array parameters; order_ids is unsupported. Statuses: 0 unused, 1 in warehouse (possibly assigned to an order), 2 extinguished. created_at and used_at have date precision; there is no reliable updated_at/change cursor for reassignment or cancellation.
Listing without order_id is supported. order_id accepts one value, comma-separated values or repeated array parameters; order_ids is unsupported. Statuses: 0 unused, 1 in warehouse (possibly assigned to an order), 2 extinguished. created_at and used_at have date precision; there is no reliable updated_at/change cursor for reassignment or cancellation.
Listing without order_id is supported. order_id accepts one value, comma-separated values or repeated array parameters; order_ids is unsupported. Statuses: 0 unused, 1 in warehouse (possibly assigned to an order), 2 extinguished. created_at and used_at have date precision; there is no reliable updated_at/change cursor for reassignment or cancellation.
Listing without order_id is supported. order_id accepts one value, comma-separated values or repeated array parameters; order_ids is unsupported. Statuses: 0 unused, 1 in warehouse (possibly assigned to an order), 2 extinguished. created_at and used_at have date precision; there is no reliable updated_at/change cursor for reassignment or cancellation.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/datamatrix" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CreateDataMatrixRequest required

Field Required Type Flags Constraints Description Example
data yes CreateDataMatrixItemPayload
data yes array<CreateDataMatrixItemPayload> minItems: 1
maxItems: 5000
data yes object
data.items yes array<CreateDataMatrixItemPayload> minItems: 1
maxItems: 5000

Request examples

default

{
  "data": {
    "items": [
      {
        "warehouse_id": 42,
        "product_id": 1201,
        "barcode": "04601234567890",
        "datamatrix": "010460123456789021ABC123"
      },
      {
        "warehouse_id": 42,
        "product_id": 1201,
        "barcode": "04601234567891",
        "datamatrix": "010460123456789021ABC124"
      }
    ]
  }
}

Responses

201 Created.

Created.

Field Required Type Flags Constraints Description Example
data yes DataMatrixImportResult
data.created yes integer:int64 min: 0 2
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "created": 2
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
DELETE /api/v2/datamatrix

Delete datamatrix

operationIddeleteDataMatrix
TagDataMatrix
SecuritybearerAuth

Deletes the resource when the authenticated account has permission and the current lifecycle state allows deletion. If deletion is blocked by related records or document state, the API returns a validation error.
Listing without order_id is supported. order_id accepts one value, comma-separated values or repeated array parameters; order_ids is unsupported. Statuses: 0 unused, 1 in warehouse (possibly assigned to an order), 2 extinguished. created_at and used_at have date precision; there is no reliable updated_at/change cursor for reassignment or cancellation.
Listing without order_id is supported. order_id accepts one value, comma-separated values or repeated array parameters; order_ids is unsupported. Statuses: 0 unused, 1 in warehouse (possibly assigned to an order), 2 extinguished. created_at and used_at have date precision; there is no reliable updated_at/change cursor for reassignment or cancellation.
Listing without order_id is supported. order_id accepts one value, comma-separated values or repeated array parameters; order_ids is unsupported. Statuses: 0 unused, 1 in warehouse (possibly assigned to an order), 2 extinguished. created_at and used_at have date precision; there is no reliable updated_at/change cursor for reassignment or cancellation.
Listing without order_id is supported. order_id accepts one value, comma-separated values or repeated array parameters; order_ids is unsupported. Statuses: 0 unused, 1 in warehouse (possibly assigned to an order), 2 extinguished. created_at and used_at have date precision; there is no reliable updated_at/change cursor for reassignment or cancellation.
Listing without order_id is supported. order_id accepts one value, comma-separated values or repeated array parameters; order_ids is unsupported. Statuses: 0 unused, 1 in warehouse (possibly assigned to an order), 2 extinguished. created_at and used_at have date precision; there is no reliable updated_at/change cursor for reassignment or cancellation.
Listing without order_id is supported. order_id accepts one value, comma-separated values or repeated array parameters; order_ids is unsupported. Statuses: 0 unused, 1 in warehouse (possibly assigned to an order), 2 extinguished. created_at and used_at have date precision; there is no reliable updated_at/change cursor for reassignment or cancellation.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request DELETE "${NWMS_BASE_URL}/api/v2/datamatrix" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

DeleteDataMatrixRequest required

Field Required Type Flags Constraints Description Example
data yes DataMatrixIdsPayload
data.ids yes array<integer:int64> minItems: 1
maxItems: 10000
data.ids[] no integer:int64 min: 1 6101

Request examples

default

{
  "data": {
    "ids": [
      6101,
      6102
    ]
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes DataMatrixDeleteResult
data.deleted yes integer:int64 min: 0 1
data.skipped yes integer:int64 min: 0 1
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "deleted": 1,
    "skipped": 1
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
PUT /api/v2/datamatrix/status

Update DataMatrix status

operationIdupdateDataMatrixStatus
TagDataMatrix
SecuritybearerAuth

Changes the status of multiple DataMatrix codes after verifying all IDs belong to the caller visible domain.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/datamatrix/status" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

ReplaceDataMatrixStatusRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.ids yes array<integer:int64> minItems: 1
maxItems: 10000
data.ids[] no integer:int64 min: 1 6101
data.status_id yes DataMatrixStatusId enum: 0, 1, 2 0 - Imported and available for future warehouse operations. 1 - Reserved or attached by an operational document. 2 - Used by an outbound or completed operation. 0

Request examples

default

{
  "data": {
    "ids": [
      6101,
      6102
    ],
    "status_id": 1
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes DataMatrixStatusUpdateResult
data.updated yes integer:int64 min: 0 2
data.dmt_status yes DataMatrixStatusId enum: 0, 1, 2 0 - Imported and available for future warehouse operations. 1 - Reserved or attached by an operational document. 2 - Used by an outbound or completed operation. 0
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "updated": 2,
    "dmt_status": 1
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
PATCH /api/v2/datamatrix/status

Update DataMatrix status

operationIdupdateDataMatrixStatusByPath
TagDataMatrix
SecuritybearerAuth

Update DataMatrix status. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request PATCH "${NWMS_BASE_URL}/api/v2/datamatrix/status" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

PatchDataMatrixStatusRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.ids yes array<integer:int64> minItems: 1
maxItems: 10000
data.ids[] no integer:int64 min: 1 6101
data.status_id yes DataMatrixStatusId enum: 0, 1, 2 0 - Imported and available for future warehouse operations. 1 - Reserved or attached by an operational document. 2 - Used by an outbound or completed operation. 0

Request examples

default

{
  "data": {
    "ids": [
      6101,
      6102
    ],
    "status_id": 1
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes DataMatrixStatusUpdateResult
data.updated yes integer:int64 min: 0 2
data.dmt_status yes DataMatrixStatusId enum: 0, 1, 2 0 - Imported and available for future warehouse operations. 1 - Reserved or attached by an operational document. 2 - Used by an outbound or completed operation. 0
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "updated": 2,
    "dmt_status": 1
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}

Delivery Payments

GET /api/v2/order-delivery-payments

List delivery payments

operationIdlistOrderDeliveryPayments
TagDelivery Payments
SecuritybearerAuth

Returns delivery payments visible to the authenticated account. Use documented query parameters for filtering, sorting, and pagination.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/order-delivery-payments" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 250
Number of records per page. Default is 50; maximum is 250. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 50
sort query no string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, order_id, track_id, delivery_sum, cod_sum, created_at, updated_at. Default: -id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. "-id"
id query no integer:int64 form true min: 1 Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. 1001
order_id query no integer:int64 form true min: 1 Filter by order_id using exact matching. The same filter may also be sent as filter[order_id] where supported by the Laravel query adapter. 1
status_id query no integer:int64 form true min: 1 Filter by status_id using exact matching. The same filter may also be sent as filter[status_id] where supported by the Laravel query adapter. 1
payment_order_id query no integer:int64 form true min: 1 Filter by payment_order_id using exact matching. The same filter may also be sent as filter[payment_order_id] where supported by the Laravel query adapter. 9401
transaction_id query no integer:int64 form true min: 1 Filter by transaction_id using exact matching. The same filter may also be sent as filter[transaction_id] where supported by the Laravel query adapter. 9501
cod_act_id query no integer:int64 form true min: 1 Filter by cod_act_id using exact matching. The same filter may also be sent as filter[cod_act_id] where supported by the Laravel query adapter. 9601
track_id query no string form true Filter by track_id using partial text matching. The same filter may also be sent as filter[track_id] where supported by the Laravel query adapter. "CDEK-123456789"
etalon_order_id query no string form true Filter by etalon_order_id using partial text matching. The same filter may also be sent as filter[etalon_order_id] where supported by the Laravel query adapter. "EXT-10045"
created_at_from query no string:date form true Lower inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_from] where supported by the Laravel query adapter. "2026-07-14"
created_at_to query no string:date form true Upper inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_to] where supported by the Laravel query adapter. "2026-07-14"
updated_at_from query no string:date form true Lower inclusive date boundary for updated_at. The same filter may also be sent as filter[updated_at_from] where supported by the Laravel query adapter. "2026-07-14"
updated_at_to query no string:date form true Upper inclusive date boundary for updated_at. The same filter may also be sent as filter[updated_at_to] where supported by the Laravel query adapter. "2026-07-14"
delivery_sum_from query no number:float form true Lower inclusive numeric boundary for delivery_sum. The same filter may also be sent as filter[delivery_sum_from] where supported by the Laravel query adapter. 48.58
delivery_sum_to query no number:float form true Upper inclusive numeric boundary for delivery_sum. The same filter may also be sent as filter[delivery_sum_to] where supported by the Laravel query adapter. 48.58
cod_sum_from query no number:float form true Lower inclusive numeric boundary for cod_sum. The same filter may also be sent as filter[cod_sum_from] where supported by the Laravel query adapter. 48.58
cod_sum_to query no number:float form true Upper inclusive numeric boundary for cod_sum. The same filter may also be sent as filter[cod_sum_to] where supported by the Laravel query adapter. 48.58

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<OrderDeliveryPayment>
data[] no OrderDeliveryPayment Delivery payment reconciliation row.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].domain_id no integer:int64 | null min: 1 3
data[].order_id no integer:int64 | null min: 1 8101
data[].track_id no string | null "CDEK-123456789"
data[].amounts yes OrderDeliveryPaymentAmounts
data[].amounts.delivery_sum no number:float | null 8.6
data[].amounts.delivery_tax no number:float | null 1.72
data[].amounts.cod_sum no number:float | null 48.58
data[].amounts.cod_agent_sum no number:float | null 1.5
data[].status_id no integer:int64 | null 1
data[].payment_order_id no integer:int64 | null min: 1 9401
data[].etalon_order_id no string | null "EXT-10045"
data[].transaction_id no integer:int64 | null min: 1 9501
data[].cod_act_id no integer:int64 | null min: 1 9601
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "id": 9301,
      "domain_id": 3,
      "order_id": 8101,
      "track_id": "CDEK-123456789",
      "amounts": {
        "delivery_sum": 8.6,
        "delivery_tax": 1.72,
        "cod_sum": 48.58,
        "cod_agent_sum": 1.5
      },
      "status_id": 1,
      "payment_order_id": 9401,
      "etalon_order_id": "EXT-10045",
      "transaction_id": 9501,
      "cod_act_id": 9601,
      "created_at": "2026-07-14T09:00:00Z",
      "updated_at": "2026-07-14T09:30:00Z"
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/order-delivery-payments?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/order-delivery-payments?page=2",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/order-delivery-payments?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "https://betawms.ffcdek.ru/api/v2/order-delivery-payments",
    "per_page": 50,
    "to": 50,
    "total": 73
  }
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}

Loading Visits

GET /api/v2/loading/visits

List loading visits

operationIdlistLoadingVisits
TagLoading Visits
SecuritybearerAuth

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"
}
POST /api/v2/loading/visits

Create loading visit

operationIdcreateLoadingVisits
TagLoading Visits
SecuritybearerAuth

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.json

Parameters

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 /api/v2/loading/visits/{id}

Get loading visit

operationIdgetLoadingVisits
TagLoading Visits
SecuritybearerAuth

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"
}
PUT /api/v2/loading/visits/{id}

Update loading visit

operationIdreplaceLoadingVisits
TagLoading Visits
SecuritybearerAuth

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.json

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

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"
}
PATCH /api/v2/loading/visits/{id}

Update loading visit

operationIdpatchLoadingVisits
TagLoading Visits
SecuritybearerAuth

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.json

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

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"
}
POST /api/v2/loading/visits/{id}/cancel

Cancel loading visit

operationIdcancelLoadingVisitByPath
TagLoading Visits
SecuritybearerAuth

Cancel loading visit. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/loading/visits/1001/cancel" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}"

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Loading visit ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes LoadingVisit Scheduled loading or unloading visit.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.domain_id no integer:int64 | null min: 1 3
data.warehouse_id no integer:int64 | null min: 1 42
data.client_warehouse_id no integer:int64 | null min: 1 43
data.shop_id no integer:int64 | null min: 1 12
data.user_id no integer:int64 | null min: 1 9
data.type yes LoadingVisitType enum: inbound, outbound "inbound"
data.status yes LoadingVisitStatus enum: draft, approved, waiting, called, in_progress, finished, cancelled, no_show Loading visit lifecycle status stored in rwLoadingVisit. "waiting"
data.queue_number no integer:int64 | null 17
data.driver yes LoadingVisitDriver
data.driver.phone no string | null "+359888123456"
data.driver.name no string | null "Ivan Petrov"
data.driver.vehicle_number no string | null "CB1234AB"
data.document yes LoadingVisitDocument
data.document.type no enum | null enum: acceptance, order, send_document "acceptance"
data.document.id no integer:int64 | null min: 1 5101
data.document.acceptance_id no integer:int64 | null min: 1 5101
data.document.order_id no integer:int64 | null min: 1 8101
data.document.send_document_id no integer:int64 | null min: 1 9101
data.planned_at no string:date-time | null "2026-07-14T10:00:00Z"
data.registered_at no string:date-time | null "2026-07-14T09:55:00Z"
data.called_at no string:date-time | null "2026-07-14T10:30:00Z"
data.started_at no string:date-time | null "2026-07-14T10:30:00Z"
data.finished_at no string:date-time | null "2026-07-14T10:30:00Z"
data.gate_id no integer:int64 | null min: 1 3
data.comment no string | null "ASN-100245"
data.warehouse_comment no string | null "Gate 2"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 9101,
    "domain_id": 3,
    "warehouse_id": 42,
    "client_warehouse_id": 43,
    "shop_id": 12,
    "user_id": 15,
    "type": "inbound",
    "status": "waiting",
    "queue_number": 17,
    "driver": {
      "phone": "+359888123456",
      "name": "Ivan Petrov",
      "vehicle_number": "CB1234AB"
    },
    "document": {
      "type": "acceptance",
      "id": 5101,
      "acceptance_id": 5101,
      "order_id": null,
      "send_document_id": null
    },
    "planned_at": "2026-07-14T10:00:00Z",
    "registered_at": "2026-07-14T09:55:00Z",
    "called_at": null,
    "started_at": null,
    "finished_at": null,
    "gate_id": 3,
    "comment": "ASN-100245",
    "warehouse_comment": "Gate 2",
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}

Notification Templates

GET /api/v2/notification-templates

List notification templates

operationIdlistNotificationTemplates
TagNotification Templates
SecuritybearerAuth

Returns a tenant-scoped, paginated list of document-status notification templates.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/notification-templates" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 250
Number of templates per page. Default 50; maximum 250. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 50
sort query no string form false Comma-separated sort fields: id, name, channel, document_type, document_status_id, delay_hours, status_id, created_at, updated_at. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. "-id"
include query no enum form false enum: bindings Set to bindings to include warehouse bindings in every list item. The same filter may also be sent as filter[include] where supported by the Laravel query adapter. "bindings"
filter[id] query no integer:int64 min: 0 Exact template ID. 41
filter[name] query no string Case-insensitive partial template name. "Acceptance closed"
filter[channel] query no enum enum: email, internal Exact delivery channel. "email"
filter[document_type] query no enum enum: acceptance, order Exact document type. "acceptance"
filter[document_status_id] query no integer:int64 min: 0 Exact target document status ID. 4
filter[status_id] query no integer:int64 min: 0 Exact template status: 0 or 1. 1
filter[owner_user_id] query no integer:int64 min: 0 Exact owner user ID. 15
created_at_from query no string:date-time form true Created-at lower boundary. The same filter may also be sent as filter[created_at_from] where supported by the Laravel query adapter. "2026-07-01T00:00:00Z"
created_at_to query no string:date-time form true Created-at upper boundary. The same filter may also be sent as filter[created_at_to] where supported by the Laravel query adapter. "2026-07-31T23:59:59Z"
updated_at_from query no string:date-time form true Updated-at lower boundary. The same filter may also be sent as filter[updated_at_from] where supported by the Laravel query adapter. "2026-07-01T00:00:00Z"
updated_at_to query no string:date-time form true Updated-at upper boundary. The same filter may also be sent as filter[updated_at_to] where supported by the Laravel query adapter. "2026-07-31T23:59:59Z"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<NotificationTemplate>
data[] no NotificationTemplate Template used when an acceptance or order enters the configured status. The bindings field is returned by the item endpoint and by list requests with include=bindings.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].domain_id yes integer:int64 min: 1 3
data[].owner_user_id yes integer:int64 | null min: 1 15
data[].name yes string "Acceptance closed"
data[].event yes enum enum: document.status_changed "document.status_changed"
data[].channel yes enum enum: email, internal "email"
data[].document_type yes enum enum: acceptance, order "acceptance"
data[].document_status_id yes integer:int64 min: 0 4
data[].delay_hours yes integer:int64 min: 0
max: 8760
0
data[].start_document_id yes integer:int64 | null min: 1 1000
data[].conditions yes object {"acceptance_has_discrepancy":true}
data[].subject yes string | null maxLength: 255 "Document \#{doc_id}: {doc_status_name}"
data[].body_html yes string | null "<p>Document \#{doc_id} is closed.</p>"
data[].body_text yes string | null "Document \#{doc_id} is closed."
data[].attachment_print_template_id yes integer:int64 | null min: 1 12
data[].status_id yes enum:int64 enum: 0, 1 1
data[].bindings_count yes integer:int64 min: 0 1
data[].bindings no array<NotificationTemplateBinding>
data[].bindings[] no NotificationTemplateBinding Warehouse and recipient binding for one notification template.
data[].bindings[].id yes integer:int64 readOnly min: 1 1001
data[].bindings[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].bindings[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].bindings[].template_id yes integer:int64 min: 1 41
data[].bindings[].domain_id yes integer:int64 min: 1 3
data[].bindings[].warehouse_id yes integer:int64 min: 1 42
data[].bindings[].warehouse no object | null
data[].bindings[].warehouse.id yes integer:int64 min: 1 42
data[].bindings[].warehouse.name yes string "Client Warehouse Sofia"
data[].bindings[].recipients yes array<string:email> maxItems: 100
data[].bindings[].recipients[] no string:email "client@example.com"
data[].bindings[].internal_recipient_mode yes enum enum: warehouse_users, domain_users, explicit "warehouse_users"
data[].bindings[].internal_user_ids yes array<integer:int64> maxItems: 1000
data[].bindings[].internal_user_ids[] no integer:int64 min: 1 15
data[].bindings[].status_id yes enum:int64 enum: 0, 1 1
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "id": 41,
      "domain_id": 3,
      "owner_user_id": 15,
      "name": "Acceptance closed",
      "event": "document.status_changed",
      "channel": "email",
      "document_type": "acceptance",
      "document_status_id": 4,
      "delay_hours": 0,
      "start_document_id": null,
      "conditions": {
        "acceptance_has_discrepancy": true
      },
      "subject": "Document #{doc_id}: {doc_status_name}",
      "body_html": "<p>Document #{doc_id} is closed.</p>",
      "body_text": null,
      "attachment_print_template_id": 12,
      "status_id": 1,
      "bindings_count": 1,
      "bindings": [
        {
          "id": 7,
          "template_id": 41,
          "domain_id": 3,
          "warehouse_id": 42,
          "warehouse": {
            "id": 42,
            "name": "Client Warehouse Sofia"
          },
          "recipients": [
            "client@example.com"
          ],
          "internal_recipient_mode": "warehouse_users",
          "internal_user_ids": [

          ],
          "status_id": 1,
          "created_at": "2026-09-17T09:00:00Z",
          "updated_at": "2026-09-17T09:00:00Z"
        }
      ],
      "created_at": "2026-09-17T09:00:00Z",
      "updated_at": "2026-09-17T09:00:00Z"
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/notification-templates?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/notification-templates?page=1",
    "prev": null,
    "next": null
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 1,
    "path": "https://betawms.ffcdek.ru/api/v2/notification-templates",
    "per_page": 50,
    "to": 1,
    "total": 1
  }
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
POST /api/v2/notification-templates

Create notification template

operationIdcreateNotificationTemplate
TagNotification Templates
SecuritybearerAuth

Creates a notification template in the authenticated user domain. Domain, owner and event are assigned server-side.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/notification-templates" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CreateNotificationTemplateRequest required

Field Required Type Flags Constraints Description Example
data yes CreateNotificationTemplatePayload
data.name yes string maxLength: 150 "Acceptance closed"
data.channel yes enum enum: email, internal "email"
data.document_type yes enum enum: acceptance, order "acceptance"
data.document_status_id yes integer:int64 min: 0 4
data.delay_hours no integer:int64 | null min: 0
max: 8760
0
data.start_document_id no integer:int64 | null min: 1 1000
data.conditions no object {"acceptance_has_discrepancy":true}
data.subject no string | null maxLength: 255 "Document \#{doc_id}: {doc_status_name}"
data.body_html no string | null "<p>Document \#{doc_id} is closed.</p>"
data.body_text no string | null "Document \#{doc_id} is closed."
data.attachment_print_template_id no integer:int64 | null min: 1 12
data.status_id no enum:int64 enum: 0, 1 1

Request examples

Example

{
  "data": {
    "name": "Acceptance closed",
    "channel": "email",
    "document_type": "acceptance",
    "document_status_id": 4,
    "delay_hours": 0,
    "conditions": {
      "acceptance_has_discrepancy": true
    },
    "subject": "Document #{doc_id}: {doc_status_name}",
    "body_html": "<p>Document #{doc_id} is closed.</p>",
    "status_id": 1
  }
}

Responses

201 Created.

Created.

Field Required Type Flags Constraints Description Example
data yes NotificationTemplate Template used when an acceptance or order enters the configured status. The bindings field is returned by the item endpoint and by list requests with include=bindings.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.domain_id yes integer:int64 min: 1 3
data.owner_user_id yes integer:int64 | null min: 1 15
data.name yes string "Acceptance closed"
data.event yes enum enum: document.status_changed "document.status_changed"
data.channel yes enum enum: email, internal "email"
data.document_type yes enum enum: acceptance, order "acceptance"
data.document_status_id yes integer:int64 min: 0 4
data.delay_hours yes integer:int64 min: 0
max: 8760
0
data.start_document_id yes integer:int64 | null min: 1 1000
data.conditions yes object {"acceptance_has_discrepancy":true}
data.subject yes string | null maxLength: 255 "Document \#{doc_id}: {doc_status_name}"
data.body_html yes string | null "<p>Document \#{doc_id} is closed.</p>"
data.body_text yes string | null "Document \#{doc_id} is closed."
data.attachment_print_template_id yes integer:int64 | null min: 1 12
data.status_id yes enum:int64 enum: 0, 1 1
data.bindings_count yes integer:int64 min: 0 1
data.bindings no array<NotificationTemplateBinding>
data.bindings[] no NotificationTemplateBinding Warehouse and recipient binding for one notification template.
data.bindings[].id yes integer:int64 readOnly min: 1 1001
data.bindings[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.bindings[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.bindings[].template_id yes integer:int64 min: 1 41
data.bindings[].domain_id yes integer:int64 min: 1 3
data.bindings[].warehouse_id yes integer:int64 min: 1 42
data.bindings[].warehouse no object | null
data.bindings[].warehouse.id yes integer:int64 min: 1 42
data.bindings[].warehouse.name yes string "Client Warehouse Sofia"
data.bindings[].recipients yes array<string:email> maxItems: 100
data.bindings[].recipients[] no string:email "client@example.com"
data.bindings[].internal_recipient_mode yes enum enum: warehouse_users, domain_users, explicit "warehouse_users"
data.bindings[].internal_user_ids yes array<integer:int64> maxItems: 1000
data.bindings[].internal_user_ids[] no integer:int64 min: 1 15
data.bindings[].status_id yes enum:int64 enum: 0, 1 1
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 41,
    "domain_id": 3,
    "owner_user_id": 15,
    "name": "Acceptance closed",
    "event": "document.status_changed",
    "channel": "email",
    "document_type": "acceptance",
    "document_status_id": 4,
    "delay_hours": 0,
    "start_document_id": null,
    "conditions": {
      "acceptance_has_discrepancy": true
    },
    "subject": "Document #{doc_id}: {doc_status_name}",
    "body_html": "<p>Document #{doc_id} is closed.</p>",
    "body_text": null,
    "attachment_print_template_id": 12,
    "status_id": 1,
    "bindings_count": 1,
    "bindings": [
      {
        "id": 7,
        "template_id": 41,
        "domain_id": 3,
        "warehouse_id": 42,
        "warehouse": {
          "id": 42,
          "name": "Client Warehouse Sofia"
        },
        "recipients": [
          "client@example.com"
        ],
        "internal_recipient_mode": "warehouse_users",
        "internal_user_ids": [

        ],
        "status_id": 1,
        "created_at": "2026-09-17T09:00:00Z",
        "updated_at": "2026-09-17T09:00:00Z"
      }
    ],
    "created_at": "2026-09-17T09:00:00Z",
    "updated_at": "2026-09-17T09:00:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
GET /api/v2/notification-templates/{id}

Get notification template

operationIdgetNotificationTemplate
TagNotification Templates
SecuritybearerAuth

Returns one visible template with its current warehouse bindings.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/notification-templates/41" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Notification template ID. 41

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes NotificationTemplate Template used when an acceptance or order enters the configured status. The bindings field is returned by the item endpoint and by list requests with include=bindings.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.domain_id yes integer:int64 min: 1 3
data.owner_user_id yes integer:int64 | null min: 1 15
data.name yes string "Acceptance closed"
data.event yes enum enum: document.status_changed "document.status_changed"
data.channel yes enum enum: email, internal "email"
data.document_type yes enum enum: acceptance, order "acceptance"
data.document_status_id yes integer:int64 min: 0 4
data.delay_hours yes integer:int64 min: 0
max: 8760
0
data.start_document_id yes integer:int64 | null min: 1 1000
data.conditions yes object {"acceptance_has_discrepancy":true}
data.subject yes string | null maxLength: 255 "Document \#{doc_id}: {doc_status_name}"
data.body_html yes string | null "<p>Document \#{doc_id} is closed.</p>"
data.body_text yes string | null "Document \#{doc_id} is closed."
data.attachment_print_template_id yes integer:int64 | null min: 1 12
data.status_id yes enum:int64 enum: 0, 1 1
data.bindings_count yes integer:int64 min: 0 1
data.bindings no array<NotificationTemplateBinding>
data.bindings[] no NotificationTemplateBinding Warehouse and recipient binding for one notification template.
data.bindings[].id yes integer:int64 readOnly min: 1 1001
data.bindings[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.bindings[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.bindings[].template_id yes integer:int64 min: 1 41
data.bindings[].domain_id yes integer:int64 min: 1 3
data.bindings[].warehouse_id yes integer:int64 min: 1 42
data.bindings[].warehouse no object | null
data.bindings[].warehouse.id yes integer:int64 min: 1 42
data.bindings[].warehouse.name yes string "Client Warehouse Sofia"
data.bindings[].recipients yes array<string:email> maxItems: 100
data.bindings[].recipients[] no string:email "client@example.com"
data.bindings[].internal_recipient_mode yes enum enum: warehouse_users, domain_users, explicit "warehouse_users"
data.bindings[].internal_user_ids yes array<integer:int64> maxItems: 1000
data.bindings[].internal_user_ids[] no integer:int64 min: 1 15
data.bindings[].status_id yes enum:int64 enum: 0, 1 1
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 41,
    "domain_id": 3,
    "owner_user_id": 15,
    "name": "Acceptance closed",
    "event": "document.status_changed",
    "channel": "email",
    "document_type": "acceptance",
    "document_status_id": 4,
    "delay_hours": 0,
    "start_document_id": null,
    "conditions": {
      "acceptance_has_discrepancy": true
    },
    "subject": "Document #{doc_id}: {doc_status_name}",
    "body_html": "<p>Document #{doc_id} is closed.</p>",
    "body_text": null,
    "attachment_print_template_id": 12,
    "status_id": 1,
    "bindings_count": 1,
    "bindings": [
      {
        "id": 7,
        "template_id": 41,
        "domain_id": 3,
        "warehouse_id": 42,
        "warehouse": {
          "id": 42,
          "name": "Client Warehouse Sofia"
        },
        "recipients": [
          "client@example.com"
        ],
        "internal_recipient_mode": "warehouse_users",
        "internal_user_ids": [

        ],
        "status_id": 1,
        "created_at": "2026-09-17T09:00:00Z",
        "updated_at": "2026-09-17T09:00:00Z"
      }
    ],
    "created_at": "2026-09-17T09:00:00Z",
    "updated_at": "2026-09-17T09:00:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
PUT /api/v2/notification-templates/{id}

Update notification template

operationIdreplaceNotificationTemplate
TagNotification Templates
SecuritybearerAuth

Updates the supplied template fields. Omitted fields remain unchanged.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/notification-templates/41" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Notification template ID. 41
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

UpdateNotificationTemplateRequest required

Field Required Type Flags Constraints Description Example
data yes UpdateNotificationTemplatePayload
data.name no string maxLength: 150 "Acceptance closed"
data.channel no enum enum: email, internal "email"
data.document_type no enum enum: acceptance, order "acceptance"
data.document_status_id no integer:int64 min: 0 4
data.delay_hours no integer:int64 | null min: 0
max: 8760
0
data.start_document_id no integer:int64 | null min: 1 1000
data.conditions no object {"acceptance_has_discrepancy":true}
data.subject no string | null maxLength: 255 "Document \#{doc_id}: {doc_status_name}"
data.body_html no string | null "<p>Document \#{doc_id} is closed.</p>"
data.body_text no string | null "Document \#{doc_id} is closed."
data.attachment_print_template_id no integer:int64 | null min: 1 12
data.status_id no enum:int64 enum: 0, 1 1

Request examples

Example

{
  "data": {
    "name": "Acceptance closed",
    "channel": "email",
    "document_type": "acceptance",
    "document_status_id": 4,
    "delay_hours": 0,
    "conditions": {
      "acceptance_has_discrepancy": true
    },
    "subject": "Document #{doc_id}: {doc_status_name}",
    "body_html": "<p>Document #{doc_id} is closed.</p>",
    "status_id": 1
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes NotificationTemplate Template used when an acceptance or order enters the configured status. The bindings field is returned by the item endpoint and by list requests with include=bindings.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.domain_id yes integer:int64 min: 1 3
data.owner_user_id yes integer:int64 | null min: 1 15
data.name yes string "Acceptance closed"
data.event yes enum enum: document.status_changed "document.status_changed"
data.channel yes enum enum: email, internal "email"
data.document_type yes enum enum: acceptance, order "acceptance"
data.document_status_id yes integer:int64 min: 0 4
data.delay_hours yes integer:int64 min: 0
max: 8760
0
data.start_document_id yes integer:int64 | null min: 1 1000
data.conditions yes object {"acceptance_has_discrepancy":true}
data.subject yes string | null maxLength: 255 "Document \#{doc_id}: {doc_status_name}"
data.body_html yes string | null "<p>Document \#{doc_id} is closed.</p>"
data.body_text yes string | null "Document \#{doc_id} is closed."
data.attachment_print_template_id yes integer:int64 | null min: 1 12
data.status_id yes enum:int64 enum: 0, 1 1
data.bindings_count yes integer:int64 min: 0 1
data.bindings no array<NotificationTemplateBinding>
data.bindings[] no NotificationTemplateBinding Warehouse and recipient binding for one notification template.
data.bindings[].id yes integer:int64 readOnly min: 1 1001
data.bindings[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.bindings[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.bindings[].template_id yes integer:int64 min: 1 41
data.bindings[].domain_id yes integer:int64 min: 1 3
data.bindings[].warehouse_id yes integer:int64 min: 1 42
data.bindings[].warehouse no object | null
data.bindings[].warehouse.id yes integer:int64 min: 1 42
data.bindings[].warehouse.name yes string "Client Warehouse Sofia"
data.bindings[].recipients yes array<string:email> maxItems: 100
data.bindings[].recipients[] no string:email "client@example.com"
data.bindings[].internal_recipient_mode yes enum enum: warehouse_users, domain_users, explicit "warehouse_users"
data.bindings[].internal_user_ids yes array<integer:int64> maxItems: 1000
data.bindings[].internal_user_ids[] no integer:int64 min: 1 15
data.bindings[].status_id yes enum:int64 enum: 0, 1 1
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 41,
    "domain_id": 3,
    "owner_user_id": 15,
    "name": "Acceptance closed",
    "event": "document.status_changed",
    "channel": "email",
    "document_type": "acceptance",
    "document_status_id": 4,
    "delay_hours": 0,
    "start_document_id": null,
    "conditions": {
      "acceptance_has_discrepancy": true
    },
    "subject": "Document #{doc_id}: {doc_status_name}",
    "body_html": "<p>Document #{doc_id} is closed.</p>",
    "body_text": null,
    "attachment_print_template_id": 12,
    "status_id": 1,
    "bindings_count": 1,
    "bindings": [
      {
        "id": 7,
        "template_id": 41,
        "domain_id": 3,
        "warehouse_id": 42,
        "warehouse": {
          "id": 42,
          "name": "Client Warehouse Sofia"
        },
        "recipients": [
          "client@example.com"
        ],
        "internal_recipient_mode": "warehouse_users",
        "internal_user_ids": [

        ],
        "status_id": 1,
        "created_at": "2026-09-17T09:00:00Z",
        "updated_at": "2026-09-17T09:00:00Z"
      }
    ],
    "created_at": "2026-09-17T09:00:00Z",
    "updated_at": "2026-09-17T09:00:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
PATCH /api/v2/notification-templates/{id}

Update notification template

operationIdpatchNotificationTemplate
TagNotification Templates
SecuritybearerAuth

Updates the supplied template fields. Omitted fields remain unchanged.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request PATCH "${NWMS_BASE_URL}/api/v2/notification-templates/41" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Notification template ID. 41
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

UpdateNotificationTemplateRequest required

Field Required Type Flags Constraints Description Example
data yes UpdateNotificationTemplatePayload
data.name no string maxLength: 150 "Acceptance closed"
data.channel no enum enum: email, internal "email"
data.document_type no enum enum: acceptance, order "acceptance"
data.document_status_id no integer:int64 min: 0 4
data.delay_hours no integer:int64 | null min: 0
max: 8760
0
data.start_document_id no integer:int64 | null min: 1 1000
data.conditions no object {"acceptance_has_discrepancy":true}
data.subject no string | null maxLength: 255 "Document \#{doc_id}: {doc_status_name}"
data.body_html no string | null "<p>Document \#{doc_id} is closed.</p>"
data.body_text no string | null "Document \#{doc_id} is closed."
data.attachment_print_template_id no integer:int64 | null min: 1 12
data.status_id no enum:int64 enum: 0, 1 1

Request examples

Example

{
  "data": {
    "name": "Acceptance closed",
    "channel": "email",
    "document_type": "acceptance",
    "document_status_id": 4,
    "delay_hours": 0,
    "conditions": {
      "acceptance_has_discrepancy": true
    },
    "subject": "Document #{doc_id}: {doc_status_name}",
    "body_html": "<p>Document #{doc_id} is closed.</p>",
    "status_id": 1
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes NotificationTemplate Template used when an acceptance or order enters the configured status. The bindings field is returned by the item endpoint and by list requests with include=bindings.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.domain_id yes integer:int64 min: 1 3
data.owner_user_id yes integer:int64 | null min: 1 15
data.name yes string "Acceptance closed"
data.event yes enum enum: document.status_changed "document.status_changed"
data.channel yes enum enum: email, internal "email"
data.document_type yes enum enum: acceptance, order "acceptance"
data.document_status_id yes integer:int64 min: 0 4
data.delay_hours yes integer:int64 min: 0
max: 8760
0
data.start_document_id yes integer:int64 | null min: 1 1000
data.conditions yes object {"acceptance_has_discrepancy":true}
data.subject yes string | null maxLength: 255 "Document \#{doc_id}: {doc_status_name}"
data.body_html yes string | null "<p>Document \#{doc_id} is closed.</p>"
data.body_text yes string | null "Document \#{doc_id} is closed."
data.attachment_print_template_id yes integer:int64 | null min: 1 12
data.status_id yes enum:int64 enum: 0, 1 1
data.bindings_count yes integer:int64 min: 0 1
data.bindings no array<NotificationTemplateBinding>
data.bindings[] no NotificationTemplateBinding Warehouse and recipient binding for one notification template.
data.bindings[].id yes integer:int64 readOnly min: 1 1001
data.bindings[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.bindings[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.bindings[].template_id yes integer:int64 min: 1 41
data.bindings[].domain_id yes integer:int64 min: 1 3
data.bindings[].warehouse_id yes integer:int64 min: 1 42
data.bindings[].warehouse no object | null
data.bindings[].warehouse.id yes integer:int64 min: 1 42
data.bindings[].warehouse.name yes string "Client Warehouse Sofia"
data.bindings[].recipients yes array<string:email> maxItems: 100
data.bindings[].recipients[] no string:email "client@example.com"
data.bindings[].internal_recipient_mode yes enum enum: warehouse_users, domain_users, explicit "warehouse_users"
data.bindings[].internal_user_ids yes array<integer:int64> maxItems: 1000
data.bindings[].internal_user_ids[] no integer:int64 min: 1 15
data.bindings[].status_id yes enum:int64 enum: 0, 1 1
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 41,
    "domain_id": 3,
    "owner_user_id": 15,
    "name": "Acceptance closed",
    "event": "document.status_changed",
    "channel": "email",
    "document_type": "acceptance",
    "document_status_id": 4,
    "delay_hours": 0,
    "start_document_id": null,
    "conditions": {
      "acceptance_has_discrepancy": true
    },
    "subject": "Document #{doc_id}: {doc_status_name}",
    "body_html": "<p>Document #{doc_id} is closed.</p>",
    "body_text": null,
    "attachment_print_template_id": 12,
    "status_id": 1,
    "bindings_count": 1,
    "bindings": [
      {
        "id": 7,
        "template_id": 41,
        "domain_id": 3,
        "warehouse_id": 42,
        "warehouse": {
          "id": 42,
          "name": "Client Warehouse Sofia"
        },
        "recipients": [
          "client@example.com"
        ],
        "internal_recipient_mode": "warehouse_users",
        "internal_user_ids": [

        ],
        "status_id": 1,
        "created_at": "2026-09-17T09:00:00Z",
        "updated_at": "2026-09-17T09:00:00Z"
      }
    ],
    "created_at": "2026-09-17T09:00:00Z",
    "updated_at": "2026-09-17T09:00:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
DELETE /api/v2/notification-templates/{id}

Delete notification template

operationIddeleteNotificationTemplate
TagNotification Templates
SecuritybearerAuth

Deletes the template and its warehouse bindings in one transaction. Existing notification-message history is preserved.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request DELETE "${NWMS_BASE_URL}/api/v2/notification-templates/41" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}"

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Notification template ID. 41
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes object | null
meta yes object
meta.api_version yes enum enum: v2 "v2"
meta.deleted yes boolean true

Response examples

success

{
  "data": null,
  "meta": {
    "api_version": "v2",
    "deleted": true
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
GET /api/v2/notification-templates/{id}/bindings

List notification template bindings

operationIdlistNotificationTemplateBindings
TagNotification Templates
SecuritybearerAuth

Returns the paginated warehouse and recipient bindings of one visible template.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/notification-templates/41/bindings" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Notification template ID. 41
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 250
Number of bindings per page. Default 50; maximum 250. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 50
sort query no string form false Comma-separated sort fields: id, warehouse_id, status_id, created_at, updated_at. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. "id"
filter[id] query no integer:int64 min: 0 Exact binding ID. 7
filter[warehouse_id] query no integer:int64 min: 0 Exact warehouse ID. 42
filter[status_id] query no integer:int64 min: 0 Exact binding status: 0 or 1. 1
filter[internal_recipient_mode] query no enum enum: warehouse_users, domain_users, explicit Exact internal recipient mode. "warehouse_users"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<NotificationTemplateBinding>
data[] no NotificationTemplateBinding Warehouse and recipient binding for one notification template.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].template_id yes integer:int64 min: 1 41
data[].domain_id yes integer:int64 min: 1 3
data[].warehouse_id yes integer:int64 min: 1 42
data[].warehouse no object | null
data[].warehouse.id yes integer:int64 min: 1 42
data[].warehouse.name yes string "Client Warehouse Sofia"
data[].recipients yes array<string:email> maxItems: 100
data[].recipients[] no string:email "client@example.com"
data[].internal_recipient_mode yes enum enum: warehouse_users, domain_users, explicit "warehouse_users"
data[].internal_user_ids yes array<integer:int64> maxItems: 1000
data[].internal_user_ids[] no integer:int64 min: 1 15
data[].status_id yes enum:int64 enum: 0, 1 1
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "id": 7,
      "template_id": 41,
      "domain_id": 3,
      "warehouse_id": 42,
      "warehouse": {
        "id": 42,
        "name": "Client Warehouse Sofia"
      },
      "recipients": [
        "client@example.com"
      ],
      "internal_recipient_mode": "warehouse_users",
      "internal_user_ids": [

      ],
      "status_id": 1,
      "created_at": "2026-09-17T09:00:00Z",
      "updated_at": "2026-09-17T09:00:00Z"
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/notification-templates/41/bindings?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/notification-templates/41/bindings?page=1",
    "prev": null,
    "next": null
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 1,
    "path": "https://betawms.ffcdek.ru/api/v2/notification-templates/41/bindings",
    "per_page": 50,
    "to": 1,
    "total": 1
  }
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
POST /api/v2/notification-templates/{id}/bindings

Create notification template binding

operationIdcreateNotificationTemplateBinding
TagNotification Templates
SecuritybearerAuth

Binds one visible client warehouse to the template. A warehouse can be bound only once per template.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/notification-templates/41/bindings" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Notification template ID. 41
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CreateNotificationTemplateBindingRequest required

Field Required Type Flags Constraints Description Example
data yes CreateNotificationTemplateBindingPayload
data.warehouse_id yes integer:int64 min: 1 42
data.recipients no array<string:email> maxItems: 100
data.recipients[] no string:email "client@example.com"
data.internal_recipient_mode no enum enum: warehouse_users, domain_users, explicit "warehouse_users"
data.internal_user_ids no array<integer:int64> maxItems: 1000
data.internal_user_ids[] no integer:int64 min: 1 15
data.status_id no enum:int64 enum: 0, 1 1

Request examples

Example

{
  "data": {
    "warehouse_id": 42,
    "recipients": [
      "client@example.com"
    ],
    "internal_recipient_mode": "warehouse_users",
    "internal_user_ids": [

    ],
    "status_id": 1
  }
}

Responses

201 Created.

Created.

Field Required Type Flags Constraints Description Example
data yes NotificationTemplateBinding Warehouse and recipient binding for one notification template.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.template_id yes integer:int64 min: 1 41
data.domain_id yes integer:int64 min: 1 3
data.warehouse_id yes integer:int64 min: 1 42
data.warehouse no object | null
data.warehouse.id yes integer:int64 min: 1 42
data.warehouse.name yes string "Client Warehouse Sofia"
data.recipients yes array<string:email> maxItems: 100
data.recipients[] no string:email "client@example.com"
data.internal_recipient_mode yes enum enum: warehouse_users, domain_users, explicit "warehouse_users"
data.internal_user_ids yes array<integer:int64> maxItems: 1000
data.internal_user_ids[] no integer:int64 min: 1 15
data.status_id yes enum:int64 enum: 0, 1 1
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 7,
    "template_id": 41,
    "domain_id": 3,
    "warehouse_id": 42,
    "warehouse": {
      "id": 42,
      "name": "Client Warehouse Sofia"
    },
    "recipients": [
      "client@example.com"
    ],
    "internal_recipient_mode": "warehouse_users",
    "internal_user_ids": [

    ],
    "status_id": 1,
    "created_at": "2026-09-17T09:00:00Z",
    "updated_at": "2026-09-17T09:00:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
GET /api/v2/notification-templates/{id}/bindings/{bindingId}

Get notification template binding

operationIdgetNotificationTemplateBinding
TagNotification Templates
SecuritybearerAuth

Returns one warehouse and recipient binding of a visible template.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/notification-templates/41/bindings/7" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Notification template ID. 41
bindingId path yes integer:int64 min: 1 Notification template binding ID. 7

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes NotificationTemplateBinding Warehouse and recipient binding for one notification template.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.template_id yes integer:int64 min: 1 41
data.domain_id yes integer:int64 min: 1 3
data.warehouse_id yes integer:int64 min: 1 42
data.warehouse no object | null
data.warehouse.id yes integer:int64 min: 1 42
data.warehouse.name yes string "Client Warehouse Sofia"
data.recipients yes array<string:email> maxItems: 100
data.recipients[] no string:email "client@example.com"
data.internal_recipient_mode yes enum enum: warehouse_users, domain_users, explicit "warehouse_users"
data.internal_user_ids yes array<integer:int64> maxItems: 1000
data.internal_user_ids[] no integer:int64 min: 1 15
data.status_id yes enum:int64 enum: 0, 1 1
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 7,
    "template_id": 41,
    "domain_id": 3,
    "warehouse_id": 42,
    "warehouse": {
      "id": 42,
      "name": "Client Warehouse Sofia"
    },
    "recipients": [
      "client@example.com"
    ],
    "internal_recipient_mode": "warehouse_users",
    "internal_user_ids": [

    ],
    "status_id": 1,
    "created_at": "2026-09-17T09:00:00Z",
    "updated_at": "2026-09-17T09:00:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
PUT /api/v2/notification-templates/{id}/bindings/{bindingId}

Update notification template binding

operationIdreplaceNotificationTemplateBinding
TagNotification Templates
SecuritybearerAuth

Updates the supplied warehouse-binding fields. Omitted fields remain unchanged.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/notification-templates/41/bindings/7" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Notification template ID. 41
bindingId path yes integer:int64 min: 1 Notification template binding ID. 7
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

UpdateNotificationTemplateBindingRequest required

Field Required Type Flags Constraints Description Example
data yes UpdateNotificationTemplateBindingPayload
data.warehouse_id no integer:int64 min: 1 42
data.recipients no array<string:email> maxItems: 100
data.recipients[] no string:email "client@example.com"
data.internal_recipient_mode no enum enum: warehouse_users, domain_users, explicit "warehouse_users"
data.internal_user_ids no array<integer:int64> maxItems: 1000
data.internal_user_ids[] no integer:int64 min: 1 15
data.status_id no enum:int64 enum: 0, 1 1

Request examples

Example

{
  "data": {
    "warehouse_id": 42,
    "recipients": [
      "client@example.com"
    ],
    "internal_recipient_mode": "warehouse_users",
    "internal_user_ids": [

    ],
    "status_id": 1
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes NotificationTemplateBinding Warehouse and recipient binding for one notification template.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.template_id yes integer:int64 min: 1 41
data.domain_id yes integer:int64 min: 1 3
data.warehouse_id yes integer:int64 min: 1 42
data.warehouse no object | null
data.warehouse.id yes integer:int64 min: 1 42
data.warehouse.name yes string "Client Warehouse Sofia"
data.recipients yes array<string:email> maxItems: 100
data.recipients[] no string:email "client@example.com"
data.internal_recipient_mode yes enum enum: warehouse_users, domain_users, explicit "warehouse_users"
data.internal_user_ids yes array<integer:int64> maxItems: 1000
data.internal_user_ids[] no integer:int64 min: 1 15
data.status_id yes enum:int64 enum: 0, 1 1
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 7,
    "template_id": 41,
    "domain_id": 3,
    "warehouse_id": 42,
    "warehouse": {
      "id": 42,
      "name": "Client Warehouse Sofia"
    },
    "recipients": [
      "client@example.com"
    ],
    "internal_recipient_mode": "warehouse_users",
    "internal_user_ids": [

    ],
    "status_id": 1,
    "created_at": "2026-09-17T09:00:00Z",
    "updated_at": "2026-09-17T09:00:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
PATCH /api/v2/notification-templates/{id}/bindings/{bindingId}

Update notification template binding

operationIdpatchNotificationTemplateBinding
TagNotification Templates
SecuritybearerAuth

Updates the supplied warehouse-binding fields. Omitted fields remain unchanged.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request PATCH "${NWMS_BASE_URL}/api/v2/notification-templates/41/bindings/7" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Notification template ID. 41
bindingId path yes integer:int64 min: 1 Notification template binding ID. 7
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

UpdateNotificationTemplateBindingRequest required

Field Required Type Flags Constraints Description Example
data yes UpdateNotificationTemplateBindingPayload
data.warehouse_id no integer:int64 min: 1 42
data.recipients no array<string:email> maxItems: 100
data.recipients[] no string:email "client@example.com"
data.internal_recipient_mode no enum enum: warehouse_users, domain_users, explicit "warehouse_users"
data.internal_user_ids no array<integer:int64> maxItems: 1000
data.internal_user_ids[] no integer:int64 min: 1 15
data.status_id no enum:int64 enum: 0, 1 1

Request examples

Example

{
  "data": {
    "warehouse_id": 42,
    "recipients": [
      "client@example.com"
    ],
    "internal_recipient_mode": "warehouse_users",
    "internal_user_ids": [

    ],
    "status_id": 1
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes NotificationTemplateBinding Warehouse and recipient binding for one notification template.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.template_id yes integer:int64 min: 1 41
data.domain_id yes integer:int64 min: 1 3
data.warehouse_id yes integer:int64 min: 1 42
data.warehouse no object | null
data.warehouse.id yes integer:int64 min: 1 42
data.warehouse.name yes string "Client Warehouse Sofia"
data.recipients yes array<string:email> maxItems: 100
data.recipients[] no string:email "client@example.com"
data.internal_recipient_mode yes enum enum: warehouse_users, domain_users, explicit "warehouse_users"
data.internal_user_ids yes array<integer:int64> maxItems: 1000
data.internal_user_ids[] no integer:int64 min: 1 15
data.status_id yes enum:int64 enum: 0, 1 1
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 7,
    "template_id": 41,
    "domain_id": 3,
    "warehouse_id": 42,
    "warehouse": {
      "id": 42,
      "name": "Client Warehouse Sofia"
    },
    "recipients": [
      "client@example.com"
    ],
    "internal_recipient_mode": "warehouse_users",
    "internal_user_ids": [

    ],
    "status_id": 1,
    "created_at": "2026-09-17T09:00:00Z",
    "updated_at": "2026-09-17T09:00:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
DELETE /api/v2/notification-templates/{id}/bindings/{bindingId}

Delete notification template binding

operationIddeleteNotificationTemplateBinding
TagNotification Templates
SecuritybearerAuth

Removes one warehouse and recipient binding from the template.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request DELETE "${NWMS_BASE_URL}/api/v2/notification-templates/41/bindings/7" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}"

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Notification template ID. 41
bindingId path yes integer:int64 min: 1 Notification template binding ID. 7
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes object | null
meta yes object
meta.api_version yes enum enum: v2 "v2"
meta.deleted yes boolean true

Response examples

success

{
  "data": null,
  "meta": {
    "api_version": "v2",
    "deleted": true
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}

Orders

GET /api/v2/orders

List orders

operationIdlistOrders
TagOrders
SecuritybearerAuth

Returns orders visible to the authenticated account. Use documented query parameters for filtering, sorting, and pagination.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Request include=status_history to receive chronological WMS status transitions with changed_at (ISO 8601 and explicit timezone offset), source and inferred. status_history_meta reports availability and whether the last event matches the current status; surviving logs do not guarantee a complete history. send_date is the stored order date field and may come from import, manual input or integration processing; it is not a universal physical carrier-handover timestamp. Status transitions and shipment-document closure must be interpreted as separate recorded events. Dedicated picked_at, packed_at and shipped_at milestones are not exposed.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/orders" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 500
Number of records per page. Default is 50; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 50
sort query no string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, order_date, send_date, sum, created_at, updated_at. Default: -id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. "-id"
include query no string form false Comma-separated optional relations. Allowed values: offers, contact, delivery, comments, consumables, status_history. The same filter may also be sent as filter[include] where supported by the Laravel query adapter. "offers,contact,delivery,comments,consumables,status_history"
id query no integer:int64 form true min: 1 Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. 1001
external_id query no string form true Filter by external_id using exact matching. The same filter may also be sent as filter[external_id] where supported by the Laravel query adapter. "EXT-10045"
status_id query no integer:int64 form true min: 1 Filter by status_id using exact matching. The same filter may also be sent as filter[status_id] where supported by the Laravel query adapter. 1
warehouse_id query no integer:int64 form true min: 1 Filter by warehouse_id using exact matching. The same filter may also be sent as filter[warehouse_id] where supported by the Laravel query adapter. 42
shop_id query no integer:int64 form true min: 1 Filter by shop_id using exact matching. The same filter may also be sent as filter[shop_id] where supported by the Laravel query adapter. 12
type_id query no integer:int64 form true min: 1 Filter by type_id using exact matching. The same filter may also be sent as filter[type_id] where supported by the Laravel query adapter. 1
source_id query no integer:int64 form true min: 1 Filter by source_id using exact matching. The same filter may also be sent as filter[source_id] where supported by the Laravel query adapter. 1
customer_type query no integer:int64 form true min: 1 Filter by customer_type using exact matching. The same filter may also be sent as filter[customer_type] where supported by the Laravel query adapter. 1
company_id query no integer:int64 form true min: 1 Filter by company_id using exact matching. The same filter may also be sent as filter[company_id] where supported by the Laravel query adapter. 7
is_cod query no boolean form true Filter by is_cod using exact matching. The same filter may also be sent as filter[is_cod] where supported by the Laravel query adapter. false
order_date_from query no string:date form true Lower inclusive date boundary for order_date. The same filter may also be sent as filter[order_date_from] where supported by the Laravel query adapter. "2026-07-14"
order_date_to query no string:date form true Upper inclusive date boundary for order_date. The same filter may also be sent as filter[order_date_to] where supported by the Laravel query adapter. "2026-07-14"
send_date_from query no string:date form true Lower inclusive date boundary for send_date. The same filter may also be sent as filter[send_date_from] where supported by the Laravel query adapter. "2026-07-14"
send_date_to query no string:date form true Upper inclusive date boundary for send_date. The same filter may also be sent as filter[send_date_to] where supported by the Laravel query adapter. "2026-07-14"
created_at_from query no string:date form true Lower inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_from] where supported by the Laravel query adapter. "2026-07-14"
created_at_to query no string:date form true Upper inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_to] where supported by the Laravel query adapter. "2026-07-14"
updated_at_from query no string form true pattern: ^\d{4}-\d{2}-\d{2}(?: \d{2}:\d{2}:\d{2})?$ Lower inclusive date or date-time boundary for updated_at. The same filter may also be sent as filter[updated_at_from] where supported by the Laravel query adapter. Use YYYY-MM-DD HH:mm:ss for an exact inclusive timestamp in the application timezone; YYYY-MM-DD starts at midnight. "2026-07-14 10:30:00"
updated_at_to query no string form true pattern: ^\d{4}-\d{2}-\d{2}(?: \d{2}:\d{2}:\d{2})?$ Upper inclusive date or date-time boundary for updated_at. The same filter may also be sent as filter[updated_at_to] where supported by the Laravel query adapter. Use YYYY-MM-DD HH:mm:ss for an exact inclusive timestamp in the application timezone; YYYY-MM-DD includes the entire day. "2026-07-14 10:30:00"
sum_from query no number:float form true Lower inclusive numeric boundary for sum. The same filter may also be sent as filter[sum_from] where supported by the Laravel query adapter. 48.58
sum_to query no number:float form true Upper inclusive numeric boundary for sum. The same filter may also be sent as filter[sum_to] where supported by the Laravel query adapter. 48.58

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<Order>
data[] no Order Outbound warehouse order. Optional relation fields are present when loaded by the controller or requested through include.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].external_id no string | null "ORD-100245"
data[].domain_id no integer:int64 | null min: 1 3
data[].type_id no integer:int64 | null 1
data[].shop_id no integer:int64 | null min: 1 12
data[].warehouse_id no integer:int64 | null min: 1 42
data[].status_id no integer:int64 | null Order status ID. The current backend stores status records in the database; values are not modeled as a closed enum in the public contract. 20
data[].status no object | null
data[].status.id yes integer:int64 20
data[].status.name yes string "Created"
data[].status.color no string | null "#2457c5"
data[].status.background_color no string | null "#eaf0ff"
data[].order_date no string:date | null "2026-07-14"
data[].send_date no string | null Stored order send date, potentially supplied by import, manual input or integration processing. It may be a date or date-time string; it is not a universal physical carrier-handover timestamp. "2026-07-15 20:25:08"
data[].source_id no integer:int64 | null min: 1 1
data[].customer_type no integer:int64 | null 1
data[].is_cod no boolean true
data[].amounts no OrderAmounts
data[].amounts.shipping_price no number:float | null 8.6
data[].amounts.shipping_cost no number:float | null 0
data[].amounts.sum no number:float | null 39.98
data[].amounts.cod_sum no number:float | null 48.58
data[].company_id no integer:int64 | null min: 1 7
data[].marking yes OrderMarking Marking data expected for products in the order.
data[].marking.required yes boolean Whether the order contains products that require marking data after picking. true
data[].marking.types yes array<string> Marking types required by products in the order. Currently chestny_znak; the list may gain values such as jewel_uin and imei.
data[].marking.types[] no string "chestny_znak"
data[].contact no object | null
data[].contact.first_name no string | null "Ivan"
data[].contact.middle_name no string | null "Ivanovich"
data[].contact.last_name no string | null "Petrov"
data[].contact.phone no string | null "+359888123456"
data[].contact.email no string:email | null "customer@example.com"
data[].contact.country_id no integer:int64 | null min: 1 100
data[].contact.city_id no integer:int64 | null min: 1 200
data[].contact.postcode no string | null "1000"
data[].contact.latitude no number:float | null min: -90
max: 90
42.6977
data[].contact.longitude no number:float | null min: -180
max: 180
23.3219
data[].contact.full_address no string | null "1 Vitosha Boulevard, Sofia"
data[].delivery no object | null
data[].delivery.service_id no integer:int64 | null min: 1 1
data[].delivery.delivery_type yes enum | null enum: door, pickup_point Normalized delivery channel derived from the configured delivery service. Null when the service type is unknown. "door"
data[].delivery.is_courier yes boolean True for door delivery; false for pickup-point delivery or an unknown service type. true
data[].delivery.status no string | null "created"
data[].delivery.track_number no string | null "CDEK-123456789"
data[].delivery.pickup_point_id no string | null "SOFIA-01"
data[].delivery.source_id no string | null "cdek-15"
data[].delivery.tariff_code no integer:int64 | null 136
data[].delivery.additional_services no object Values of additional CDEK services configured for the selected integration. Boolean true enables a code-only service; other values are sent as the CDEK parameter. {"TRYING_ON":true,"PART_DELIV":false,"PACKAGE_1":2}
data[].delivery.label no string:uri | null "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf"
data[].delivery.delivery_date no string:date | null "2026-07-16"
data[].delivery.delivery_time_start no string:time | null "09:00:00Z"
data[].delivery.delivery_time_end no string:time | null "18:00:00Z"
data[].comments no object | null
data[].comments.delivery_service_text no string | null "Call before delivery"
data[].comments.inner_text no string | null "VIP customer"
data[].offers no array<OrderLineEmbedded>
data[].offers[] no OrderLineEmbedded Scalar lot fields use the actual lot only when the full line is picked from one lot; partial/multiple actual lots leave scalars null. Before picking they retain the requested lot. Requested constraints are always available in requested_lot.
data[].offers[].id yes integer:int64 readOnly min: 1 7001
data[].offers[].product_id no integer:int64 | null min: 1 1201
data[].offers[].quantity no number:float | null min: 0 2
data[].offers[].estimated_price no number:float | null 19.5
data[].offers[].price no number:float | null 19.99
data[].offers[].expiration_date no string:date | null "2027-01-15"
data[].offers[].batch no string | null maxLength: 15 "LOT-2026"
data[].offers[].operation_user_id no integer:int64 | null min: 1 9
data[].offers[].product no object | null
data[].offers[].product.id yes integer:int64 readOnly min: 1 1201
data[].offers[].product.name yes string "Coffee 250g"
data[].offers[].product.external_id no string | null "EXT-10045"
data[].offers[].reservation no OrderReservationLine Reservation totals for one order line.
data[].offers[].reservation.required_qty yes number:float 3
data[].offers[].reservation.reserved_qty yes number:float 1
data[].offers[].reservation.unreserved_qty yes number:float 2
data[].offers[].reservation.missing_qty yes number:float 2
data[].offers[].reservation.status yes enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data[].offers[].reservation_items no array<OrderReservationItem>
data[].offers[].reservation_items[] no OrderReservationItem Physical product or expanded component used to explain a reservation shortage.
data[].offers[].reservation_items[].offer_id yes integer:int64 min: 1 1201
data[].offers[].reservation_items[].offer_name no string | null "Coffee 250g"
data[].offers[].reservation_items[].offer_article no string | null "ART-001245"
data[].offers[].reservation_items[].offer_sku no string | null "SKU-001245"
data[].offers[].reservation_items[].required_qty yes number:float 3
data[].offers[].reservation_items[].reserved_qty yes number:float 1
data[].offers[].reservation_items[].unreserved_qty yes number:float 2
data[].offers[].reservation_items[].missing_qty yes number:float 2
data[].offers[].reservation_items[].status yes enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data[].offers[].reservation_items[].source_order_offer_ids yes array<integer:int64>
data[].offers[].reservation_items[].source_order_offer_ids[] no integer:int64 min: 1 7001
data[].offers[].reservation_items[].source yes enum enum: order_offer, component, quant, composite_quant "order_offer"
data[].offers[].reservation_items[].expanded_from_composite yes boolean false
data[].offers[].reservation_items[].expanded_from_quant yes boolean false
data[].offers[].reservation_items[].quant_base_offer_id no integer:int64 | null min: 1 1201
data[].offers[].reservation_items[].quant_base_multiplicity no number:float | null 6
data[].offers[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].offers[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].offers[].production_date no string:date | null "2026-01-15"
data[].offers[].requested_lot no WarehouseLot
data[].offers[].requested_lot.batch yes string | null "LOT-2026"
data[].offers[].requested_lot.production_date yes string:date | null "2026-01-15"
data[].offers[].requested_lot.expiration_date yes string:date | null "2027-01-15"
data[].offers[].picked_quantity no number:float min: 0 2
data[].offers[].fulfillment_lots no array<OrderFulfillmentLot> Current active placed warehouse rows for this exact order line and product. Existing orders are included where these rows survive. This is a current picking snapshot, not a historical shipment event.
data[].offers[].fulfillment_lots[] no OrderFulfillmentLot
data[].offers[].fulfillment_lots[].batch yes string | null "LOT-2026"
data[].offers[].fulfillment_lots[].production_date yes string:date | null "2026-01-15"
data[].offers[].fulfillment_lots[].expiration_date yes string:date | null "2027-01-15"
data[].offers[].fulfillment_lots[].warehouse_id yes integer:int64 min: 1 734
data[].offers[].fulfillment_lots[].product_id yes integer:int64 min: 1 1201
data[].offers[].fulfillment_lots[].quantity yes number:float min: 0 2
data[].reservation no OrderReservation Reservation readiness and shortages calculated for the order.
data[].reservation.ready yes boolean false
data[].reservation.reason yes string | null "Not all order products are reserved."
data[].reservation.expected_total yes number:float 3
data[].reservation.reserved_total yes number:float 1
data[].reservation.unreserved_total yes number:float 2
data[].reservation.missing_total yes number:float 2
data[].reservation.missing_items yes array<OrderReservationItem>
data[].reservation.missing_items[] no OrderReservationItem Physical product or expanded component used to explain a reservation shortage.
data[].reservation.missing_items[].offer_id yes integer:int64 min: 1 1201
data[].reservation.missing_items[].offer_name no string | null "Coffee 250g"
data[].reservation.missing_items[].offer_article no string | null "ART-001245"
data[].reservation.missing_items[].offer_sku no string | null "SKU-001245"
data[].reservation.missing_items[].required_qty yes number:float 3
data[].reservation.missing_items[].reserved_qty yes number:float 1
data[].reservation.missing_items[].unreserved_qty yes number:float 2
data[].reservation.missing_items[].missing_qty yes number:float 2
data[].reservation.missing_items[].status yes enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data[].reservation.missing_items[].source_order_offer_ids yes array<integer:int64>
data[].reservation.missing_items[].source_order_offer_ids[] no integer:int64 min: 1 7001
data[].reservation.missing_items[].source yes enum enum: order_offer, component, quant, composite_quant "order_offer"
data[].reservation.missing_items[].expanded_from_composite yes boolean false
data[].reservation.missing_items[].expanded_from_quant yes boolean false
data[].reservation.missing_items[].quant_base_offer_id no integer:int64 | null min: 1 1201
data[].reservation.missing_items[].quant_base_multiplicity no number:float | null 6
data[].reservation.error yes boolean false
data[].consumables no array<OrderConsumable>
data[].consumables[] no OrderConsumable Current consumable line, not an append-only consumption event. Unplaced usage creates a commitment but does not decrease physical stockTotal; do not treat that stockTotal as remaining packaging inventory.
data[].consumables[].id yes integer:int64 min: 1 301
data[].consumables[].order_id yes integer:int64 min: 1 8101
data[].consumables[].product_id yes integer:int64 min: 1 1202
data[].consumables[].warehouse_id yes integer:int64 | null min: 1 734
data[].consumables[].place_id yes integer:int64 | null min: 1 501
data[].consumables[].quantity yes number:float 1
data[].consumables[].stock_location_mode yes enum enum: placed, unplaced "unplaced"
data[].consumables[].created_at yes string:date-time | null "2026-07-14T10:30:00Z"
data[].consumables[].updated_at yes string:date-time | null "2026-07-14T10:30:00Z"
data[].status_history no array<OrderStatusHistoryEvent> Present only on GET list/detail with include=status_history. Ordered chronologically, retains repeat status cycles and combines surviving audit and action-log entries. Missing history returns an empty array.
data[].status_history[] no OrderStatusHistoryEvent Recorded WMS status transition or explicitly inferred initial status. It does not independently confirm physical carrier handover.
data[].status_history[].status_id yes integer:int64 130
data[].status_history[].previous_status_id yes integer:int64 | null 110
data[].status_history[].changed_at yes string:date-time Time of the WMS status transition in ISO 8601 with an explicit timezone offset. "2026-07-14T12:00:00+03:00"
data[].status_history[].source yes enum enum: audit, action_log, inferred "action_log"
data[].status_history[].inferred yes boolean True only for a reconstructed initial status at order creation; this is not a separately recorded transition. false
data[].status_history_meta no OrderStatusHistoryMeta
data[].status_history_meta.available yes boolean At least one event is available. This does not guarantee complete historical coverage. true
data[].status_history_meta.current_status_matches_history yes boolean The last available event has the current order status. False also when history is empty. true
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "id": 8101,
      "external_id": "ORD-100245",
      "domain_id": 3,
      "type_id": 1,
      "shop_id": 12,
      "warehouse_id": 42,
      "status_id": 20,
      "status": {
        "id": 20,
        "name": "Created",
        "color": "#2457c5",
        "background_color": "#eaf0ff"
      },
      "order_date": "2026-07-14",
      "send_date": "2026-07-15",
      "source_id": 1,
      "customer_type": 1,
      "is_cod": true,
      "amounts": {
        "shipping_price": 8.6,
        "shipping_cost": 0,
        "sum": 39.98,
        "cod_sum": 48.58
      },
      "company_id": 7,
      "marking": {
        "required": true,
        "types": [
          "chestny_znak"
        ]
      },
      "contact": {
        "first_name": "Ivan",
        "middle_name": null,
        "last_name": "Petrov",
        "phone": "+359888123456",
        "email": "customer@example.com",
        "country_id": 100,
        "city_id": 200,
        "postcode": "1000",
        "latitude": 42.6977,
        "longitude": 23.3219,
        "full_address": "1 Vitosha Boulevard, Sofia"
      },
      "delivery": {
        "service_id": 1,
        "delivery_type": "door",
        "is_courier": true,
        "status": "created",
        "track_number": "CDEK-123456789",
        "source_id": "cdek-15",
        "tariff_code": 136,
        "label": "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf",
        "delivery_date": "2026-07-16",
        "delivery_time_start": "09:00:00Z",
        "delivery_time_end": "18:00:00Z"
      },
      "comments": {
        "delivery_service_text": "Call before delivery",
        "inner_text": "VIP customer"
      },
      "offers": [
        {
          "id": 7001,
          "product_id": 1201,
          "quantity": 2,
          "estimated_price": 19.5,
          "price": 19.99,
          "expiration_date": "2027-01-15",
          "batch": "LOT-2026",
          "operation_user_id": 9,
          "product": {
            "id": 1201,
            "name": "Coffee 250g",
            "external_id": "EXT-10045"
          },
          "created_at": "2026-07-14T09:00:00Z",
          "updated_at": "2026-07-14T09:30:00Z"
        }
      ],
      "created_at": "2026-07-14T09:00:00Z",
      "updated_at": "2026-07-14T09:30:00Z",
      "status_history": [
        {
          "status_id": 20,
          "previous_status_id": 10,
          "changed_at": "2026-07-14T12:00:00+03:00",
          "source": "action_log",
          "inferred": false
        }
      ],
      "status_history_meta": {
        "available": true,
        "current_status_matches_history": true
      }
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/orders?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/orders?page=2",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/orders?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "https://betawms.ffcdek.ru/api/v2/orders",
    "per_page": 50,
    "to": 50,
    "total": 73
  }
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
POST /api/v2/orders

Create order

operationIdcreateOrders
TagOrders
SecuritybearerAuth

Creates an outbound order with public v2 fields. The order may include contact, delivery, comments, and line items. Server-side validation checks shop and warehouse visibility, rejects system-calculated totals, and applies idempotency when Idempotency-Key is provided.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/orders" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CreateOrderRequest required

Field Required Type Flags Constraints Description Example
data yes CreateOrderPayload
data.type_id yes integer:int64 1
data.shop_id yes integer:int64 min: 1 12
data.warehouse_id yes integer:int64 min: 1 42
data.external_id no string | null "ORD-100245"
data.group_id no oneOf<string | integer>
data.group_id no string maxLength: 255 "2ФИС"
data.group_id no integer Legacy numeric identifiers are also accepted.
data.send_date no string:date | null "2026-07-15"
data.source_id no integer:int64 | null min: 1 1
data.status_id no integer:int64 | null Order status ID. The current backend stores status records in the database; values are not modeled as a closed enum in the public contract. 20
data.customer_type no integer:int64 | null 1
data.is_cod no boolean true
data.company_id no integer:int64 | null min: 1 7
data.amounts no object | null
data.amounts.shipping_price no number:float | null 8.6
data.amounts.shipping_cost no number:float | null 0
data.amounts.sum no number:float | null 39.98
data.amounts.cod_sum no number:float | null 48.58
data.weight no object | null
data.weight.value no number:float | null min: 0 250
data.weight.unit yes enum enum: g "g"
data.dimensions no object | null
data.dimensions.x no number:float | null min: 0 105
data.dimensions.y no number:float | null min: 0 200
data.dimensions.z no number:float | null min: 0 32
data.dimensions.unit yes enum enum: mm "mm"
data.contact no object | null
data.contact.first_name no string | null "Ivan"
data.contact.middle_name no string | null "Ivanovich"
data.contact.last_name no string | null "Petrov"
data.contact.phone no string | null "+359888123456"
data.contact.email no string:email | null "customer@example.com"
data.contact.country_id no integer:int64 | null min: 1 100
data.contact.city_id no integer:int64 | null min: 1 200
data.contact.postcode no string | null "1000"
data.contact.latitude no number:float | null min: -90
max: 90
42.6977
data.contact.longitude no number:float | null min: -180
max: 180
23.3219
data.contact.full_address no string | null "1 Vitosha Boulevard, Sofia"
data.delivery no object | null
data.delivery.service_id no integer:int64 | null min: 1 1
data.delivery.delivery_type yes enum | null enum: door, pickup_point Normalized delivery channel derived from the configured delivery service. Null when the service type is unknown. "door"
data.delivery.is_courier yes boolean True for door delivery; false for pickup-point delivery or an unknown service type. true
data.delivery.status no string | null "created"
data.delivery.track_number no string | null "CDEK-123456789"
data.delivery.pickup_point_id no string | null "SOFIA-01"
data.delivery.source_id no string | null "cdek-15"
data.delivery.tariff_code no integer:int64 | null 136
data.delivery.additional_services no object Values of additional CDEK services configured for the selected integration. Boolean true enables a code-only service; other values are sent as the CDEK parameter. {"TRYING_ON":true,"PART_DELIV":false,"PACKAGE_1":2}
data.delivery.label no string:uri | null "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf"
data.delivery.delivery_date no string:date | null "2026-07-16"
data.delivery.delivery_time_start no string:time | null "09:00:00Z"
data.delivery.delivery_time_end no string:time | null "18:00:00Z"
data.comments no object | null
data.comments.delivery_service_text no string | null "Call before delivery"
data.comments.inner_text no string | null "VIP customer"
data.lines no array<OrderEmbeddedLineCreatePayload>
data.lines[] no OrderEmbeddedLineCreatePayload Line payload used inside order creation. The product is resolved by product_id or product_external_id.
data.lines[] no object
data.lines[] no object

Request examples

default

{
  "data": {
    "type_id": 1,
    "shop_id": 12,
    "warehouse_id": 42,
    "external_id": "ORD-100245",
    "send_date": "2026-07-15",
    "contact": {
      "first_name": "Ivan",
      "last_name": "Petrov",
      "phone": "+359888123456"
    },
    "lines": [
      {
        "product_id": 1201,
        "quantity": 2,
        "price": 19.99
      }
    ]
  }
}

Responses

201 Created.

Created.

Field Required Type Flags Constraints Description Example
data yes Order Outbound warehouse order. Optional relation fields are present when loaded by the controller or requested through include.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.external_id no string | null "ORD-100245"
data.domain_id no integer:int64 | null min: 1 3
data.type_id no integer:int64 | null 1
data.shop_id no integer:int64 | null min: 1 12
data.warehouse_id no integer:int64 | null min: 1 42
data.status_id no integer:int64 | null Order status ID. The current backend stores status records in the database; values are not modeled as a closed enum in the public contract. 20
data.status no object | null
data.status.id yes integer:int64 20
data.status.name yes string "Created"
data.status.color no string | null "#2457c5"
data.status.background_color no string | null "#eaf0ff"
data.order_date no string:date | null "2026-07-14"
data.send_date no string | null Stored order send date, potentially supplied by import, manual input or integration processing. It may be a date or date-time string; it is not a universal physical carrier-handover timestamp. "2026-07-15 20:25:08"
data.source_id no integer:int64 | null min: 1 1
data.customer_type no integer:int64 | null 1
data.is_cod no boolean true
data.amounts no OrderAmounts
data.amounts.shipping_price no number:float | null 8.6
data.amounts.shipping_cost no number:float | null 0
data.amounts.sum no number:float | null 39.98
data.amounts.cod_sum no number:float | null 48.58
data.company_id no integer:int64 | null min: 1 7
data.marking yes OrderMarking Marking data expected for products in the order.
data.marking.required yes boolean Whether the order contains products that require marking data after picking. true
data.marking.types yes array<string> Marking types required by products in the order. Currently chestny_znak; the list may gain values such as jewel_uin and imei.
data.marking.types[] no string "chestny_znak"
data.contact no object | null
data.contact.first_name no string | null "Ivan"
data.contact.middle_name no string | null "Ivanovich"
data.contact.last_name no string | null "Petrov"
data.contact.phone no string | null "+359888123456"
data.contact.email no string:email | null "customer@example.com"
data.contact.country_id no integer:int64 | null min: 1 100
data.contact.city_id no integer:int64 | null min: 1 200
data.contact.postcode no string | null "1000"
data.contact.latitude no number:float | null min: -90
max: 90
42.6977
data.contact.longitude no number:float | null min: -180
max: 180
23.3219
data.contact.full_address no string | null "1 Vitosha Boulevard, Sofia"
data.delivery no object | null
data.delivery.service_id no integer:int64 | null min: 1 1
data.delivery.delivery_type yes enum | null enum: door, pickup_point Normalized delivery channel derived from the configured delivery service. Null when the service type is unknown. "door"
data.delivery.is_courier yes boolean True for door delivery; false for pickup-point delivery or an unknown service type. true
data.delivery.status no string | null "created"
data.delivery.track_number no string | null "CDEK-123456789"
data.delivery.pickup_point_id no string | null "SOFIA-01"
data.delivery.source_id no string | null "cdek-15"
data.delivery.tariff_code no integer:int64 | null 136
data.delivery.additional_services no object Values of additional CDEK services configured for the selected integration. Boolean true enables a code-only service; other values are sent as the CDEK parameter. {"TRYING_ON":true,"PART_DELIV":false,"PACKAGE_1":2}
data.delivery.label no string:uri | null "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf"
data.delivery.delivery_date no string:date | null "2026-07-16"
data.delivery.delivery_time_start no string:time | null "09:00:00Z"
data.delivery.delivery_time_end no string:time | null "18:00:00Z"
data.comments no object | null
data.comments.delivery_service_text no string | null "Call before delivery"
data.comments.inner_text no string | null "VIP customer"
data.offers no array<OrderLineEmbedded>
data.offers[] no OrderLineEmbedded Scalar lot fields use the actual lot only when the full line is picked from one lot; partial/multiple actual lots leave scalars null. Before picking they retain the requested lot. Requested constraints are always available in requested_lot.
data.offers[].id yes integer:int64 readOnly min: 1 7001
data.offers[].product_id no integer:int64 | null min: 1 1201
data.offers[].quantity no number:float | null min: 0 2
data.offers[].estimated_price no number:float | null 19.5
data.offers[].price no number:float | null 19.99
data.offers[].expiration_date no string:date | null "2027-01-15"
data.offers[].batch no string | null maxLength: 15 "LOT-2026"
data.offers[].operation_user_id no integer:int64 | null min: 1 9
data.offers[].product no object | null
data.offers[].product.id yes integer:int64 readOnly min: 1 1201
data.offers[].product.name yes string "Coffee 250g"
data.offers[].product.external_id no string | null "EXT-10045"
data.offers[].reservation no OrderReservationLine Reservation totals for one order line.
data.offers[].reservation.required_qty yes number:float 3
data.offers[].reservation.reserved_qty yes number:float 1
data.offers[].reservation.unreserved_qty yes number:float 2
data.offers[].reservation.missing_qty yes number:float 2
data.offers[].reservation.status yes enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.offers[].reservation_items no array<OrderReservationItem>
data.offers[].reservation_items[] no OrderReservationItem Physical product or expanded component used to explain a reservation shortage.
data.offers[].reservation_items[].offer_id yes integer:int64 min: 1 1201
data.offers[].reservation_items[].offer_name no string | null "Coffee 250g"
data.offers[].reservation_items[].offer_article no string | null "ART-001245"
data.offers[].reservation_items[].offer_sku no string | null "SKU-001245"
data.offers[].reservation_items[].required_qty yes number:float 3
data.offers[].reservation_items[].reserved_qty yes number:float 1
data.offers[].reservation_items[].unreserved_qty yes number:float 2
data.offers[].reservation_items[].missing_qty yes number:float 2
data.offers[].reservation_items[].status yes enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.offers[].reservation_items[].source_order_offer_ids yes array<integer:int64>
data.offers[].reservation_items[].source_order_offer_ids[] no integer:int64 min: 1 7001
data.offers[].reservation_items[].source yes enum enum: order_offer, component, quant, composite_quant "order_offer"
data.offers[].reservation_items[].expanded_from_composite yes boolean false
data.offers[].reservation_items[].expanded_from_quant yes boolean false
data.offers[].reservation_items[].quant_base_offer_id no integer:int64 | null min: 1 1201
data.offers[].reservation_items[].quant_base_multiplicity no number:float | null 6
data.offers[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].production_date no string:date | null "2026-01-15"
data.offers[].requested_lot no WarehouseLot
data.offers[].requested_lot.batch yes string | null "LOT-2026"
data.offers[].requested_lot.production_date yes string:date | null "2026-01-15"
data.offers[].requested_lot.expiration_date yes string:date | null "2027-01-15"
data.offers[].picked_quantity no number:float min: 0 2
data.offers[].fulfillment_lots no array<OrderFulfillmentLot> Current active placed warehouse rows for this exact order line and product. Existing orders are included where these rows survive. This is a current picking snapshot, not a historical shipment event.
data.offers[].fulfillment_lots[] no OrderFulfillmentLot
data.offers[].fulfillment_lots[].batch yes string | null "LOT-2026"
data.offers[].fulfillment_lots[].production_date yes string:date | null "2026-01-15"
data.offers[].fulfillment_lots[].expiration_date yes string:date | null "2027-01-15"
data.offers[].fulfillment_lots[].warehouse_id yes integer:int64 min: 1 734
data.offers[].fulfillment_lots[].product_id yes integer:int64 min: 1 1201
data.offers[].fulfillment_lots[].quantity yes number:float min: 0 2
data.reservation no OrderReservation Reservation readiness and shortages calculated for the order.
data.reservation.ready yes boolean false
data.reservation.reason yes string | null "Not all order products are reserved."
data.reservation.expected_total yes number:float 3
data.reservation.reserved_total yes number:float 1
data.reservation.unreserved_total yes number:float 2
data.reservation.missing_total yes number:float 2
data.reservation.missing_items yes array<OrderReservationItem>
data.reservation.missing_items[] no OrderReservationItem Physical product or expanded component used to explain a reservation shortage.
data.reservation.missing_items[].offer_id yes integer:int64 min: 1 1201
data.reservation.missing_items[].offer_name no string | null "Coffee 250g"
data.reservation.missing_items[].offer_article no string | null "ART-001245"
data.reservation.missing_items[].offer_sku no string | null "SKU-001245"
data.reservation.missing_items[].required_qty yes number:float 3
data.reservation.missing_items[].reserved_qty yes number:float 1
data.reservation.missing_items[].unreserved_qty yes number:float 2
data.reservation.missing_items[].missing_qty yes number:float 2
data.reservation.missing_items[].status yes enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.reservation.missing_items[].source_order_offer_ids yes array<integer:int64>
data.reservation.missing_items[].source_order_offer_ids[] no integer:int64 min: 1 7001
data.reservation.missing_items[].source yes enum enum: order_offer, component, quant, composite_quant "order_offer"
data.reservation.missing_items[].expanded_from_composite yes boolean false
data.reservation.missing_items[].expanded_from_quant yes boolean false
data.reservation.missing_items[].quant_base_offer_id no integer:int64 | null min: 1 1201
data.reservation.missing_items[].quant_base_multiplicity no number:float | null 6
data.reservation.error yes boolean false
data.consumables no array<OrderConsumable>
data.consumables[] no OrderConsumable Current consumable line, not an append-only consumption event. Unplaced usage creates a commitment but does not decrease physical stockTotal; do not treat that stockTotal as remaining packaging inventory.
data.consumables[].id yes integer:int64 min: 1 301
data.consumables[].order_id yes integer:int64 min: 1 8101
data.consumables[].product_id yes integer:int64 min: 1 1202
data.consumables[].warehouse_id yes integer:int64 | null min: 1 734
data.consumables[].place_id yes integer:int64 | null min: 1 501
data.consumables[].quantity yes number:float 1
data.consumables[].stock_location_mode yes enum enum: placed, unplaced "unplaced"
data.consumables[].created_at yes string:date-time | null "2026-07-14T10:30:00Z"
data.consumables[].updated_at yes string:date-time | null "2026-07-14T10:30:00Z"
data.status_history no array<OrderStatusHistoryEvent> Present only on GET list/detail with include=status_history. Ordered chronologically, retains repeat status cycles and combines surviving audit and action-log entries. Missing history returns an empty array.
data.status_history[] no OrderStatusHistoryEvent Recorded WMS status transition or explicitly inferred initial status. It does not independently confirm physical carrier handover.
data.status_history[].status_id yes integer:int64 130
data.status_history[].previous_status_id yes integer:int64 | null 110
data.status_history[].changed_at yes string:date-time Time of the WMS status transition in ISO 8601 with an explicit timezone offset. "2026-07-14T12:00:00+03:00"
data.status_history[].source yes enum enum: audit, action_log, inferred "action_log"
data.status_history[].inferred yes boolean True only for a reconstructed initial status at order creation; this is not a separately recorded transition. false
data.status_history_meta no OrderStatusHistoryMeta
data.status_history_meta.available yes boolean At least one event is available. This does not guarantee complete historical coverage. true
data.status_history_meta.current_status_matches_history yes boolean The last available event has the current order status. False also when history is empty. true
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 8101,
    "external_id": "ORD-100245",
    "domain_id": 3,
    "type_id": 1,
    "shop_id": 12,
    "warehouse_id": 42,
    "status_id": 20,
    "status": {
      "id": 20,
      "name": "Created",
      "color": "#2457c5",
      "background_color": "#eaf0ff"
    },
    "order_date": "2026-07-14",
    "send_date": "2026-07-15",
    "source_id": 1,
    "customer_type": 1,
    "is_cod": true,
    "amounts": {
      "shipping_price": 8.6,
      "shipping_cost": 0,
      "sum": 39.98,
      "cod_sum": 48.58
    },
    "company_id": 7,
    "marking": {
      "required": true,
      "types": [
        "chestny_znak"
      ]
    },
    "contact": {
      "first_name": "Ivan",
      "middle_name": null,
      "last_name": "Petrov",
      "phone": "+359888123456",
      "email": "customer@example.com",
      "country_id": 100,
      "city_id": 200,
      "postcode": "1000",
      "latitude": 42.6977,
      "longitude": 23.3219,
      "full_address": "1 Vitosha Boulevard, Sofia"
    },
    "delivery": {
      "service_id": 1,
      "delivery_type": "door",
      "is_courier": true,
      "status": "created",
      "track_number": "CDEK-123456789",
      "source_id": "cdek-15",
      "tariff_code": 136,
      "label": "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf",
      "delivery_date": "2026-07-16",
      "delivery_time_start": "09:00:00Z",
      "delivery_time_end": "18:00:00Z"
    },
    "comments": {
      "delivery_service_text": "Call before delivery",
      "inner_text": "VIP customer"
    },
    "offers": [
      {
        "id": 7001,
        "product_id": 1201,
        "quantity": 2,
        "estimated_price": 19.5,
        "price": 19.99,
        "expiration_date": "2027-01-15",
        "batch": "LOT-2026",
        "operation_user_id": 9,
        "product": {
          "id": 1201,
          "name": "Coffee 250g",
          "external_id": "EXT-10045"
        },
        "created_at": "2026-07-14T09:00:00Z",
        "updated_at": "2026-07-14T09:30:00Z"
      }
    ],
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
GET /api/v2/orders/{id}

Get order

operationIdgetOrders
TagOrders
SecuritybearerAuth

Returns one order when it exists and is visible to the authenticated account.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Request include=status_history to receive chronological WMS status transitions with changed_at (ISO 8601 and explicit timezone offset), source and inferred. status_history_meta reports availability and whether the last event matches the current status; surviving logs do not guarantee a complete history. send_date is the stored order date field and may come from import, manual input or integration processing; it is not a universal physical carrier-handover timestamp. Status transitions and shipment-document closure must be interpreted as separate recorded events. Dedicated picked_at, packed_at and shipped_at milestones are not exposed.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/orders/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Order ID. 1001
include query no string form false Add status_history for recorded WMS status transitions; the other detail relations remain included by default. The same filter may also be sent as filter[include] where supported by the Laravel query adapter. "status_history"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes Order Outbound warehouse order. Optional relation fields are present when loaded by the controller or requested through include.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.external_id no string | null "ORD-100245"
data.domain_id no integer:int64 | null min: 1 3
data.type_id no integer:int64 | null 1
data.shop_id no integer:int64 | null min: 1 12
data.warehouse_id no integer:int64 | null min: 1 42
data.status_id no integer:int64 | null Order status ID. The current backend stores status records in the database; values are not modeled as a closed enum in the public contract. 20
data.status no object | null
data.status.id yes integer:int64 20
data.status.name yes string "Created"
data.status.color no string | null "#2457c5"
data.status.background_color no string | null "#eaf0ff"
data.order_date no string:date | null "2026-07-14"
data.send_date no string | null Stored order send date, potentially supplied by import, manual input or integration processing. It may be a date or date-time string; it is not a universal physical carrier-handover timestamp. "2026-07-15 20:25:08"
data.source_id no integer:int64 | null min: 1 1
data.customer_type no integer:int64 | null 1
data.is_cod no boolean true
data.amounts no OrderAmounts
data.amounts.shipping_price no number:float | null 8.6
data.amounts.shipping_cost no number:float | null 0
data.amounts.sum no number:float | null 39.98
data.amounts.cod_sum no number:float | null 48.58
data.company_id no integer:int64 | null min: 1 7
data.marking yes OrderMarking Marking data expected for products in the order.
data.marking.required yes boolean Whether the order contains products that require marking data after picking. true
data.marking.types yes array<string> Marking types required by products in the order. Currently chestny_znak; the list may gain values such as jewel_uin and imei.
data.marking.types[] no string "chestny_znak"
data.contact no object | null
data.contact.first_name no string | null "Ivan"
data.contact.middle_name no string | null "Ivanovich"
data.contact.last_name no string | null "Petrov"
data.contact.phone no string | null "+359888123456"
data.contact.email no string:email | null "customer@example.com"
data.contact.country_id no integer:int64 | null min: 1 100
data.contact.city_id no integer:int64 | null min: 1 200
data.contact.postcode no string | null "1000"
data.contact.latitude no number:float | null min: -90
max: 90
42.6977
data.contact.longitude no number:float | null min: -180
max: 180
23.3219
data.contact.full_address no string | null "1 Vitosha Boulevard, Sofia"
data.delivery no object | null
data.delivery.service_id no integer:int64 | null min: 1 1
data.delivery.delivery_type yes enum | null enum: door, pickup_point Normalized delivery channel derived from the configured delivery service. Null when the service type is unknown. "door"
data.delivery.is_courier yes boolean True for door delivery; false for pickup-point delivery or an unknown service type. true
data.delivery.status no string | null "created"
data.delivery.track_number no string | null "CDEK-123456789"
data.delivery.pickup_point_id no string | null "SOFIA-01"
data.delivery.source_id no string | null "cdek-15"
data.delivery.tariff_code no integer:int64 | null 136
data.delivery.additional_services no object Values of additional CDEK services configured for the selected integration. Boolean true enables a code-only service; other values are sent as the CDEK parameter. {"TRYING_ON":true,"PART_DELIV":false,"PACKAGE_1":2}
data.delivery.label no string:uri | null "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf"
data.delivery.delivery_date no string:date | null "2026-07-16"
data.delivery.delivery_time_start no string:time | null "09:00:00Z"
data.delivery.delivery_time_end no string:time | null "18:00:00Z"
data.comments no object | null
data.comments.delivery_service_text no string | null "Call before delivery"
data.comments.inner_text no string | null "VIP customer"
data.offers no array<OrderLineEmbedded>
data.offers[] no OrderLineEmbedded Scalar lot fields use the actual lot only when the full line is picked from one lot; partial/multiple actual lots leave scalars null. Before picking they retain the requested lot. Requested constraints are always available in requested_lot.
data.offers[].id yes integer:int64 readOnly min: 1 7001
data.offers[].product_id no integer:int64 | null min: 1 1201
data.offers[].quantity no number:float | null min: 0 2
data.offers[].estimated_price no number:float | null 19.5
data.offers[].price no number:float | null 19.99
data.offers[].expiration_date no string:date | null "2027-01-15"
data.offers[].batch no string | null maxLength: 15 "LOT-2026"
data.offers[].operation_user_id no integer:int64 | null min: 1 9
data.offers[].product no object | null
data.offers[].product.id yes integer:int64 readOnly min: 1 1201
data.offers[].product.name yes string "Coffee 250g"
data.offers[].product.external_id no string | null "EXT-10045"
data.offers[].reservation no OrderReservationLine Reservation totals for one order line.
data.offers[].reservation.required_qty yes number:float 3
data.offers[].reservation.reserved_qty yes number:float 1
data.offers[].reservation.unreserved_qty yes number:float 2
data.offers[].reservation.missing_qty yes number:float 2
data.offers[].reservation.status yes enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.offers[].reservation_items no array<OrderReservationItem>
data.offers[].reservation_items[] no OrderReservationItem Physical product or expanded component used to explain a reservation shortage.
data.offers[].reservation_items[].offer_id yes integer:int64 min: 1 1201
data.offers[].reservation_items[].offer_name no string | null "Coffee 250g"
data.offers[].reservation_items[].offer_article no string | null "ART-001245"
data.offers[].reservation_items[].offer_sku no string | null "SKU-001245"
data.offers[].reservation_items[].required_qty yes number:float 3
data.offers[].reservation_items[].reserved_qty yes number:float 1
data.offers[].reservation_items[].unreserved_qty yes number:float 2
data.offers[].reservation_items[].missing_qty yes number:float 2
data.offers[].reservation_items[].status yes enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.offers[].reservation_items[].source_order_offer_ids yes array<integer:int64>
data.offers[].reservation_items[].source_order_offer_ids[] no integer:int64 min: 1 7001
data.offers[].reservation_items[].source yes enum enum: order_offer, component, quant, composite_quant "order_offer"
data.offers[].reservation_items[].expanded_from_composite yes boolean false
data.offers[].reservation_items[].expanded_from_quant yes boolean false
data.offers[].reservation_items[].quant_base_offer_id no integer:int64 | null min: 1 1201
data.offers[].reservation_items[].quant_base_multiplicity no number:float | null 6
data.offers[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].production_date no string:date | null "2026-01-15"
data.offers[].requested_lot no WarehouseLot
data.offers[].requested_lot.batch yes string | null "LOT-2026"
data.offers[].requested_lot.production_date yes string:date | null "2026-01-15"
data.offers[].requested_lot.expiration_date yes string:date | null "2027-01-15"
data.offers[].picked_quantity no number:float min: 0 2
data.offers[].fulfillment_lots no array<OrderFulfillmentLot> Current active placed warehouse rows for this exact order line and product. Existing orders are included where these rows survive. This is a current picking snapshot, not a historical shipment event.
data.offers[].fulfillment_lots[] no OrderFulfillmentLot
data.offers[].fulfillment_lots[].batch yes string | null "LOT-2026"
data.offers[].fulfillment_lots[].production_date yes string:date | null "2026-01-15"
data.offers[].fulfillment_lots[].expiration_date yes string:date | null "2027-01-15"
data.offers[].fulfillment_lots[].warehouse_id yes integer:int64 min: 1 734
data.offers[].fulfillment_lots[].product_id yes integer:int64 min: 1 1201
data.offers[].fulfillment_lots[].quantity yes number:float min: 0 2
data.reservation no OrderReservation Reservation readiness and shortages calculated for the order.
data.reservation.ready yes boolean false
data.reservation.reason yes string | null "Not all order products are reserved."
data.reservation.expected_total yes number:float 3
data.reservation.reserved_total yes number:float 1
data.reservation.unreserved_total yes number:float 2
data.reservation.missing_total yes number:float 2
data.reservation.missing_items yes array<OrderReservationItem>
data.reservation.missing_items[] no OrderReservationItem Physical product or expanded component used to explain a reservation shortage.
data.reservation.missing_items[].offer_id yes integer:int64 min: 1 1201
data.reservation.missing_items[].offer_name no string | null "Coffee 250g"
data.reservation.missing_items[].offer_article no string | null "ART-001245"
data.reservation.missing_items[].offer_sku no string | null "SKU-001245"
data.reservation.missing_items[].required_qty yes number:float 3
data.reservation.missing_items[].reserved_qty yes number:float 1
data.reservation.missing_items[].unreserved_qty yes number:float 2
data.reservation.missing_items[].missing_qty yes number:float 2
data.reservation.missing_items[].status yes enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.reservation.missing_items[].source_order_offer_ids yes array<integer:int64>
data.reservation.missing_items[].source_order_offer_ids[] no integer:int64 min: 1 7001
data.reservation.missing_items[].source yes enum enum: order_offer, component, quant, composite_quant "order_offer"
data.reservation.missing_items[].expanded_from_composite yes boolean false
data.reservation.missing_items[].expanded_from_quant yes boolean false
data.reservation.missing_items[].quant_base_offer_id no integer:int64 | null min: 1 1201
data.reservation.missing_items[].quant_base_multiplicity no number:float | null 6
data.reservation.error yes boolean false
data.consumables no array<OrderConsumable>
data.consumables[] no OrderConsumable Current consumable line, not an append-only consumption event. Unplaced usage creates a commitment but does not decrease physical stockTotal; do not treat that stockTotal as remaining packaging inventory.
data.consumables[].id yes integer:int64 min: 1 301
data.consumables[].order_id yes integer:int64 min: 1 8101
data.consumables[].product_id yes integer:int64 min: 1 1202
data.consumables[].warehouse_id yes integer:int64 | null min: 1 734
data.consumables[].place_id yes integer:int64 | null min: 1 501
data.consumables[].quantity yes number:float 1
data.consumables[].stock_location_mode yes enum enum: placed, unplaced "unplaced"
data.consumables[].created_at yes string:date-time | null "2026-07-14T10:30:00Z"
data.consumables[].updated_at yes string:date-time | null "2026-07-14T10:30:00Z"
data.status_history no array<OrderStatusHistoryEvent> Present only on GET list/detail with include=status_history. Ordered chronologically, retains repeat status cycles and combines surviving audit and action-log entries. Missing history returns an empty array.
data.status_history[] no OrderStatusHistoryEvent Recorded WMS status transition or explicitly inferred initial status. It does not independently confirm physical carrier handover.
data.status_history[].status_id yes integer:int64 130
data.status_history[].previous_status_id yes integer:int64 | null 110
data.status_history[].changed_at yes string:date-time Time of the WMS status transition in ISO 8601 with an explicit timezone offset. "2026-07-14T12:00:00+03:00"
data.status_history[].source yes enum enum: audit, action_log, inferred "action_log"
data.status_history[].inferred yes boolean True only for a reconstructed initial status at order creation; this is not a separately recorded transition. false
data.status_history_meta no OrderStatusHistoryMeta
data.status_history_meta.available yes boolean At least one event is available. This does not guarantee complete historical coverage. true
data.status_history_meta.current_status_matches_history yes boolean The last available event has the current order status. False also when history is empty. true
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 8101,
    "external_id": "ORD-100245",
    "domain_id": 3,
    "type_id": 1,
    "shop_id": 12,
    "warehouse_id": 42,
    "status_id": 20,
    "status": {
      "id": 20,
      "name": "Created",
      "color": "#2457c5",
      "background_color": "#eaf0ff"
    },
    "order_date": "2026-07-14",
    "send_date": "2026-07-15",
    "source_id": 1,
    "customer_type": 1,
    "is_cod": true,
    "amounts": {
      "shipping_price": 8.6,
      "shipping_cost": 0,
      "sum": 39.98,
      "cod_sum": 48.58
    },
    "company_id": 7,
    "marking": {
      "required": true,
      "types": [
        "chestny_znak"
      ]
    },
    "contact": {
      "first_name": "Ivan",
      "middle_name": null,
      "last_name": "Petrov",
      "phone": "+359888123456",
      "email": "customer@example.com",
      "country_id": 100,
      "city_id": 200,
      "postcode": "1000",
      "latitude": 42.6977,
      "longitude": 23.3219,
      "full_address": "1 Vitosha Boulevard, Sofia"
    },
    "delivery": {
      "service_id": 1,
      "delivery_type": "door",
      "is_courier": true,
      "status": "created",
      "track_number": "CDEK-123456789",
      "source_id": "cdek-15",
      "tariff_code": 136,
      "label": "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf",
      "delivery_date": "2026-07-16",
      "delivery_time_start": "09:00:00Z",
      "delivery_time_end": "18:00:00Z"
    },
    "comments": {
      "delivery_service_text": "Call before delivery",
      "inner_text": "VIP customer"
    },
    "offers": [
      {
        "id": 7001,
        "product_id": 1201,
        "quantity": 2,
        "estimated_price": 19.5,
        "price": 19.99,
        "expiration_date": "2027-01-15",
        "batch": "LOT-2026",
        "operation_user_id": 9,
        "product": {
          "id": 1201,
          "name": "Coffee 250g",
          "external_id": "EXT-10045"
        },
        "created_at": "2026-07-14T09:00:00Z",
        "updated_at": "2026-07-14T09:30:00Z"
      }
    ],
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z",
    "status_history": [
      {
        "status_id": 20,
        "previous_status_id": 10,
        "changed_at": "2026-07-14T12:00:00+03:00",
        "source": "action_log",
        "inferred": false
      }
    ],
    "status_history_meta": {
      "available": true,
      "current_status_matches_history": true
    }
  },
  "meta": {
    "api_version": "v2"
  }
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
PUT /api/v2/orders/{id}

Update order

operationIdreplaceOrders
TagOrders
SecuritybearerAuth

Replaces editable order fields before the lifecycle reaches a locked status. Contact, delivery, comments, dimensions, and selected header fields may be changed; system totals remain server-calculated.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/orders/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Order ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

ReplaceOrderRequest required

Field Required Type Flags Constraints Description Example
data yes ReplaceOrderPayload Legacy PUT payload. Current backend applies partial-update semantics and leaves omitted fields unchanged.
data.external_id no string | null "ORD-100245"
data.send_date no string:date | null "2026-07-16"
data.status_id no integer:int64 | null Order status ID. The current backend stores status records in the database; values are not modeled as a closed enum in the public contract. 20
data.is_cod no boolean true
data.amounts no object | null
data.amounts.shipping_price no number:float | null 8.6
data.amounts.shipping_cost no number:float | null 0
data.amounts.sum no number:float | null 39.98
data.amounts.cod_sum no number:float | null 48.58
data.weight no object | null
data.weight.value no number:float | null min: 0 250
data.weight.unit yes enum enum: g "g"
data.dimensions no object | null
data.dimensions.x no number:float | null min: 0 105
data.dimensions.y no number:float | null min: 0 200
data.dimensions.z no number:float | null min: 0 32
data.dimensions.unit yes enum enum: mm "mm"
data.contact no object | null
data.contact.first_name no string | null "Ivan"
data.contact.middle_name no string | null "Ivanovich"
data.contact.last_name no string | null "Petrov"
data.contact.phone no string | null "+359888123456"
data.contact.email no string:email | null "customer@example.com"
data.contact.country_id no integer:int64 | null min: 1 100
data.contact.city_id no integer:int64 | null min: 1 200
data.contact.postcode no string | null "1000"
data.contact.latitude no number:float | null min: -90
max: 90
42.6977
data.contact.longitude no number:float | null min: -180
max: 180
23.3219
data.contact.full_address no string | null "1 Vitosha Boulevard, Sofia"
data.delivery no object | null
data.delivery.service_id no integer:int64 | null min: 1 1
data.delivery.delivery_type yes enum | null enum: door, pickup_point Normalized delivery channel derived from the configured delivery service. Null when the service type is unknown. "door"
data.delivery.is_courier yes boolean True for door delivery; false for pickup-point delivery or an unknown service type. true
data.delivery.status no string | null "created"
data.delivery.track_number no string | null "CDEK-123456789"
data.delivery.pickup_point_id no string | null "SOFIA-01"
data.delivery.source_id no string | null "cdek-15"
data.delivery.tariff_code no integer:int64 | null 136
data.delivery.additional_services no object Values of additional CDEK services configured for the selected integration. Boolean true enables a code-only service; other values are sent as the CDEK parameter. {"TRYING_ON":true,"PART_DELIV":false,"PACKAGE_1":2}
data.delivery.label no string:uri | null "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf"
data.delivery.delivery_date no string:date | null "2026-07-16"
data.delivery.delivery_time_start no string:time | null "09:00:00Z"
data.delivery.delivery_time_end no string:time | null "18:00:00Z"
data.comments no object | null
data.comments.delivery_service_text no string | null "Call before delivery"
data.comments.inner_text no string | null "VIP customer"

Request examples

default

{
  "data": {
    "send_date": "2026-07-16",
    "comments": {
      "inner_text": "Priority shipment"
    }
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes Order Outbound warehouse order. Optional relation fields are present when loaded by the controller or requested through include.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.external_id no string | null "ORD-100245"
data.domain_id no integer:int64 | null min: 1 3
data.type_id no integer:int64 | null 1
data.shop_id no integer:int64 | null min: 1 12
data.warehouse_id no integer:int64 | null min: 1 42
data.status_id no integer:int64 | null Order status ID. The current backend stores status records in the database; values are not modeled as a closed enum in the public contract. 20
data.status no object | null
data.status.id yes integer:int64 20
data.status.name yes string "Created"
data.status.color no string | null "#2457c5"
data.status.background_color no string | null "#eaf0ff"
data.order_date no string:date | null "2026-07-14"
data.send_date no string | null Stored order send date, potentially supplied by import, manual input or integration processing. It may be a date or date-time string; it is not a universal physical carrier-handover timestamp. "2026-07-15 20:25:08"
data.source_id no integer:int64 | null min: 1 1
data.customer_type no integer:int64 | null 1
data.is_cod no boolean true
data.amounts no OrderAmounts
data.amounts.shipping_price no number:float | null 8.6
data.amounts.shipping_cost no number:float | null 0
data.amounts.sum no number:float | null 39.98
data.amounts.cod_sum no number:float | null 48.58
data.company_id no integer:int64 | null min: 1 7
data.marking yes OrderMarking Marking data expected for products in the order.
data.marking.required yes boolean Whether the order contains products that require marking data after picking. true
data.marking.types yes array<string> Marking types required by products in the order. Currently chestny_znak; the list may gain values such as jewel_uin and imei.
data.marking.types[] no string "chestny_znak"
data.contact no object | null
data.contact.first_name no string | null "Ivan"
data.contact.middle_name no string | null "Ivanovich"
data.contact.last_name no string | null "Petrov"
data.contact.phone no string | null "+359888123456"
data.contact.email no string:email | null "customer@example.com"
data.contact.country_id no integer:int64 | null min: 1 100
data.contact.city_id no integer:int64 | null min: 1 200
data.contact.postcode no string | null "1000"
data.contact.latitude no number:float | null min: -90
max: 90
42.6977
data.contact.longitude no number:float | null min: -180
max: 180
23.3219
data.contact.full_address no string | null "1 Vitosha Boulevard, Sofia"
data.delivery no object | null
data.delivery.service_id no integer:int64 | null min: 1 1
data.delivery.delivery_type yes enum | null enum: door, pickup_point Normalized delivery channel derived from the configured delivery service. Null when the service type is unknown. "door"
data.delivery.is_courier yes boolean True for door delivery; false for pickup-point delivery or an unknown service type. true
data.delivery.status no string | null "created"
data.delivery.track_number no string | null "CDEK-123456789"
data.delivery.pickup_point_id no string | null "SOFIA-01"
data.delivery.source_id no string | null "cdek-15"
data.delivery.tariff_code no integer:int64 | null 136
data.delivery.additional_services no object Values of additional CDEK services configured for the selected integration. Boolean true enables a code-only service; other values are sent as the CDEK parameter. {"TRYING_ON":true,"PART_DELIV":false,"PACKAGE_1":2}
data.delivery.label no string:uri | null "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf"
data.delivery.delivery_date no string:date | null "2026-07-16"
data.delivery.delivery_time_start no string:time | null "09:00:00Z"
data.delivery.delivery_time_end no string:time | null "18:00:00Z"
data.comments no object | null
data.comments.delivery_service_text no string | null "Call before delivery"
data.comments.inner_text no string | null "VIP customer"
data.offers no array<OrderLineEmbedded>
data.offers[] no OrderLineEmbedded Scalar lot fields use the actual lot only when the full line is picked from one lot; partial/multiple actual lots leave scalars null. Before picking they retain the requested lot. Requested constraints are always available in requested_lot.
data.offers[].id yes integer:int64 readOnly min: 1 7001
data.offers[].product_id no integer:int64 | null min: 1 1201
data.offers[].quantity no number:float | null min: 0 2
data.offers[].estimated_price no number:float | null 19.5
data.offers[].price no number:float | null 19.99
data.offers[].expiration_date no string:date | null "2027-01-15"
data.offers[].batch no string | null maxLength: 15 "LOT-2026"
data.offers[].operation_user_id no integer:int64 | null min: 1 9
data.offers[].product no object | null
data.offers[].product.id yes integer:int64 readOnly min: 1 1201
data.offers[].product.name yes string "Coffee 250g"
data.offers[].product.external_id no string | null "EXT-10045"
data.offers[].reservation no OrderReservationLine Reservation totals for one order line.
data.offers[].reservation.required_qty yes number:float 3
data.offers[].reservation.reserved_qty yes number:float 1
data.offers[].reservation.unreserved_qty yes number:float 2
data.offers[].reservation.missing_qty yes number:float 2
data.offers[].reservation.status yes enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.offers[].reservation_items no array<OrderReservationItem>
data.offers[].reservation_items[] no OrderReservationItem Physical product or expanded component used to explain a reservation shortage.
data.offers[].reservation_items[].offer_id yes integer:int64 min: 1 1201
data.offers[].reservation_items[].offer_name no string | null "Coffee 250g"
data.offers[].reservation_items[].offer_article no string | null "ART-001245"
data.offers[].reservation_items[].offer_sku no string | null "SKU-001245"
data.offers[].reservation_items[].required_qty yes number:float 3
data.offers[].reservation_items[].reserved_qty yes number:float 1
data.offers[].reservation_items[].unreserved_qty yes number:float 2
data.offers[].reservation_items[].missing_qty yes number:float 2
data.offers[].reservation_items[].status yes enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.offers[].reservation_items[].source_order_offer_ids yes array<integer:int64>
data.offers[].reservation_items[].source_order_offer_ids[] no integer:int64 min: 1 7001
data.offers[].reservation_items[].source yes enum enum: order_offer, component, quant, composite_quant "order_offer"
data.offers[].reservation_items[].expanded_from_composite yes boolean false
data.offers[].reservation_items[].expanded_from_quant yes boolean false
data.offers[].reservation_items[].quant_base_offer_id no integer:int64 | null min: 1 1201
data.offers[].reservation_items[].quant_base_multiplicity no number:float | null 6
data.offers[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].production_date no string:date | null "2026-01-15"
data.offers[].requested_lot no WarehouseLot
data.offers[].requested_lot.batch yes string | null "LOT-2026"
data.offers[].requested_lot.production_date yes string:date | null "2026-01-15"
data.offers[].requested_lot.expiration_date yes string:date | null "2027-01-15"
data.offers[].picked_quantity no number:float min: 0 2
data.offers[].fulfillment_lots no array<OrderFulfillmentLot> Current active placed warehouse rows for this exact order line and product. Existing orders are included where these rows survive. This is a current picking snapshot, not a historical shipment event.
data.offers[].fulfillment_lots[] no OrderFulfillmentLot
data.offers[].fulfillment_lots[].batch yes string | null "LOT-2026"
data.offers[].fulfillment_lots[].production_date yes string:date | null "2026-01-15"
data.offers[].fulfillment_lots[].expiration_date yes string:date | null "2027-01-15"
data.offers[].fulfillment_lots[].warehouse_id yes integer:int64 min: 1 734
data.offers[].fulfillment_lots[].product_id yes integer:int64 min: 1 1201
data.offers[].fulfillment_lots[].quantity yes number:float min: 0 2
data.reservation no OrderReservation Reservation readiness and shortages calculated for the order.
data.reservation.ready yes boolean false
data.reservation.reason yes string | null "Not all order products are reserved."
data.reservation.expected_total yes number:float 3
data.reservation.reserved_total yes number:float 1
data.reservation.unreserved_total yes number:float 2
data.reservation.missing_total yes number:float 2
data.reservation.missing_items yes array<OrderReservationItem>
data.reservation.missing_items[] no OrderReservationItem Physical product or expanded component used to explain a reservation shortage.
data.reservation.missing_items[].offer_id yes integer:int64 min: 1 1201
data.reservation.missing_items[].offer_name no string | null "Coffee 250g"
data.reservation.missing_items[].offer_article no string | null "ART-001245"
data.reservation.missing_items[].offer_sku no string | null "SKU-001245"
data.reservation.missing_items[].required_qty yes number:float 3
data.reservation.missing_items[].reserved_qty yes number:float 1
data.reservation.missing_items[].unreserved_qty yes number:float 2
data.reservation.missing_items[].missing_qty yes number:float 2
data.reservation.missing_items[].status yes enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.reservation.missing_items[].source_order_offer_ids yes array<integer:int64>
data.reservation.missing_items[].source_order_offer_ids[] no integer:int64 min: 1 7001
data.reservation.missing_items[].source yes enum enum: order_offer, component, quant, composite_quant "order_offer"
data.reservation.missing_items[].expanded_from_composite yes boolean false
data.reservation.missing_items[].expanded_from_quant yes boolean false
data.reservation.missing_items[].quant_base_offer_id no integer:int64 | null min: 1 1201
data.reservation.missing_items[].quant_base_multiplicity no number:float | null 6
data.reservation.error yes boolean false
data.consumables no array<OrderConsumable>
data.consumables[] no OrderConsumable Current consumable line, not an append-only consumption event. Unplaced usage creates a commitment but does not decrease physical stockTotal; do not treat that stockTotal as remaining packaging inventory.
data.consumables[].id yes integer:int64 min: 1 301
data.consumables[].order_id yes integer:int64 min: 1 8101
data.consumables[].product_id yes integer:int64 min: 1 1202
data.consumables[].warehouse_id yes integer:int64 | null min: 1 734
data.consumables[].place_id yes integer:int64 | null min: 1 501
data.consumables[].quantity yes number:float 1
data.consumables[].stock_location_mode yes enum enum: placed, unplaced "unplaced"
data.consumables[].created_at yes string:date-time | null "2026-07-14T10:30:00Z"
data.consumables[].updated_at yes string:date-time | null "2026-07-14T10:30:00Z"
data.status_history no array<OrderStatusHistoryEvent> Present only on GET list/detail with include=status_history. Ordered chronologically, retains repeat status cycles and combines surviving audit and action-log entries. Missing history returns an empty array.
data.status_history[] no OrderStatusHistoryEvent Recorded WMS status transition or explicitly inferred initial status. It does not independently confirm physical carrier handover.
data.status_history[].status_id yes integer:int64 130
data.status_history[].previous_status_id yes integer:int64 | null 110
data.status_history[].changed_at yes string:date-time Time of the WMS status transition in ISO 8601 with an explicit timezone offset. "2026-07-14T12:00:00+03:00"
data.status_history[].source yes enum enum: audit, action_log, inferred "action_log"
data.status_history[].inferred yes boolean True only for a reconstructed initial status at order creation; this is not a separately recorded transition. false
data.status_history_meta no OrderStatusHistoryMeta
data.status_history_meta.available yes boolean At least one event is available. This does not guarantee complete historical coverage. true
data.status_history_meta.current_status_matches_history yes boolean The last available event has the current order status. False also when history is empty. true
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 8101,
    "external_id": "ORD-100245",
    "domain_id": 3,
    "type_id": 1,
    "shop_id": 12,
    "warehouse_id": 42,
    "status_id": 20,
    "status": {
      "id": 20,
      "name": "Created",
      "color": "#2457c5",
      "background_color": "#eaf0ff"
    },
    "order_date": "2026-07-14",
    "send_date": "2026-07-15",
    "source_id": 1,
    "customer_type": 1,
    "is_cod": true,
    "amounts": {
      "shipping_price": 8.6,
      "shipping_cost": 0,
      "sum": 39.98,
      "cod_sum": 48.58
    },
    "company_id": 7,
    "marking": {
      "required": true,
      "types": [
        "chestny_znak"
      ]
    },
    "contact": {
      "first_name": "Ivan",
      "middle_name": null,
      "last_name": "Petrov",
      "phone": "+359888123456",
      "email": "customer@example.com",
      "country_id": 100,
      "city_id": 200,
      "postcode": "1000",
      "latitude": 42.6977,
      "longitude": 23.3219,
      "full_address": "1 Vitosha Boulevard, Sofia"
    },
    "delivery": {
      "service_id": 1,
      "delivery_type": "door",
      "is_courier": true,
      "status": "created",
      "track_number": "CDEK-123456789",
      "source_id": "cdek-15",
      "tariff_code": 136,
      "label": "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf",
      "delivery_date": "2026-07-16",
      "delivery_time_start": "09:00:00Z",
      "delivery_time_end": "18:00:00Z"
    },
    "comments": {
      "delivery_service_text": "Call before delivery",
      "inner_text": "VIP customer"
    },
    "offers": [
      {
        "id": 7001,
        "product_id": 1201,
        "quantity": 2,
        "estimated_price": 19.5,
        "price": 19.99,
        "expiration_date": "2027-01-15",
        "batch": "LOT-2026",
        "operation_user_id": 9,
        "product": {
          "id": 1201,
          "name": "Coffee 250g",
          "external_id": "EXT-10045"
        },
        "created_at": "2026-07-14T09:00:00Z",
        "updated_at": "2026-07-14T09:30:00Z"
      }
    ],
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
PATCH /api/v2/orders/{id}

Update order

operationIdpatchOrders
TagOrders
SecuritybearerAuth

Partially updates editable order fields. Omitted fields are left unchanged and the same lifecycle, data-scope, and idempotency rules as PUT /api/v2/orders/{id} apply.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request PATCH "${NWMS_BASE_URL}/api/v2/orders/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Order ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

PatchOrderRequest required

Field Required Type Flags Constraints Description Example
data yes PatchOrderPayload Partial order update payload. Omitted fields are unchanged.
data.external_id no string | null "ORD-100245"
data.send_date no string:date | null "2026-07-16"
data.status_id no integer:int64 | null Order status ID. The current backend stores status records in the database; values are not modeled as a closed enum in the public contract. 20
data.is_cod no boolean true
data.amounts no object | null
data.amounts.shipping_price no number:float | null 8.6
data.amounts.shipping_cost no number:float | null 0
data.amounts.sum no number:float | null 39.98
data.amounts.cod_sum no number:float | null 48.58
data.weight no object | null
data.weight.value no number:float | null min: 0 250
data.weight.unit yes enum enum: g "g"
data.dimensions no object | null
data.dimensions.x no number:float | null min: 0 105
data.dimensions.y no number:float | null min: 0 200
data.dimensions.z no number:float | null min: 0 32
data.dimensions.unit yes enum enum: mm "mm"
data.contact no object | null
data.contact.first_name no string | null "Ivan"
data.contact.middle_name no string | null "Ivanovich"
data.contact.last_name no string | null "Petrov"
data.contact.phone no string | null "+359888123456"
data.contact.email no string:email | null "customer@example.com"
data.contact.country_id no integer:int64 | null min: 1 100
data.contact.city_id no integer:int64 | null min: 1 200
data.contact.postcode no string | null "1000"
data.contact.latitude no number:float | null min: -90
max: 90
42.6977
data.contact.longitude no number:float | null min: -180
max: 180
23.3219
data.contact.full_address no string | null "1 Vitosha Boulevard, Sofia"
data.delivery no object | null
data.delivery.service_id no integer:int64 | null min: 1 1
data.delivery.delivery_type yes enum | null enum: door, pickup_point Normalized delivery channel derived from the configured delivery service. Null when the service type is unknown. "door"
data.delivery.is_courier yes boolean True for door delivery; false for pickup-point delivery or an unknown service type. true
data.delivery.status no string | null "created"
data.delivery.track_number no string | null "CDEK-123456789"
data.delivery.pickup_point_id no string | null "SOFIA-01"
data.delivery.source_id no string | null "cdek-15"
data.delivery.tariff_code no integer:int64 | null 136
data.delivery.additional_services no object Values of additional CDEK services configured for the selected integration. Boolean true enables a code-only service; other values are sent as the CDEK parameter. {"TRYING_ON":true,"PART_DELIV":false,"PACKAGE_1":2}
data.delivery.label no string:uri | null "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf"
data.delivery.delivery_date no string:date | null "2026-07-16"
data.delivery.delivery_time_start no string:time | null "09:00:00Z"
data.delivery.delivery_time_end no string:time | null "18:00:00Z"
data.comments no object | null
data.comments.delivery_service_text no string | null "Call before delivery"
data.comments.inner_text no string | null "VIP customer"

Request examples

default

{
  "data": {
    "send_date": "2026-07-16"
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes Order Outbound warehouse order. Optional relation fields are present when loaded by the controller or requested through include.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.external_id no string | null "ORD-100245"
data.domain_id no integer:int64 | null min: 1 3
data.type_id no integer:int64 | null 1
data.shop_id no integer:int64 | null min: 1 12
data.warehouse_id no integer:int64 | null min: 1 42
data.status_id no integer:int64 | null Order status ID. The current backend stores status records in the database; values are not modeled as a closed enum in the public contract. 20
data.status no object | null
data.status.id yes integer:int64 20
data.status.name yes string "Created"
data.status.color no string | null "#2457c5"
data.status.background_color no string | null "#eaf0ff"
data.order_date no string:date | null "2026-07-14"
data.send_date no string | null Stored order send date, potentially supplied by import, manual input or integration processing. It may be a date or date-time string; it is not a universal physical carrier-handover timestamp. "2026-07-15 20:25:08"
data.source_id no integer:int64 | null min: 1 1
data.customer_type no integer:int64 | null 1
data.is_cod no boolean true
data.amounts no OrderAmounts
data.amounts.shipping_price no number:float | null 8.6
data.amounts.shipping_cost no number:float | null 0
data.amounts.sum no number:float | null 39.98
data.amounts.cod_sum no number:float | null 48.58
data.company_id no integer:int64 | null min: 1 7
data.marking yes OrderMarking Marking data expected for products in the order.
data.marking.required yes boolean Whether the order contains products that require marking data after picking. true
data.marking.types yes array<string> Marking types required by products in the order. Currently chestny_znak; the list may gain values such as jewel_uin and imei.
data.marking.types[] no string "chestny_znak"
data.contact no object | null
data.contact.first_name no string | null "Ivan"
data.contact.middle_name no string | null "Ivanovich"
data.contact.last_name no string | null "Petrov"
data.contact.phone no string | null "+359888123456"
data.contact.email no string:email | null "customer@example.com"
data.contact.country_id no integer:int64 | null min: 1 100
data.contact.city_id no integer:int64 | null min: 1 200
data.contact.postcode no string | null "1000"
data.contact.latitude no number:float | null min: -90
max: 90
42.6977
data.contact.longitude no number:float | null min: -180
max: 180
23.3219
data.contact.full_address no string | null "1 Vitosha Boulevard, Sofia"
data.delivery no object | null
data.delivery.service_id no integer:int64 | null min: 1 1
data.delivery.delivery_type yes enum | null enum: door, pickup_point Normalized delivery channel derived from the configured delivery service. Null when the service type is unknown. "door"
data.delivery.is_courier yes boolean True for door delivery; false for pickup-point delivery or an unknown service type. true
data.delivery.status no string | null "created"
data.delivery.track_number no string | null "CDEK-123456789"
data.delivery.pickup_point_id no string | null "SOFIA-01"
data.delivery.source_id no string | null "cdek-15"
data.delivery.tariff_code no integer:int64 | null 136
data.delivery.additional_services no object Values of additional CDEK services configured for the selected integration. Boolean true enables a code-only service; other values are sent as the CDEK parameter. {"TRYING_ON":true,"PART_DELIV":false,"PACKAGE_1":2}
data.delivery.label no string:uri | null "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf"
data.delivery.delivery_date no string:date | null "2026-07-16"
data.delivery.delivery_time_start no string:time | null "09:00:00Z"
data.delivery.delivery_time_end no string:time | null "18:00:00Z"
data.comments no object | null
data.comments.delivery_service_text no string | null "Call before delivery"
data.comments.inner_text no string | null "VIP customer"
data.offers no array<OrderLineEmbedded>
data.offers[] no OrderLineEmbedded Scalar lot fields use the actual lot only when the full line is picked from one lot; partial/multiple actual lots leave scalars null. Before picking they retain the requested lot. Requested constraints are always available in requested_lot.
data.offers[].id yes integer:int64 readOnly min: 1 7001
data.offers[].product_id no integer:int64 | null min: 1 1201
data.offers[].quantity no number:float | null min: 0 2
data.offers[].estimated_price no number:float | null 19.5
data.offers[].price no number:float | null 19.99
data.offers[].expiration_date no string:date | null "2027-01-15"
data.offers[].batch no string | null maxLength: 15 "LOT-2026"
data.offers[].operation_user_id no integer:int64 | null min: 1 9
data.offers[].product no object | null
data.offers[].product.id yes integer:int64 readOnly min: 1 1201
data.offers[].product.name yes string "Coffee 250g"
data.offers[].product.external_id no string | null "EXT-10045"
data.offers[].reservation no OrderReservationLine Reservation totals for one order line.
data.offers[].reservation.required_qty yes number:float 3
data.offers[].reservation.reserved_qty yes number:float 1
data.offers[].reservation.unreserved_qty yes number:float 2
data.offers[].reservation.missing_qty yes number:float 2
data.offers[].reservation.status yes enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.offers[].reservation_items no array<OrderReservationItem>
data.offers[].reservation_items[] no OrderReservationItem Physical product or expanded component used to explain a reservation shortage.
data.offers[].reservation_items[].offer_id yes integer:int64 min: 1 1201
data.offers[].reservation_items[].offer_name no string | null "Coffee 250g"
data.offers[].reservation_items[].offer_article no string | null "ART-001245"
data.offers[].reservation_items[].offer_sku no string | null "SKU-001245"
data.offers[].reservation_items[].required_qty yes number:float 3
data.offers[].reservation_items[].reserved_qty yes number:float 1
data.offers[].reservation_items[].unreserved_qty yes number:float 2
data.offers[].reservation_items[].missing_qty yes number:float 2
data.offers[].reservation_items[].status yes enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.offers[].reservation_items[].source_order_offer_ids yes array<integer:int64>
data.offers[].reservation_items[].source_order_offer_ids[] no integer:int64 min: 1 7001
data.offers[].reservation_items[].source yes enum enum: order_offer, component, quant, composite_quant "order_offer"
data.offers[].reservation_items[].expanded_from_composite yes boolean false
data.offers[].reservation_items[].expanded_from_quant yes boolean false
data.offers[].reservation_items[].quant_base_offer_id no integer:int64 | null min: 1 1201
data.offers[].reservation_items[].quant_base_multiplicity no number:float | null 6
data.offers[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].production_date no string:date | null "2026-01-15"
data.offers[].requested_lot no WarehouseLot
data.offers[].requested_lot.batch yes string | null "LOT-2026"
data.offers[].requested_lot.production_date yes string:date | null "2026-01-15"
data.offers[].requested_lot.expiration_date yes string:date | null "2027-01-15"
data.offers[].picked_quantity no number:float min: 0 2
data.offers[].fulfillment_lots no array<OrderFulfillmentLot> Current active placed warehouse rows for this exact order line and product. Existing orders are included where these rows survive. This is a current picking snapshot, not a historical shipment event.
data.offers[].fulfillment_lots[] no OrderFulfillmentLot
data.offers[].fulfillment_lots[].batch yes string | null "LOT-2026"
data.offers[].fulfillment_lots[].production_date yes string:date | null "2026-01-15"
data.offers[].fulfillment_lots[].expiration_date yes string:date | null "2027-01-15"
data.offers[].fulfillment_lots[].warehouse_id yes integer:int64 min: 1 734
data.offers[].fulfillment_lots[].product_id yes integer:int64 min: 1 1201
data.offers[].fulfillment_lots[].quantity yes number:float min: 0 2
data.reservation no OrderReservation Reservation readiness and shortages calculated for the order.
data.reservation.ready yes boolean false
data.reservation.reason yes string | null "Not all order products are reserved."
data.reservation.expected_total yes number:float 3
data.reservation.reserved_total yes number:float 1
data.reservation.unreserved_total yes number:float 2
data.reservation.missing_total yes number:float 2
data.reservation.missing_items yes array<OrderReservationItem>
data.reservation.missing_items[] no OrderReservationItem Physical product or expanded component used to explain a reservation shortage.
data.reservation.missing_items[].offer_id yes integer:int64 min: 1 1201
data.reservation.missing_items[].offer_name no string | null "Coffee 250g"
data.reservation.missing_items[].offer_article no string | null "ART-001245"
data.reservation.missing_items[].offer_sku no string | null "SKU-001245"
data.reservation.missing_items[].required_qty yes number:float 3
data.reservation.missing_items[].reserved_qty yes number:float 1
data.reservation.missing_items[].unreserved_qty yes number:float 2
data.reservation.missing_items[].missing_qty yes number:float 2
data.reservation.missing_items[].status yes enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.reservation.missing_items[].source_order_offer_ids yes array<integer:int64>
data.reservation.missing_items[].source_order_offer_ids[] no integer:int64 min: 1 7001
data.reservation.missing_items[].source yes enum enum: order_offer, component, quant, composite_quant "order_offer"
data.reservation.missing_items[].expanded_from_composite yes boolean false
data.reservation.missing_items[].expanded_from_quant yes boolean false
data.reservation.missing_items[].quant_base_offer_id no integer:int64 | null min: 1 1201
data.reservation.missing_items[].quant_base_multiplicity no number:float | null 6
data.reservation.error yes boolean false
data.consumables no array<OrderConsumable>
data.consumables[] no OrderConsumable Current consumable line, not an append-only consumption event. Unplaced usage creates a commitment but does not decrease physical stockTotal; do not treat that stockTotal as remaining packaging inventory.
data.consumables[].id yes integer:int64 min: 1 301
data.consumables[].order_id yes integer:int64 min: 1 8101
data.consumables[].product_id yes integer:int64 min: 1 1202
data.consumables[].warehouse_id yes integer:int64 | null min: 1 734
data.consumables[].place_id yes integer:int64 | null min: 1 501
data.consumables[].quantity yes number:float 1
data.consumables[].stock_location_mode yes enum enum: placed, unplaced "unplaced"
data.consumables[].created_at yes string:date-time | null "2026-07-14T10:30:00Z"
data.consumables[].updated_at yes string:date-time | null "2026-07-14T10:30:00Z"
data.status_history no array<OrderStatusHistoryEvent> Present only on GET list/detail with include=status_history. Ordered chronologically, retains repeat status cycles and combines surviving audit and action-log entries. Missing history returns an empty array.
data.status_history[] no OrderStatusHistoryEvent Recorded WMS status transition or explicitly inferred initial status. It does not independently confirm physical carrier handover.
data.status_history[].status_id yes integer:int64 130
data.status_history[].previous_status_id yes integer:int64 | null 110
data.status_history[].changed_at yes string:date-time Time of the WMS status transition in ISO 8601 with an explicit timezone offset. "2026-07-14T12:00:00+03:00"
data.status_history[].source yes enum enum: audit, action_log, inferred "action_log"
data.status_history[].inferred yes boolean True only for a reconstructed initial status at order creation; this is not a separately recorded transition. false
data.status_history_meta no OrderStatusHistoryMeta
data.status_history_meta.available yes boolean At least one event is available. This does not guarantee complete historical coverage. true
data.status_history_meta.current_status_matches_history yes boolean The last available event has the current order status. False also when history is empty. true
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 8101,
    "external_id": "ORD-100245",
    "domain_id": 3,
    "type_id": 1,
    "shop_id": 12,
    "warehouse_id": 42,
    "status_id": 20,
    "status": {
      "id": 20,
      "name": "Created",
      "color": "#2457c5",
      "background_color": "#eaf0ff"
    },
    "order_date": "2026-07-14",
    "send_date": "2026-07-15",
    "source_id": 1,
    "customer_type": 1,
    "is_cod": true,
    "amounts": {
      "shipping_price": 8.6,
      "shipping_cost": 0,
      "sum": 39.98,
      "cod_sum": 48.58
    },
    "company_id": 7,
    "marking": {
      "required": true,
      "types": [
        "chestny_znak"
      ]
    },
    "contact": {
      "first_name": "Ivan",
      "middle_name": null,
      "last_name": "Petrov",
      "phone": "+359888123456",
      "email": "customer@example.com",
      "country_id": 100,
      "city_id": 200,
      "postcode": "1000",
      "latitude": 42.6977,
      "longitude": 23.3219,
      "full_address": "1 Vitosha Boulevard, Sofia"
    },
    "delivery": {
      "service_id": 1,
      "delivery_type": "door",
      "is_courier": true,
      "status": "created",
      "track_number": "CDEK-123456789",
      "source_id": "cdek-15",
      "tariff_code": 136,
      "label": "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf",
      "delivery_date": "2026-07-16",
      "delivery_time_start": "09:00:00Z",
      "delivery_time_end": "18:00:00Z"
    },
    "comments": {
      "delivery_service_text": "Call before delivery",
      "inner_text": "VIP customer"
    },
    "offers": [
      {
        "id": 7001,
        "product_id": 1201,
        "quantity": 2,
        "estimated_price": 19.5,
        "price": 19.99,
        "expiration_date": "2027-01-15",
        "batch": "LOT-2026",
        "operation_user_id": 9,
        "product": {
          "id": 1201,
          "name": "Coffee 250g",
          "external_id": "EXT-10045"
        },
        "created_at": "2026-07-14T09:00:00Z",
        "updated_at": "2026-07-14T09:30:00Z"
      }
    ],
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
DELETE /api/v2/orders/{id}

Delete order

operationIddeleteOrders
TagOrders
SecuritybearerAuth

Deletes the resource when the authenticated account has permission and the current lifecycle state allows deletion. If deletion is blocked by related records or document state, the API returns a validation error.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request DELETE "${NWMS_BASE_URL}/api/v2/orders/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}"

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Order ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes object | null
meta yes object
meta.api_version yes enum enum: v2 "v2"
meta.deleted yes boolean true
meta.id yes integer:int64 min: 1 1001

Response examples

success

{
  "data": null,
  "meta": {
    "api_version": "v2",
    "deleted": true,
    "id": 1001
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
GET /api/v2/orders/{id}/integration-events

Export Ozon and Wildberries interaction history for one order

operationIdgetOrderIntegrationEvents
TagOrders
SecuritybearerAuth

Streams one JSON document with all retained order-related records, without the UI history limit.
Includes new HTTP attempts, legacy diagnostics and WB inbox versions, latest operation states and the current order payload.
This is not a paginated response. Dates are UTC. Read the complete document and verify export_complete.
coverage.complete is false because historical data may be missing, truncated, masked or expired.
Credentials, contact and marking data are masked. Binary responses contain metadata and SHA256 only. JSON and text responses are not truncated.
Shared bodies are omitted unless all referenced orders are visible. Unknown membership is fail-closed.
Application-internal and external marketplace activity without a captured HTTP call is not guaranteed.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/orders/1001/integration-events" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Order ID. 1001
download query no boolean Return the same JSON as a downloadable attachment.

Request body

No request body.

Responses

200 Streamed history. Check export_complete even when HTTP status is 200.

Streamed history. Check export_complete even when HTTP status is 200.

Field Required Type Flags Constraints Description Example
meta yes object Schema version, UTC timezone, order/integration identifiers and coverage limitations.
events yes array<object>
events[] no object Source-qualified id, source, provider, account_id, at, HTTP details or snapshot, masked request/response and omission reason.
event_count yes integer min: 0
export_complete yes boolean All retained readable sources were exported; not a guarantee of historical coverage.
export_error yes string | null journal_read_failed if streaming was interrupted by a storage/read error.

401 Authentication required

Authentication required.

No response body.

403 Forbidden

Order/log access denied.

No response body.

404 Not found

Order not visible or no Ozon/Wildberries link exists.

No response body.

POST /api/v2/orders/{id}/lines

Create order

operationIdcreateOrdersLines
TagOrders
SecuritybearerAuth

Adds one or more product lines to an editable order. Products are resolved by product_id or product_external_id within the caller visible scope.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/orders/1001/lines" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Order ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

AddOrderLinesRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.lines yes array<OrderLineCreatePayload> minItems: 1
data.lines[] no OrderLineCreatePayload Line payload for /orders/{id}/lines. Backend validation requires product_id for this endpoint.
data.lines[].product_id yes integer:int64 min: 1 1201
data.lines[].quantity yes number:float min: 0.01 2
data.lines[].estimated_price no number:float | null 19.5
data.lines[].price no number:float | null 19.99
data.lines[].expiration_date no string:date | null "2027-01-15"
data.lines[].batch no string | null maxLength: 15 "LOT-2026"
data.lines[].operation_user_id no integer:int64 | null min: 1 9

Request examples

default

{
  "data": {
    "lines": [
      {
        "product_id": 1201,
        "quantity": 2,
        "price": 19.99
      }
    ]
  }
}

Responses

201 Created.

Created.

Field Required Type Flags Constraints Description Example
data yes array<OrderLine>
data[] no OrderLine Scalar lot fields use the actual lot only when the full line is picked from one lot; partial/multiple actual lots leave scalars null. Before picking they retain the requested lot. Requested constraints are always available in requested_lot.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].order_id no integer:int64 | null min: 1 8101
data[].product_id no integer:int64 | null min: 1 1201
data[].quantity no number:float | null min: 0 2
data[].estimated_price no number:float | null 19.5
data[].price no number:float | null 19.99
data[].expiration_date no string:date | null "2027-01-15"
data[].batch no string | null maxLength: 15 "LOT-2026"
data[].operation_user_id no integer:int64 | null min: 1 9
data[].product no object | null
data[].product.id yes integer:int64 readOnly min: 1 1201
data[].product.name yes string "Coffee 250g"
data[].product.external_id no string | null "EXT-10045"
data[].production_date no string:date | null "2026-01-15"
data[].requested_lot no WarehouseLot
data[].requested_lot.batch yes string | null "LOT-2026"
data[].requested_lot.production_date yes string:date | null "2026-01-15"
data[].requested_lot.expiration_date yes string:date | null "2027-01-15"
data[].picked_quantity no number:float min: 0 2
data[].fulfillment_lots no array<OrderFulfillmentLot> Current active placed warehouse rows for this exact order line and product. Existing orders are included where these rows survive. This is a current picking snapshot, not a historical shipment event.
data[].fulfillment_lots[] no OrderFulfillmentLot
data[].fulfillment_lots[].batch yes string | null "LOT-2026"
data[].fulfillment_lots[].production_date yes string:date | null "2026-01-15"
data[].fulfillment_lots[].expiration_date yes string:date | null "2027-01-15"
data[].fulfillment_lots[].warehouse_id yes integer:int64 min: 1 734
data[].fulfillment_lots[].product_id yes integer:int64 min: 1 1201
data[].fulfillment_lots[].quantity yes number:float min: 0 2
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": [
    {
      "id": 7001,
      "order_id": 8101,
      "product_id": 1201,
      "quantity": 2,
      "estimated_price": 19.5,
      "price": 19.99,
      "expiration_date": "2027-01-15",
      "batch": "LOT-2026",
      "operation_user_id": 9,
      "product": {
        "id": 1201,
        "name": "Coffee 250g",
        "external_id": "EXT-10045"
      },
      "created_at": "2026-07-14T09:00:00Z",
      "updated_at": "2026-07-14T09:30:00Z"
    }
  ],
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
PUT /api/v2/orders/{id}/lines/{lineId}

Update order

operationIdreplaceOrdersLines
TagOrders
SecuritybearerAuth

Update order. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/orders/1001/lines/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Order ID. 1001
lineId path yes integer:int64 min: 1 Document line ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

ReplaceOrderLineRequest required

Field Required Type Flags Constraints Description Example
data yes OrderLineReplacePayload Legacy PUT line update payload. Current backend treats PUT as partial update.
data.quantity no number:float | null min: 0.01 2
data.estimated_price no number:float | null 19.5
data.price no number:float | null 19.99
data.expiration_date no string:date | null "2027-01-15"
data.batch no string | null maxLength: 15 "LOT-2026"
data.operation_user_id no integer:int64 | null min: 1 9

Request examples

default

{
  "data": {
    "quantity": 3,
    "batch": "LOT-2026"
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes OrderLine Scalar lot fields use the actual lot only when the full line is picked from one lot; partial/multiple actual lots leave scalars null. Before picking they retain the requested lot. Requested constraints are always available in requested_lot.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.order_id no integer:int64 | null min: 1 8101
data.product_id no integer:int64 | null min: 1 1201
data.quantity no number:float | null min: 0 2
data.estimated_price no number:float | null 19.5
data.price no number:float | null 19.99
data.expiration_date no string:date | null "2027-01-15"
data.batch no string | null maxLength: 15 "LOT-2026"
data.operation_user_id no integer:int64 | null min: 1 9
data.product no object | null
data.product.id yes integer:int64 readOnly min: 1 1201
data.product.name yes string "Coffee 250g"
data.product.external_id no string | null "EXT-10045"
data.production_date no string:date | null "2026-01-15"
data.requested_lot no WarehouseLot
data.requested_lot.batch yes string | null "LOT-2026"
data.requested_lot.production_date yes string:date | null "2026-01-15"
data.requested_lot.expiration_date yes string:date | null "2027-01-15"
data.picked_quantity no number:float min: 0 2
data.fulfillment_lots no array<OrderFulfillmentLot> Current active placed warehouse rows for this exact order line and product. Existing orders are included where these rows survive. This is a current picking snapshot, not a historical shipment event.
data.fulfillment_lots[] no OrderFulfillmentLot
data.fulfillment_lots[].batch yes string | null "LOT-2026"
data.fulfillment_lots[].production_date yes string:date | null "2026-01-15"
data.fulfillment_lots[].expiration_date yes string:date | null "2027-01-15"
data.fulfillment_lots[].warehouse_id yes integer:int64 min: 1 734
data.fulfillment_lots[].product_id yes integer:int64 min: 1 1201
data.fulfillment_lots[].quantity yes number:float min: 0 2
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 7001,
    "order_id": 8101,
    "product_id": 1201,
    "quantity": 2,
    "estimated_price": 19.5,
    "price": 19.99,
    "expiration_date": "2027-01-15",
    "batch": "LOT-2026",
    "operation_user_id": 9,
    "product": {
      "id": 1201,
      "name": "Coffee 250g",
      "external_id": "EXT-10045"
    },
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
PATCH /api/v2/orders/{id}/lines/{lineId}

Update order

operationIdpatchOrdersLines
TagOrders
SecuritybearerAuth

Update order. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request PATCH "${NWMS_BASE_URL}/api/v2/orders/1001/lines/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Order ID. 1001
lineId path yes integer:int64 min: 1 Document line ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

PatchOrderLineRequest required

Field Required Type Flags Constraints Description Example
data yes OrderLinePatchPayload Editable order line fields. The line ID is taken from the path and must not be repeated in the body.
data.quantity no number:float | null min: 0.01 2
data.estimated_price no number:float | null 19.5
data.price no number:float | null 19.99
data.expiration_date no string:date | null "2027-01-15"
data.batch no string | null maxLength: 15 "LOT-2026"
data.operation_user_id no integer:int64 | null min: 1 9

Request examples

default

{
  "data": {
    "quantity": 3
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes OrderLine Scalar lot fields use the actual lot only when the full line is picked from one lot; partial/multiple actual lots leave scalars null. Before picking they retain the requested lot. Requested constraints are always available in requested_lot.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.order_id no integer:int64 | null min: 1 8101
data.product_id no integer:int64 | null min: 1 1201
data.quantity no number:float | null min: 0 2
data.estimated_price no number:float | null 19.5
data.price no number:float | null 19.99
data.expiration_date no string:date | null "2027-01-15"
data.batch no string | null maxLength: 15 "LOT-2026"
data.operation_user_id no integer:int64 | null min: 1 9
data.product no object | null
data.product.id yes integer:int64 readOnly min: 1 1201
data.product.name yes string "Coffee 250g"
data.product.external_id no string | null "EXT-10045"
data.production_date no string:date | null "2026-01-15"
data.requested_lot no WarehouseLot
data.requested_lot.batch yes string | null "LOT-2026"
data.requested_lot.production_date yes string:date | null "2026-01-15"
data.requested_lot.expiration_date yes string:date | null "2027-01-15"
data.picked_quantity no number:float min: 0 2
data.fulfillment_lots no array<OrderFulfillmentLot> Current active placed warehouse rows for this exact order line and product. Existing orders are included where these rows survive. This is a current picking snapshot, not a historical shipment event.
data.fulfillment_lots[] no OrderFulfillmentLot
data.fulfillment_lots[].batch yes string | null "LOT-2026"
data.fulfillment_lots[].production_date yes string:date | null "2026-01-15"
data.fulfillment_lots[].expiration_date yes string:date | null "2027-01-15"
data.fulfillment_lots[].warehouse_id yes integer:int64 min: 1 734
data.fulfillment_lots[].product_id yes integer:int64 min: 1 1201
data.fulfillment_lots[].quantity yes number:float min: 0 2
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 7001,
    "order_id": 8101,
    "product_id": 1201,
    "quantity": 2,
    "estimated_price": 19.5,
    "price": 19.99,
    "expiration_date": "2027-01-15",
    "batch": "LOT-2026",
    "operation_user_id": 9,
    "product": {
      "id": 1201,
      "name": "Coffee 250g",
      "external_id": "EXT-10045"
    },
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
DELETE /api/v2/orders/{id}/lines/{lineId}

Delete order

operationIddeleteOrdersLines
TagOrders
SecuritybearerAuth

Deletes the resource when the authenticated account has permission and the current lifecycle state allows deletion. If deletion is blocked by related records or document state, the API returns a validation error.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request DELETE "${NWMS_BASE_URL}/api/v2/orders/1001/lines/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}"

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Order ID. 1001
lineId path yes integer:int64 min: 1 Document line ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes object | null
meta yes object
meta.api_version yes enum enum: v2 "v2"
meta.deleted yes boolean true
meta.id yes integer:int64 min: 1 1001

Response examples

success

{
  "data": null,
  "meta": {
    "api_version": "v2",
    "deleted": true,
    "id": 1001
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
POST /api/v2/orders/{id}/offers deprecated

Create order

operationIdcreateOrdersOffers
TagOrders
SecuritybearerAuth

Compatibility alias for adding order lines. Prefer /lines in new integrations; behavior and validation are identical.
This /offers route is a compatibility alias for /lines; use the /lines route in new integrations.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/orders/1001/offers" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Order ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

AddOrderLinesRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.lines yes array<OrderLineCreatePayload> minItems: 1
data.lines[] no OrderLineCreatePayload Line payload for /orders/{id}/lines. Backend validation requires product_id for this endpoint.
data.lines[].product_id yes integer:int64 min: 1 1201
data.lines[].quantity yes number:float min: 0.01 2
data.lines[].estimated_price no number:float | null 19.5
data.lines[].price no number:float | null 19.99
data.lines[].expiration_date no string:date | null "2027-01-15"
data.lines[].batch no string | null maxLength: 15 "LOT-2026"
data.lines[].operation_user_id no integer:int64 | null min: 1 9

Request examples

default

{
  "data": {
    "lines": [
      {
        "product_id": 1201,
        "quantity": 2,
        "price": 19.99
      }
    ]
  }
}

Responses

201 Created.

Created.

Field Required Type Flags Constraints Description Example
data yes array<OrderLine>
data[] no OrderLine Scalar lot fields use the actual lot only when the full line is picked from one lot; partial/multiple actual lots leave scalars null. Before picking they retain the requested lot. Requested constraints are always available in requested_lot.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].order_id no integer:int64 | null min: 1 8101
data[].product_id no integer:int64 | null min: 1 1201
data[].quantity no number:float | null min: 0 2
data[].estimated_price no number:float | null 19.5
data[].price no number:float | null 19.99
data[].expiration_date no string:date | null "2027-01-15"
data[].batch no string | null maxLength: 15 "LOT-2026"
data[].operation_user_id no integer:int64 | null min: 1 9
data[].product no object | null
data[].product.id yes integer:int64 readOnly min: 1 1201
data[].product.name yes string "Coffee 250g"
data[].product.external_id no string | null "EXT-10045"
data[].production_date no string:date | null "2026-01-15"
data[].requested_lot no WarehouseLot
data[].requested_lot.batch yes string | null "LOT-2026"
data[].requested_lot.production_date yes string:date | null "2026-01-15"
data[].requested_lot.expiration_date yes string:date | null "2027-01-15"
data[].picked_quantity no number:float min: 0 2
data[].fulfillment_lots no array<OrderFulfillmentLot> Current active placed warehouse rows for this exact order line and product. Existing orders are included where these rows survive. This is a current picking snapshot, not a historical shipment event.
data[].fulfillment_lots[] no OrderFulfillmentLot
data[].fulfillment_lots[].batch yes string | null "LOT-2026"
data[].fulfillment_lots[].production_date yes string:date | null "2026-01-15"
data[].fulfillment_lots[].expiration_date yes string:date | null "2027-01-15"
data[].fulfillment_lots[].warehouse_id yes integer:int64 min: 1 734
data[].fulfillment_lots[].product_id yes integer:int64 min: 1 1201
data[].fulfillment_lots[].quantity yes number:float min: 0 2
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": [
    {
      "id": 7001,
      "order_id": 8101,
      "product_id": 1201,
      "quantity": 2,
      "estimated_price": 19.5,
      "price": 19.99,
      "expiration_date": "2027-01-15",
      "batch": "LOT-2026",
      "operation_user_id": 9,
      "product": {
        "id": 1201,
        "name": "Coffee 250g",
        "external_id": "EXT-10045"
      },
      "created_at": "2026-07-14T09:00:00Z",
      "updated_at": "2026-07-14T09:30:00Z"
    }
  ],
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
PUT /api/v2/orders/{id}/offers/{lineId} deprecated

Update order

operationIdreplaceOrdersOffers
TagOrders
SecuritybearerAuth

Update order. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
This /offers route is a compatibility alias for /lines; use the /lines route in new integrations.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/orders/1001/offers/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Order ID. 1001
lineId path yes integer:int64 min: 1 Document line ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

ReplaceOrderLineRequest required

Field Required Type Flags Constraints Description Example
data yes OrderLineReplacePayload Legacy PUT line update payload. Current backend treats PUT as partial update.
data.quantity no number:float | null min: 0.01 2
data.estimated_price no number:float | null 19.5
data.price no number:float | null 19.99
data.expiration_date no string:date | null "2027-01-15"
data.batch no string | null maxLength: 15 "LOT-2026"
data.operation_user_id no integer:int64 | null min: 1 9

Request examples

default

{
  "data": {
    "quantity": 3,
    "batch": "LOT-2026"
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes OrderLine Scalar lot fields use the actual lot only when the full line is picked from one lot; partial/multiple actual lots leave scalars null. Before picking they retain the requested lot. Requested constraints are always available in requested_lot.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.order_id no integer:int64 | null min: 1 8101
data.product_id no integer:int64 | null min: 1 1201
data.quantity no number:float | null min: 0 2
data.estimated_price no number:float | null 19.5
data.price no number:float | null 19.99
data.expiration_date no string:date | null "2027-01-15"
data.batch no string | null maxLength: 15 "LOT-2026"
data.operation_user_id no integer:int64 | null min: 1 9
data.product no object | null
data.product.id yes integer:int64 readOnly min: 1 1201
data.product.name yes string "Coffee 250g"
data.product.external_id no string | null "EXT-10045"
data.production_date no string:date | null "2026-01-15"
data.requested_lot no WarehouseLot
data.requested_lot.batch yes string | null "LOT-2026"
data.requested_lot.production_date yes string:date | null "2026-01-15"
data.requested_lot.expiration_date yes string:date | null "2027-01-15"
data.picked_quantity no number:float min: 0 2
data.fulfillment_lots no array<OrderFulfillmentLot> Current active placed warehouse rows for this exact order line and product. Existing orders are included where these rows survive. This is a current picking snapshot, not a historical shipment event.
data.fulfillment_lots[] no OrderFulfillmentLot
data.fulfillment_lots[].batch yes string | null "LOT-2026"
data.fulfillment_lots[].production_date yes string:date | null "2026-01-15"
data.fulfillment_lots[].expiration_date yes string:date | null "2027-01-15"
data.fulfillment_lots[].warehouse_id yes integer:int64 min: 1 734
data.fulfillment_lots[].product_id yes integer:int64 min: 1 1201
data.fulfillment_lots[].quantity yes number:float min: 0 2
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 7001,
    "order_id": 8101,
    "product_id": 1201,
    "quantity": 2,
    "estimated_price": 19.5,
    "price": 19.99,
    "expiration_date": "2027-01-15",
    "batch": "LOT-2026",
    "operation_user_id": 9,
    "product": {
      "id": 1201,
      "name": "Coffee 250g",
      "external_id": "EXT-10045"
    },
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
DELETE /api/v2/orders/{id}/offers/{lineId} deprecated

Delete order

operationIddeleteOrdersOffers
TagOrders
SecuritybearerAuth

Deletes the resource when the authenticated account has permission and the current lifecycle state allows deletion. If deletion is blocked by related records or document state, the API returns a validation error.
This /offers route is a compatibility alias for /lines; use the /lines route in new integrations.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request DELETE "${NWMS_BASE_URL}/api/v2/orders/1001/offers/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}"

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Order ID. 1001
lineId path yes integer:int64 min: 1 Document line ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes object | null
meta yes object
meta.api_version yes enum enum: v2 "v2"
meta.deleted yes boolean true
meta.id yes integer:int64 min: 1 1001

Response examples

success

{
  "data": null,
  "meta": {
    "api_version": "v2",
    "deleted": true,
    "id": 1001
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}

Products

GET /api/v2/products

List products

operationIdlistProducts
TagProducts
SecuritybearerAuth

Returns products visible to the authenticated account. Use documented query parameters for filtering, sorting, and pagination.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/products" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 250
Number of records per page. Default is 50; maximum is 250. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 50
sort query no string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, name, article, sku, price, created_at, updated_at, inventory_updated_at. Default: -id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. "-id"
id query no integer:int64 form true min: 1 Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. 1001
external_id query no string form true Filter by external_id using exact matching. The same filter may also be sent as filter[external_id] where supported by the Laravel query adapter. "EXT-10045"
shop_id query no integer:int64 form true min: 1 Filter by shop_id using exact matching. The same filter may also be sent as filter[shop_id] where supported by the Laravel query adapter. 12
status_id query no ProductStatusId form true Filter by status_id using exact matching. The same filter may also be sent as filter[status_id] where supported by the Laravel query adapter.
type_id query no integer:int64 form true min: 1 Filter by type_id using exact matching. The same filter may also be sent as filter[type_id] where supported by the Laravel query adapter. 1
package_kind query no string form true Filter by package_kind using exact matching. The same filter may also be sent as filter[package_kind] where supported by the Laravel query adapter. "unit"
parent_product_id query no integer:int64 form true min: 1 Filter by parent_product_id using exact matching. The same filter may also be sent as filter[parent_product_id] where supported by the Laravel query adapter. 1200
base_product_id query no integer:int64 form true min: 1 Filter by base_product_id using exact matching. The same filter may also be sent as filter[base_product_id] where supported by the Laravel query adapter. 1200
datamatrix_required query no boolean form true Filter by datamatrix_required using exact matching. The same filter may also be sent as filter[datamatrix_required] where supported by the Laravel query adapter. false
expiration_required query no boolean form true Filter by expiration_required using exact matching. The same filter may also be sent as filter[expiration_required] where supported by the Laravel query adapter. false
name query no string form true Filter by name using partial text matching. The same filter may also be sent as filter[name] where supported by the Laravel query adapter. "Coffee"
article query no string form true Filter by article using partial text matching. The same filter may also be sent as filter[article] where supported by the Laravel query adapter. "ART-001245"
sku query no string form true Filter by sku using partial text matching. The same filter may also be sent as filter[sku] where supported by the Laravel query adapter. "SKU-001245"
comment query no string form true Filter by comment using partial text matching. The same filter may also be sent as filter[comment] where supported by the Laravel query adapter. "Priority"
created_at_from query no string:date form true Lower inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_from] where supported by the Laravel query adapter. "2026-07-14"
created_at_to query no string:date form true Upper inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_to] where supported by the Laravel query adapter. "2026-07-14"
updated_at_from query no string:date form true Lower inclusive date boundary for updated_at. The same filter may also be sent as filter[updated_at_from] where supported by the Laravel query adapter. "2026-07-14"
updated_at_to query no string:date form true Upper inclusive date boundary for updated_at. The same filter may also be sent as filter[updated_at_to] where supported by the Laravel query adapter. "2026-07-14"
inventory_updated_at_from query no string:date form true Lower inclusive date boundary for inventory_updated_at. The same filter may also be sent as filter[inventory_updated_at_from] where supported by the Laravel query adapter. "2026-07-14"
inventory_updated_at_to query no string:date form true Upper inclusive date boundary for inventory_updated_at. The same filter may also be sent as filter[inventory_updated_at_to] where supported by the Laravel query adapter. "2026-07-14"
price_from query no number:float form true Lower inclusive numeric boundary for price. The same filter may also be sent as filter[price_from] where supported by the Laravel query adapter. 19.99
price_to query no number:float form true Upper inclusive numeric boundary for price. The same filter may also be sent as filter[price_to] where supported by the Laravel query adapter. 19.99
estimated_price_from query no number:float form true Lower inclusive numeric boundary for estimated_price. The same filter may also be sent as filter[estimated_price_from] where supported by the Laravel query adapter. 19.99
estimated_price_to query no number:float form true Upper inclusive numeric boundary for estimated_price. The same filter may also be sent as filter[estimated_price_to] where supported by the Laravel query adapter. 19.99

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<Product>
data[] no Product Product catalog item exposed by API v2. Product barcodes identify a product or package type and are not unique SSCC values. Use /api/v2/closed-boxes to read individual sealed boxes and their current box balance.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].external_id no string | null "EXT-10045"
data[].shop_id no integer:int64 | null min: 1 12
data[].domain_id no integer:int64 | null min: 1 3
data[].status_id no integer:int64 | null 1
data[].type_id no integer:int64 | null 1
data[].name yes string "Coffee 250g"
data[].article no string | null "ART-001245"
data[].sku no string | null "SKU-001245"
data[].price no number:float | null 19.99
data[].estimated_price no number:float | null 21.5
data[].image_url no string:uri | null "https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg"
data[].dimensions no Dimensions
data[].dimensions.x no number:float | null min: 0 105
data[].dimensions.y no number:float | null min: 0 200
data[].dimensions.z no number:float | null min: 0 32
data[].dimensions.unit yes enum enum: mm "mm"
data[].weight no Weight
data[].weight.value no number:float | null min: 0 250
data[].weight.unit yes enum enum: g "g"
data[].datamatrix_required yes boolean false
data[].expiration_required yes boolean true
data[].comment no string | null "Keep dry"
data[].description no string | null "Ground coffee package"
data[].inventory_updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].barcodes no array<ProductBarcode>
data[].barcodes[] no ProductBarcode
data[].barcodes[].barcode yes string minLength: 1
maxLength: 64
"4601234567890"
data[].barcodes[].is_main yes boolean true
data[].stocks no ProductStocks
data[].stocks.available_by_warehouse no object Map keyed by warehouse ID. Values are quantities. {"42":18.0,"43":3.0}
data[].stocks.physical no array<ProductStockSummary> Physical stock rows for the product itself.
data[].stocks.physical[] no ProductStockSummary Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock.
data[].stocks.physical[].warehouse_id yes integer:int64 min: 1 42
data[].stocks.physical[].warehouse_name yes string | null "Warehouse Sofia"
data[].stocks.physical[].stockTotal yes number:float 24.0
data[].stocks.physical[].stockReserved yes number:float 6.0
data[].stocks.physical[].stockAvailable yes number:float 18.0
data[].stocks.aggregate no array<ProductStockSummary> Aggregated base-unit stock rows for the product and its descendant quants.
data[].stocks.aggregate[] no ProductStockSummary Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock.
data[].stocks.aggregate[].warehouse_id yes integer:int64 min: 1 42
data[].stocks.aggregate[].warehouse_name yes string | null "Warehouse Sofia"
data[].stocks.aggregate[].stockTotal yes number:float 24.0
data[].stocks.aggregate[].stockReserved yes number:float 6.0
data[].stocks.aggregate[].stockAvailable yes number:float 18.0
data[].package no object | null
data[].package.kind no string | null "unit"
data[].package.parent_product_id no integer:int64 | null min: 1 1201
data[].package.base_product_id no integer:int64 | null min: 1 1200
data[].package.multiplicity no number:float | null min: 0 6
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "id": 1201,
      "external_id": "EXT-10045",
      "shop_id": 12,
      "domain_id": 3,
      "status_id": 1,
      "type_id": 1,
      "name": "Coffee 250g",
      "article": "ART-001245",
      "sku": "SKU-001245",
      "price": 19.99,
      "estimated_price": 21.5,
      "image_url": "https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg",
      "dimensions": {
        "x": 105,
        "y": 200,
        "z": 32,
        "unit": "mm"
      },
      "weight": {
        "value": 250,
        "unit": "g"
      },
      "datamatrix_required": false,
      "expiration_required": true,
      "comment": "Keep dry",
      "description": "Ground coffee package",
      "inventory_updated_at": "2026-07-14T08:30:00Z",
      "barcodes": [
        {
          "barcode": "4601234567890",
          "is_main": true
        }
      ],
      "stocks": {
        "available_by_warehouse": {
          "42": 18
        },
        "physical": [
          {
            "warehouse_id": 42,
            "warehouse_name": "Warehouse Sofia",
            "stockTotal": 24,
            "stockReserved": 6,
            "stockAvailable": 18
          }
        ],
        "aggregate": [
          {
            "warehouse_id": 42,
            "warehouse_name": "Warehouse Sofia",
            "stockTotal": 30,
            "stockReserved": 7,
            "stockAvailable": 23
          }
        ]
      },
      "package": {
        "kind": "unit",
        "parent_product_id": null,
        "base_product_id": null,
        "multiplicity": null
      },
      "created_at": "2026-07-14T09:00:00Z",
      "updated_at": "2026-07-14T09:30:00Z"
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/products?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/products?page=2",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/products?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "https://betawms.ffcdek.ru/api/v2/products",
    "per_page": 50,
    "to": 50,
    "total": 73
  }
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
POST /api/v2/products

Create product

operationIdcreateProducts
TagProducts
SecuritybearerAuth

Creates one product or imports multiple products. Barcodes, dimensions, weights, marking requirements, expiration requirements, and package metadata are accepted in public v2 field names.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
Optional type_id accepts integer codes 1 ordinary, 2 composite, 3 component, 4 consumable, 5 packaging. Omission preserves the existing/default type; explicit null, empty, fractional or unknown values are rejected. Types 2/3 require composites enabled in the shop and permission to manage composition, in addition to product create/update rights. Quant packaging and links, existing composition links and dependent warehouse documents can prevent a type transition. This field does not create or replace a composition. Product and component prices are independent. Each item commits separately: a later rule failure may leave earlier items applied. Read back affected products before retrying a failed bulk request.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/products" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

BulkCreateProductsRequest required

Field Required Type Flags Constraints Description Example
data yes CreateProductPayload
data yes array<CreateProductPayload> minItems: 1

Request examples

default

{
  "data": [
    {
      "external_id": "EXT-10045",
      "shop_id": 12,
      "name": "Coffee 250g",
      "barcodes": [
        {
          "barcode": "4601234567890",
          "is_main": true
        }
      ],
      "type_id": 3
    }
  ]
}

Responses

201 Created.

Created.

Field Required Type Flags Constraints Description Example
(root) no ProductMutationResponse Single-object product writes return ProductResponse; array product writes return ProductCollectionResponse in the same input order for successfully processed items.
data yes Product Product catalog item exposed by API v2. Product barcodes identify a product or package type and are not unique SSCC values. Use /api/v2/closed-boxes to read individual sealed boxes and their current box balance.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.external_id no string | null "EXT-10045"
data.shop_id no integer:int64 | null min: 1 12
data.domain_id no integer:int64 | null min: 1 3
data.status_id no integer:int64 | null 1
data.type_id no integer:int64 | null 1
data.name yes string "Coffee 250g"
data.article no string | null "ART-001245"
data.sku no string | null "SKU-001245"
data.price no number:float | null 19.99
data.estimated_price no number:float | null 21.5
data.image_url no string:uri | null "https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg"
data.dimensions no Dimensions
data.dimensions.x no number:float | null min: 0 105
data.dimensions.y no number:float | null min: 0 200
data.dimensions.z no number:float | null min: 0 32
data.dimensions.unit yes enum enum: mm "mm"
data.weight no Weight
data.weight.value no number:float | null min: 0 250
data.weight.unit yes enum enum: g "g"
data.datamatrix_required yes boolean false
data.expiration_required yes boolean true
data.comment no string | null "Keep dry"
data.description no string | null "Ground coffee package"
data.inventory_updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.barcodes no array<ProductBarcode>
data.barcodes[] no ProductBarcode
data.barcodes[].barcode yes string minLength: 1
maxLength: 64
"4601234567890"
data.barcodes[].is_main yes boolean true
data.stocks no ProductStocks
data.stocks.available_by_warehouse no object Map keyed by warehouse ID. Values are quantities. {"42":18.0,"43":3.0}
data.stocks.physical no array<ProductStockSummary> Physical stock rows for the product itself.
data.stocks.physical[] no ProductStockSummary Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock.
data.stocks.physical[].warehouse_id yes integer:int64 min: 1 42
data.stocks.physical[].warehouse_name yes string | null "Warehouse Sofia"
data.stocks.physical[].stockTotal yes number:float 24.0
data.stocks.physical[].stockReserved yes number:float 6.0
data.stocks.physical[].stockAvailable yes number:float 18.0
data.stocks.aggregate no array<ProductStockSummary> Aggregated base-unit stock rows for the product and its descendant quants.
data.stocks.aggregate[] no ProductStockSummary Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock.
data.stocks.aggregate[].warehouse_id yes integer:int64 min: 1 42
data.stocks.aggregate[].warehouse_name yes string | null "Warehouse Sofia"
data.stocks.aggregate[].stockTotal yes number:float 24.0
data.stocks.aggregate[].stockReserved yes number:float 6.0
data.stocks.aggregate[].stockAvailable yes number:float 18.0
data.package no object | null
data.package.kind no string | null "unit"
data.package.parent_product_id no integer:int64 | null min: 1 1201
data.package.base_product_id no integer:int64 | null min: 1 1200
data.package.multiplicity no number:float | null min: 0 6
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"
data yes array<Product>
data[] no Product Product catalog item exposed by API v2. Product barcodes identify a product or package type and are not unique SSCC values. Use /api/v2/closed-boxes to read individual sealed boxes and their current box balance.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].external_id no string | null "EXT-10045"
data[].shop_id no integer:int64 | null min: 1 12
data[].domain_id no integer:int64 | null min: 1 3
data[].status_id no integer:int64 | null 1
data[].type_id no integer:int64 | null 1
data[].name yes string "Coffee 250g"
data[].article no string | null "ART-001245"
data[].sku no string | null "SKU-001245"
data[].price no number:float | null 19.99
data[].estimated_price no number:float | null 21.5
data[].image_url no string:uri | null "https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg"
data[].dimensions no Dimensions
data[].dimensions.x no number:float | null min: 0 105
data[].dimensions.y no number:float | null min: 0 200
data[].dimensions.z no number:float | null min: 0 32
data[].dimensions.unit yes enum enum: mm "mm"
data[].weight no Weight
data[].weight.value no number:float | null min: 0 250
data[].weight.unit yes enum enum: g "g"
data[].datamatrix_required yes boolean false
data[].expiration_required yes boolean true
data[].comment no string | null "Keep dry"
data[].description no string | null "Ground coffee package"
data[].inventory_updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].barcodes no array<ProductBarcode>
data[].barcodes[] no ProductBarcode
data[].barcodes[].barcode yes string minLength: 1
maxLength: 64
"4601234567890"
data[].barcodes[].is_main yes boolean true
data[].stocks no ProductStocks
data[].stocks.available_by_warehouse no object Map keyed by warehouse ID. Values are quantities. {"42":18.0,"43":3.0}
data[].stocks.physical no array<ProductStockSummary> Physical stock rows for the product itself.
data[].stocks.physical[] no ProductStockSummary Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock.
data[].stocks.physical[].warehouse_id yes integer:int64 min: 1 42
data[].stocks.physical[].warehouse_name yes string | null "Warehouse Sofia"
data[].stocks.physical[].stockTotal yes number:float 24.0
data[].stocks.physical[].stockReserved yes number:float 6.0
data[].stocks.physical[].stockAvailable yes number:float 18.0
data[].stocks.aggregate no array<ProductStockSummary> Aggregated base-unit stock rows for the product and its descendant quants.
data[].stocks.aggregate[] no ProductStockSummary Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock.
data[].stocks.aggregate[].warehouse_id yes integer:int64 min: 1 42
data[].stocks.aggregate[].warehouse_name yes string | null "Warehouse Sofia"
data[].stocks.aggregate[].stockTotal yes number:float 24.0
data[].stocks.aggregate[].stockReserved yes number:float 6.0
data[].stocks.aggregate[].stockAvailable yes number:float 18.0
data[].package no object | null
data[].package.kind no string | null "unit"
data[].package.parent_product_id no integer:int64 | null min: 1 1201
data[].package.base_product_id no integer:int64 | null min: 1 1200
data[].package.multiplicity no number:float | null min: 0 6
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 1201,
    "external_id": "EXT-10045",
    "shop_id": 12,
    "domain_id": 3,
    "status_id": 1,
    "type_id": 1,
    "name": "Coffee 250g",
    "article": "ART-001245",
    "sku": "SKU-001245",
    "price": 19.99,
    "estimated_price": 21.5,
    "image_url": "https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg",
    "dimensions": {
      "x": 105,
      "y": 200,
      "z": 32,
      "unit": "mm"
    },
    "weight": {
      "value": 250,
      "unit": "g"
    },
    "datamatrix_required": false,
    "expiration_required": true,
    "comment": "Keep dry",
    "description": "Ground coffee package",
    "inventory_updated_at": "2026-07-14T08:30:00Z",
    "barcodes": [
      {
        "barcode": "4601234567890",
        "is_main": true
      }
    ],
    "stocks": {
      "available_by_warehouse": {
        "42": 18
      },
      "physical": [
        {
          "warehouse_id": 42,
          "warehouse_name": "Warehouse Sofia",
          "stockTotal": 24,
          "stockReserved": 6,
          "stockAvailable": 18
        }
      ],
      "aggregate": [
        {
          "warehouse_id": 42,
          "warehouse_name": "Warehouse Sofia",
          "stockTotal": 30,
          "stockReserved": 7,
          "stockAvailable": 23
        }
      ]
    },
    "package": {
      "kind": "unit",
      "parent_product_id": null,
      "base_product_id": null,
      "multiplicity": null
    },
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
PUT /api/v2/products

Update product

operationIdreplaceProducts
TagProducts
SecuritybearerAuth

Bulk updates products identified by id or by external_id plus shop_id. When barcodes are supplied, the barcode set is replaced according to existing product rules.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
Optional type_id accepts integer codes 1 ordinary, 2 composite, 3 component, 4 consumable, 5 packaging. Omission preserves the existing/default type; explicit null, empty, fractional or unknown values are rejected. Types 2/3 require composites enabled in the shop and permission to manage composition, in addition to product create/update rights. Quant packaging and links, existing composition links and dependent warehouse documents can prevent a type transition. This field does not create or replace a composition. Product and component prices are independent. Each item commits separately: a later rule failure may leave earlier items applied. Read back affected products before retrying a failed bulk request.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/products" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

BulkReplaceProductsRequest required

Field Required Type Flags Constraints Description Example
data yes ReplaceProductPayload
data yes array<ReplaceProductPayload> minItems: 1

Request examples

default

{
  "data": [
    {
      "id": 1201,
      "name": "Coffee 250g",
      "price": 19.99,
      "type_id": 3
    }
  ]
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
(root) no ProductMutationResponse Single-object product writes return ProductResponse; array product writes return ProductCollectionResponse in the same input order for successfully processed items.
data yes Product Product catalog item exposed by API v2. Product barcodes identify a product or package type and are not unique SSCC values. Use /api/v2/closed-boxes to read individual sealed boxes and their current box balance.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.external_id no string | null "EXT-10045"
data.shop_id no integer:int64 | null min: 1 12
data.domain_id no integer:int64 | null min: 1 3
data.status_id no integer:int64 | null 1
data.type_id no integer:int64 | null 1
data.name yes string "Coffee 250g"
data.article no string | null "ART-001245"
data.sku no string | null "SKU-001245"
data.price no number:float | null 19.99
data.estimated_price no number:float | null 21.5
data.image_url no string:uri | null "https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg"
data.dimensions no Dimensions
data.dimensions.x no number:float | null min: 0 105
data.dimensions.y no number:float | null min: 0 200
data.dimensions.z no number:float | null min: 0 32
data.dimensions.unit yes enum enum: mm "mm"
data.weight no Weight
data.weight.value no number:float | null min: 0 250
data.weight.unit yes enum enum: g "g"
data.datamatrix_required yes boolean false
data.expiration_required yes boolean true
data.comment no string | null "Keep dry"
data.description no string | null "Ground coffee package"
data.inventory_updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.barcodes no array<ProductBarcode>
data.barcodes[] no ProductBarcode
data.barcodes[].barcode yes string minLength: 1
maxLength: 64
"4601234567890"
data.barcodes[].is_main yes boolean true
data.stocks no ProductStocks
data.stocks.available_by_warehouse no object Map keyed by warehouse ID. Values are quantities. {"42":18.0,"43":3.0}
data.stocks.physical no array<ProductStockSummary> Physical stock rows for the product itself.
data.stocks.physical[] no ProductStockSummary Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock.
data.stocks.physical[].warehouse_id yes integer:int64 min: 1 42
data.stocks.physical[].warehouse_name yes string | null "Warehouse Sofia"
data.stocks.physical[].stockTotal yes number:float 24.0
data.stocks.physical[].stockReserved yes number:float 6.0
data.stocks.physical[].stockAvailable yes number:float 18.0
data.stocks.aggregate no array<ProductStockSummary> Aggregated base-unit stock rows for the product and its descendant quants.
data.stocks.aggregate[] no ProductStockSummary Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock.
data.stocks.aggregate[].warehouse_id yes integer:int64 min: 1 42
data.stocks.aggregate[].warehouse_name yes string | null "Warehouse Sofia"
data.stocks.aggregate[].stockTotal yes number:float 24.0
data.stocks.aggregate[].stockReserved yes number:float 6.0
data.stocks.aggregate[].stockAvailable yes number:float 18.0
data.package no object | null
data.package.kind no string | null "unit"
data.package.parent_product_id no integer:int64 | null min: 1 1201
data.package.base_product_id no integer:int64 | null min: 1 1200
data.package.multiplicity no number:float | null min: 0 6
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"
data yes array<Product>
data[] no Product Product catalog item exposed by API v2. Product barcodes identify a product or package type and are not unique SSCC values. Use /api/v2/closed-boxes to read individual sealed boxes and their current box balance.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].external_id no string | null "EXT-10045"
data[].shop_id no integer:int64 | null min: 1 12
data[].domain_id no integer:int64 | null min: 1 3
data[].status_id no integer:int64 | null 1
data[].type_id no integer:int64 | null 1
data[].name yes string "Coffee 250g"
data[].article no string | null "ART-001245"
data[].sku no string | null "SKU-001245"
data[].price no number:float | null 19.99
data[].estimated_price no number:float | null 21.5
data[].image_url no string:uri | null "https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg"
data[].dimensions no Dimensions
data[].dimensions.x no number:float | null min: 0 105
data[].dimensions.y no number:float | null min: 0 200
data[].dimensions.z no number:float | null min: 0 32
data[].dimensions.unit yes enum enum: mm "mm"
data[].weight no Weight
data[].weight.value no number:float | null min: 0 250
data[].weight.unit yes enum enum: g "g"
data[].datamatrix_required yes boolean false
data[].expiration_required yes boolean true
data[].comment no string | null "Keep dry"
data[].description no string | null "Ground coffee package"
data[].inventory_updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].barcodes no array<ProductBarcode>
data[].barcodes[] no ProductBarcode
data[].barcodes[].barcode yes string minLength: 1
maxLength: 64
"4601234567890"
data[].barcodes[].is_main yes boolean true
data[].stocks no ProductStocks
data[].stocks.available_by_warehouse no object Map keyed by warehouse ID. Values are quantities. {"42":18.0,"43":3.0}
data[].stocks.physical no array<ProductStockSummary> Physical stock rows for the product itself.
data[].stocks.physical[] no ProductStockSummary Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock.
data[].stocks.physical[].warehouse_id yes integer:int64 min: 1 42
data[].stocks.physical[].warehouse_name yes string | null "Warehouse Sofia"
data[].stocks.physical[].stockTotal yes number:float 24.0
data[].stocks.physical[].stockReserved yes number:float 6.0
data[].stocks.physical[].stockAvailable yes number:float 18.0
data[].stocks.aggregate no array<ProductStockSummary> Aggregated base-unit stock rows for the product and its descendant quants.
data[].stocks.aggregate[] no ProductStockSummary Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock.
data[].stocks.aggregate[].warehouse_id yes integer:int64 min: 1 42
data[].stocks.aggregate[].warehouse_name yes string | null "Warehouse Sofia"
data[].stocks.aggregate[].stockTotal yes number:float 24.0
data[].stocks.aggregate[].stockReserved yes number:float 6.0
data[].stocks.aggregate[].stockAvailable yes number:float 18.0
data[].package no object | null
data[].package.kind no string | null "unit"
data[].package.parent_product_id no integer:int64 | null min: 1 1201
data[].package.base_product_id no integer:int64 | null min: 1 1200
data[].package.multiplicity no number:float | null min: 0 6
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 1201,
    "external_id": "EXT-10045",
    "shop_id": 12,
    "domain_id": 3,
    "status_id": 1,
    "type_id": 1,
    "name": "Coffee 250g",
    "article": "ART-001245",
    "sku": "SKU-001245",
    "price": 19.99,
    "estimated_price": 21.5,
    "image_url": "https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg",
    "dimensions": {
      "x": 105,
      "y": 200,
      "z": 32,
      "unit": "mm"
    },
    "weight": {
      "value": 250,
      "unit": "g"
    },
    "datamatrix_required": false,
    "expiration_required": true,
    "comment": "Keep dry",
    "description": "Ground coffee package",
    "inventory_updated_at": "2026-07-14T08:30:00Z",
    "barcodes": [
      {
        "barcode": "4601234567890",
        "is_main": true
      }
    ],
    "stocks": {
      "available_by_warehouse": {
        "42": 18
      },
      "physical": [
        {
          "warehouse_id": 42,
          "warehouse_name": "Warehouse Sofia",
          "stockTotal": 24,
          "stockReserved": 6,
          "stockAvailable": 18
        }
      ],
      "aggregate": [
        {
          "warehouse_id": 42,
          "warehouse_name": "Warehouse Sofia",
          "stockTotal": 30,
          "stockReserved": 7,
          "stockAvailable": 23
        }
      ]
    },
    "package": {
      "kind": "unit",
      "parent_product_id": null,
      "base_product_id": null,
      "multiplicity": null
    },
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
PATCH /api/v2/products

Update product

operationIdpatchProducts
TagProducts
SecuritybearerAuth

Partially bulk updates products. Only supplied product fields are changed.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
Optional type_id accepts integer codes 1 ordinary, 2 composite, 3 component, 4 consumable, 5 packaging. Omission preserves the existing/default type; explicit null, empty, fractional or unknown values are rejected. Types 2/3 require composites enabled in the shop and permission to manage composition, in addition to product create/update rights. Quant packaging and links, existing composition links and dependent warehouse documents can prevent a type transition. This field does not create or replace a composition. Product and component prices are independent. Each item commits separately: a later rule failure may leave earlier items applied. Read back affected products before retrying a failed bulk request.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request PATCH "${NWMS_BASE_URL}/api/v2/products" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

BulkPatchProductsRequest required

Field Required Type Flags Constraints Description Example
data yes PatchProductPayload
data yes array<PatchProductPayload> minItems: 1

Request examples

default

{
  "data": [
    {
      "external_id": "EXT-10045",
      "shop_id": 12,
      "price": 18.99,
      "type_id": 3
    }
  ]
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
(root) no ProductMutationResponse Single-object product writes return ProductResponse; array product writes return ProductCollectionResponse in the same input order for successfully processed items.
data yes Product Product catalog item exposed by API v2. Product barcodes identify a product or package type and are not unique SSCC values. Use /api/v2/closed-boxes to read individual sealed boxes and their current box balance.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.external_id no string | null "EXT-10045"
data.shop_id no integer:int64 | null min: 1 12
data.domain_id no integer:int64 | null min: 1 3
data.status_id no integer:int64 | null 1
data.type_id no integer:int64 | null 1
data.name yes string "Coffee 250g"
data.article no string | null "ART-001245"
data.sku no string | null "SKU-001245"
data.price no number:float | null 19.99
data.estimated_price no number:float | null 21.5
data.image_url no string:uri | null "https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg"
data.dimensions no Dimensions
data.dimensions.x no number:float | null min: 0 105
data.dimensions.y no number:float | null min: 0 200
data.dimensions.z no number:float | null min: 0 32
data.dimensions.unit yes enum enum: mm "mm"
data.weight no Weight
data.weight.value no number:float | null min: 0 250
data.weight.unit yes enum enum: g "g"
data.datamatrix_required yes boolean false
data.expiration_required yes boolean true
data.comment no string | null "Keep dry"
data.description no string | null "Ground coffee package"
data.inventory_updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.barcodes no array<ProductBarcode>
data.barcodes[] no ProductBarcode
data.barcodes[].barcode yes string minLength: 1
maxLength: 64
"4601234567890"
data.barcodes[].is_main yes boolean true
data.stocks no ProductStocks
data.stocks.available_by_warehouse no object Map keyed by warehouse ID. Values are quantities. {"42":18.0,"43":3.0}
data.stocks.physical no array<ProductStockSummary> Physical stock rows for the product itself.
data.stocks.physical[] no ProductStockSummary Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock.
data.stocks.physical[].warehouse_id yes integer:int64 min: 1 42
data.stocks.physical[].warehouse_name yes string | null "Warehouse Sofia"
data.stocks.physical[].stockTotal yes number:float 24.0
data.stocks.physical[].stockReserved yes number:float 6.0
data.stocks.physical[].stockAvailable yes number:float 18.0
data.stocks.aggregate no array<ProductStockSummary> Aggregated base-unit stock rows for the product and its descendant quants.
data.stocks.aggregate[] no ProductStockSummary Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock.
data.stocks.aggregate[].warehouse_id yes integer:int64 min: 1 42
data.stocks.aggregate[].warehouse_name yes string | null "Warehouse Sofia"
data.stocks.aggregate[].stockTotal yes number:float 24.0
data.stocks.aggregate[].stockReserved yes number:float 6.0
data.stocks.aggregate[].stockAvailable yes number:float 18.0
data.package no object | null
data.package.kind no string | null "unit"
data.package.parent_product_id no integer:int64 | null min: 1 1201
data.package.base_product_id no integer:int64 | null min: 1 1200
data.package.multiplicity no number:float | null min: 0 6
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"
data yes array<Product>
data[] no Product Product catalog item exposed by API v2. Product barcodes identify a product or package type and are not unique SSCC values. Use /api/v2/closed-boxes to read individual sealed boxes and their current box balance.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].external_id no string | null "EXT-10045"
data[].shop_id no integer:int64 | null min: 1 12
data[].domain_id no integer:int64 | null min: 1 3
data[].status_id no integer:int64 | null 1
data[].type_id no integer:int64 | null 1
data[].name yes string "Coffee 250g"
data[].article no string | null "ART-001245"
data[].sku no string | null "SKU-001245"
data[].price no number:float | null 19.99
data[].estimated_price no number:float | null 21.5
data[].image_url no string:uri | null "https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg"
data[].dimensions no Dimensions
data[].dimensions.x no number:float | null min: 0 105
data[].dimensions.y no number:float | null min: 0 200
data[].dimensions.z no number:float | null min: 0 32
data[].dimensions.unit yes enum enum: mm "mm"
data[].weight no Weight
data[].weight.value no number:float | null min: 0 250
data[].weight.unit yes enum enum: g "g"
data[].datamatrix_required yes boolean false
data[].expiration_required yes boolean true
data[].comment no string | null "Keep dry"
data[].description no string | null "Ground coffee package"
data[].inventory_updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].barcodes no array<ProductBarcode>
data[].barcodes[] no ProductBarcode
data[].barcodes[].barcode yes string minLength: 1
maxLength: 64
"4601234567890"
data[].barcodes[].is_main yes boolean true
data[].stocks no ProductStocks
data[].stocks.available_by_warehouse no object Map keyed by warehouse ID. Values are quantities. {"42":18.0,"43":3.0}
data[].stocks.physical no array<ProductStockSummary> Physical stock rows for the product itself.
data[].stocks.physical[] no ProductStockSummary Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock.
data[].stocks.physical[].warehouse_id yes integer:int64 min: 1 42
data[].stocks.physical[].warehouse_name yes string | null "Warehouse Sofia"
data[].stocks.physical[].stockTotal yes number:float 24.0
data[].stocks.physical[].stockReserved yes number:float 6.0
data[].stocks.physical[].stockAvailable yes number:float 18.0
data[].stocks.aggregate no array<ProductStockSummary> Aggregated base-unit stock rows for the product and its descendant quants.
data[].stocks.aggregate[] no ProductStockSummary Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock.
data[].stocks.aggregate[].warehouse_id yes integer:int64 min: 1 42
data[].stocks.aggregate[].warehouse_name yes string | null "Warehouse Sofia"
data[].stocks.aggregate[].stockTotal yes number:float 24.0
data[].stocks.aggregate[].stockReserved yes number:float 6.0
data[].stocks.aggregate[].stockAvailable yes number:float 18.0
data[].package no object | null
data[].package.kind no string | null "unit"
data[].package.parent_product_id no integer:int64 | null min: 1 1201
data[].package.base_product_id no integer:int64 | null min: 1 1200
data[].package.multiplicity no number:float | null min: 0 6
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 1201,
    "external_id": "EXT-10045",
    "shop_id": 12,
    "domain_id": 3,
    "status_id": 1,
    "type_id": 1,
    "name": "Coffee 250g",
    "article": "ART-001245",
    "sku": "SKU-001245",
    "price": 19.99,
    "estimated_price": 21.5,
    "image_url": "https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg",
    "dimensions": {
      "x": 105,
      "y": 200,
      "z": 32,
      "unit": "mm"
    },
    "weight": {
      "value": 250,
      "unit": "g"
    },
    "datamatrix_required": false,
    "expiration_required": true,
    "comment": "Keep dry",
    "description": "Ground coffee package",
    "inventory_updated_at": "2026-07-14T08:30:00Z",
    "barcodes": [
      {
        "barcode": "4601234567890",
        "is_main": true
      }
    ],
    "stocks": {
      "available_by_warehouse": {
        "42": 18
      },
      "physical": [
        {
          "warehouse_id": 42,
          "warehouse_name": "Warehouse Sofia",
          "stockTotal": 24,
          "stockReserved": 6,
          "stockAvailable": 18
        }
      ],
      "aggregate": [
        {
          "warehouse_id": 42,
          "warehouse_name": "Warehouse Sofia",
          "stockTotal": 30,
          "stockReserved": 7,
          "stockAvailable": 23
        }
      ]
    },
    "package": {
      "kind": "unit",
      "parent_product_id": null,
      "base_product_id": null,
      "multiplicity": null
    },
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
GET /api/v2/products/{id}

Get product

operationIdgetProducts
TagProducts
SecuritybearerAuth

Returns one product when it exists and is visible to the authenticated account.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/products/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Product ID. 1001

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes Product Product catalog item exposed by API v2. Product barcodes identify a product or package type and are not unique SSCC values. Use /api/v2/closed-boxes to read individual sealed boxes and their current box balance.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.external_id no string | null "EXT-10045"
data.shop_id no integer:int64 | null min: 1 12
data.domain_id no integer:int64 | null min: 1 3
data.status_id no integer:int64 | null 1
data.type_id no integer:int64 | null 1
data.name yes string "Coffee 250g"
data.article no string | null "ART-001245"
data.sku no string | null "SKU-001245"
data.price no number:float | null 19.99
data.estimated_price no number:float | null 21.5
data.image_url no string:uri | null "https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg"
data.dimensions no Dimensions
data.dimensions.x no number:float | null min: 0 105
data.dimensions.y no number:float | null min: 0 200
data.dimensions.z no number:float | null min: 0 32
data.dimensions.unit yes enum enum: mm "mm"
data.weight no Weight
data.weight.value no number:float | null min: 0 250
data.weight.unit yes enum enum: g "g"
data.datamatrix_required yes boolean false
data.expiration_required yes boolean true
data.comment no string | null "Keep dry"
data.description no string | null "Ground coffee package"
data.inventory_updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.barcodes no array<ProductBarcode>
data.barcodes[] no ProductBarcode
data.barcodes[].barcode yes string minLength: 1
maxLength: 64
"4601234567890"
data.barcodes[].is_main yes boolean true
data.stocks no ProductStocks
data.stocks.available_by_warehouse no object Map keyed by warehouse ID. Values are quantities. {"42":18.0,"43":3.0}
data.stocks.physical no array<ProductStockSummary> Physical stock rows for the product itself.
data.stocks.physical[] no ProductStockSummary Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock.
data.stocks.physical[].warehouse_id yes integer:int64 min: 1 42
data.stocks.physical[].warehouse_name yes string | null "Warehouse Sofia"
data.stocks.physical[].stockTotal yes number:float 24.0
data.stocks.physical[].stockReserved yes number:float 6.0
data.stocks.physical[].stockAvailable yes number:float 18.0
data.stocks.aggregate no array<ProductStockSummary> Aggregated base-unit stock rows for the product and its descendant quants.
data.stocks.aggregate[] no ProductStockSummary Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock.
data.stocks.aggregate[].warehouse_id yes integer:int64 min: 1 42
data.stocks.aggregate[].warehouse_name yes string | null "Warehouse Sofia"
data.stocks.aggregate[].stockTotal yes number:float 24.0
data.stocks.aggregate[].stockReserved yes number:float 6.0
data.stocks.aggregate[].stockAvailable yes number:float 18.0
data.package no object | null
data.package.kind no string | null "unit"
data.package.parent_product_id no integer:int64 | null min: 1 1201
data.package.base_product_id no integer:int64 | null min: 1 1200
data.package.multiplicity no number:float | null min: 0 6
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 1201,
    "external_id": "EXT-10045",
    "shop_id": 12,
    "domain_id": 3,
    "status_id": 1,
    "type_id": 1,
    "name": "Coffee 250g",
    "article": "ART-001245",
    "sku": "SKU-001245",
    "price": 19.99,
    "estimated_price": 21.5,
    "image_url": "https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg",
    "dimensions": {
      "x": 105,
      "y": 200,
      "z": 32,
      "unit": "mm"
    },
    "weight": {
      "value": 250,
      "unit": "g"
    },
    "datamatrix_required": false,
    "expiration_required": true,
    "comment": "Keep dry",
    "description": "Ground coffee package",
    "inventory_updated_at": "2026-07-14T08:30:00Z",
    "barcodes": [
      {
        "barcode": "4601234567890",
        "is_main": true
      }
    ],
    "stocks": {
      "available_by_warehouse": {
        "42": 18
      },
      "physical": [
        {
          "warehouse_id": 42,
          "warehouse_name": "Warehouse Sofia",
          "stockTotal": 24,
          "stockReserved": 6,
          "stockAvailable": 18
        }
      ],
      "aggregate": [
        {
          "warehouse_id": 42,
          "warehouse_name": "Warehouse Sofia",
          "stockTotal": 30,
          "stockReserved": 7,
          "stockAvailable": 23
        }
      ]
    },
    "package": {
      "kind": "unit",
      "parent_product_id": null,
      "base_product_id": null,
      "multiplicity": null
    },
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
DELETE /api/v2/products/{id}

Delete product

operationIddeleteProducts
TagProducts
SecuritybearerAuth

Deletes the resource when the authenticated account has permission and the current lifecycle state allows deletion. If deletion is blocked by related records or document state, the API returns a validation error.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request DELETE "${NWMS_BASE_URL}/api/v2/products/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}"

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Product ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes object | null
meta yes object
meta.api_version yes enum enum: v2 "v2"
meta.deleted yes boolean true
meta.id yes integer:int64 min: 1 1001

Response examples

success

{
  "data": null,
  "meta": {
    "api_version": "v2",
    "deleted": true,
    "id": 1001
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
GET /api/v2/products/{id}/stock-lots

List physical stock lots

operationIdgetProductStockLots
TagProducts
SecuritybearerAuth

Read physical placed stock per warehouse, place and lot in this product's units. Unplaced reservations are excluded because they have no actual lot yet. Aggregate physical_quantity by warehouse and lot for reconciliation. Results use current product visibility and container rules, standard pagination (maximum 500) and no snapshot isolation.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/products/1001/stock-lots" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Product ID. 1001
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 500
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 100
sort query no string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, warehouse_id, expiration_date. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. "id"
warehouse_id query no integer:int64 form true min: 1 Filter by warehouse_id using exact matching. The same filter may also be sent as filter[warehouse_id] where supported by the Laravel query adapter. 42
batch query no string form true Filter by batch using partial text matching. The same filter may also be sent as filter[batch] where supported by the Laravel query adapter. "LOT-2026"
production_date_from query no string:date form true Lower inclusive date boundary for production_date. The same filter may also be sent as filter[production_date_from] where supported by the Laravel query adapter. "2026-07-14"
production_date_to query no string:date form true Upper inclusive date boundary for production_date. The same filter may also be sent as filter[production_date_to] where supported by the Laravel query adapter. "2026-07-14"
expiration_date_from query no string:date form true Lower inclusive date boundary for expiration_date. The same filter may also be sent as filter[expiration_date_from] where supported by the Laravel query adapter. "2026-07-14"
expiration_date_to query no string:date form true Upper inclusive date boundary for expiration_date. The same filter may also be sent as filter[expiration_date_to] where supported by the Laravel query adapter. "2026-07-14"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<StockLot>
data[] no StockLot One active positive placed stock slice in product units, using the same container visibility rules as product stock. Does not allocate unplaced reservations to lots. Not a snapshot cursor or append-only feed.
data[].batch yes string | null "LOT-2026"
data[].production_date yes string:date | null "2026-01-15"
data[].expiration_date yes string:date | null "2027-01-15"
data[].id yes integer:int64 min: 1 5001
data[].product_id yes integer:int64 min: 1 1201
data[].warehouse_id yes integer:int64 min: 1 734
data[].place_id yes integer:int64 min: 1 501
data[].physical_quantity yes number:float min: 0 12
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "batch": "LOT-2026",
      "production_date": "2026-01-15",
      "expiration_date": "2027-01-15",
      "id": 5001,
      "product_id": 1201,
      "warehouse_id": 734,
      "place_id": 501,
      "physical_quantity": 12
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/products/5101/stock-lots?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/products/5101/stock-lots?page=2",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/products/5101/stock-lots?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "https://betawms.ffcdek.ru/api/v2/products/5101/stock-lots",
    "per_page": 100,
    "to": 100,
    "total": 123
  }
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}

Quant Unpackings

GET /api/v2/quant-unpackings

List quant unpackings

operationIdlistQuantUnpackings
TagQuant Unpackings
SecuritybearerAuth

Returns quant unpackings visible to the authenticated account. Use documented query parameters for filtering, sorting, and pagination.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/quant-unpackings" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 500
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 100
sort query no string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, document_date, conducted_at, created_at, updated_at. Default: -id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. "-id"
after_id query no integer:int64 form true min: 0 Return rows with an ID greater than this value. The boundary is exclusive. The same filter may also be sent as filter[after_id] where supported by the Laravel query adapter. 1000
include query no string form false Comma-separated optional relations. Allowed values: items. The same filter may also be sent as filter[include] where supported by the Laravel query adapter. "items"
id query no integer:int64 form true min: 1 Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. 1001
external_id query no string form true Filter by external_id using exact matching. The same filter may also be sent as filter[external_id] where supported by the Laravel query adapter. "EXT-10045"
status_id query no integer:int64 form true min: 1 Filter by status_id using exact matching. The same filter may also be sent as filter[status_id] where supported by the Laravel query adapter. 1
warehouse_id query no integer:int64 form true min: 1 Filter by warehouse_id using exact matching. The same filter may also be sent as filter[warehouse_id] where supported by the Laravel query adapter. 42
user_id query no integer:int64 form true min: 1 Filter by user_id using exact matching. The same filter may also be sent as filter[user_id] where supported by the Laravel query adapter. 15
comment query no string form true Filter by comment using partial text matching. The same filter may also be sent as filter[comment] where supported by the Laravel query adapter. "Priority"
document_date_from query no string:date form true Lower inclusive date boundary for document_date. The same filter may also be sent as filter[document_date_from] where supported by the Laravel query adapter. "2026-07-14"
document_date_to query no string:date form true Upper inclusive date boundary for document_date. The same filter may also be sent as filter[document_date_to] where supported by the Laravel query adapter. "2026-07-14"
conducted_at_from query no string:date form true Lower inclusive date boundary for conducted_at. The same filter may also be sent as filter[conducted_at_from] where supported by the Laravel query adapter. "2026-07-14"
conducted_at_to query no string:date form true Upper inclusive date boundary for conducted_at. The same filter may also be sent as filter[conducted_at_to] where supported by the Laravel query adapter. "2026-07-14"
created_at_from query no string:date form true Lower inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_from] where supported by the Laravel query adapter. "2026-07-14"
created_at_to query no string:date form true Upper inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_to] where supported by the Laravel query adapter. "2026-07-14"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<QuantUnpacking>
data[] no QuantUnpacking Quant unpacking document.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].external_id no string | null "QU-100245"
data[].domain_id no integer:int64 | null min: 1 3
data[].warehouse_id no integer:int64 | null min: 1 42
data[].user_id no integer:int64 | null min: 1 9
data[].status_id no enum:int64 | null enum: 1, 4 1 - draft/new document. 4 - conducted document. 1
data[].document_date no string:date | null "2026-07-14"
data[].counts yes object
data[].counts.source yes number:float 1
data[].counts.target yes number:float 6
data[].counts.source_moved yes number:float 0
data[].counts.target_moved yes number:float 0
data[].conducted_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].comment no string | null "Unpack coffee box"
data[].items no array<QuantUnpackingItem>
data[].items[] no QuantUnpackingItem Quant unpacking line.
data[].items[].id yes integer:int64 readOnly min: 1 9001
data[].items[].source_product_id yes integer:int64 min: 1 1200
data[].items[].target_product_id no integer:int64 | null min: 1 1201
data[].items[].source_place_id no integer:int64 | null min: 1 501
data[].items[].target_place_id no integer:int64 | null min: 1 502
data[].items[].source_quantity yes number:float min: 0 1
data[].items[].target_quantity no number:float | null min: 0 6
data[].items[].available_quantity no number:float | null min: 0 10
data[].items[].batch no string | null "LOT-2026"
data[].items[].production_date no string:date | null "2026-01-15"
data[].items[].expiration_date no string:date | null "2027-01-15"
data[].items[].comment no string | null "Box unpacked"
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "id": 9201,
      "external_id": "QU-100245",
      "domain_id": 3,
      "warehouse_id": 42,
      "user_id": 9,
      "status_id": 1,
      "document_date": "2026-07-14",
      "counts": {
        "source": 1,
        "target": 6,
        "source_moved": 0,
        "target_moved": 0
      },
      "conducted_at": null,
      "comment": "Unpack coffee box",
      "items": [
        {
          "id": 9001,
          "source_product_id": 1200,
          "target_product_id": 1201,
          "source_place_id": 501,
          "target_place_id": 502,
          "source_quantity": 1,
          "target_quantity": 6,
          "available_quantity": 10,
          "batch": "LOT-2026",
          "production_date": "2026-01-15",
          "expiration_date": "2027-01-15",
          "comment": "Box unpacked"
        }
      ],
      "created_at": "2026-07-14T09:00:00Z",
      "updated_at": "2026-07-14T09:30:00Z"
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/quant-unpackings?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/quant-unpackings?page=2",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/quant-unpackings?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "https://betawms.ffcdek.ru/api/v2/quant-unpackings",
    "per_page": 100,
    "to": 100,
    "total": 123
  }
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
POST /api/v2/quant-unpackings

Create quant unpacking

operationIdcreateQuantUnpackings
TagQuant Unpackings
SecuritybearerAuth

Create quant unpacking. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/quant-unpackings" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CreateQuantUnpackingRequest required

Field Required Type Flags Constraints Description Example
data yes CreateQuantUnpackingPayload
data.warehouse_id yes integer:int64 min: 1 42
data.document_date no string:date | null "2026-07-14"
data.external_id no string | null "QU-100245"
data.comment no string | null "Unpack coffee box"
data.conduct no boolean false
data.items yes array<QuantUnpackingItemCreatePayload> minItems: 1
data.items[] no QuantUnpackingItemCreatePayload Quant unpacking source item. Target product and target quantity are derived by the package service.
data.items[].source_product_id yes integer:int64 min: 1 1200
data.items[].source_quantity yes number:float min: 0.001 1
data.items[].source_place_id no integer:int64 | null min: 1 501
data.items[].target_place_id no integer:int64 | null min: 1 502
data.items[].batch no string | null "LOT-2026"
data.items[].production_date no string:date | null "2026-01-15"
data.items[].expiration_date no string:date | null "2027-01-15"
data.items[].comment no string | null "Box unpacked"

Request examples

default

{
  "data": {
    "warehouse_id": 42,
    "external_id": "QU-100245",
    "items": [
      {
        "source_product_id": 1200,
        "source_quantity": 1,
        "source_place_id": 501
      }
    ]
  }
}

Responses

201 Created.

Created.

Field Required Type Flags Constraints Description Example
data yes QuantUnpacking Quant unpacking document.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.external_id no string | null "QU-100245"
data.domain_id no integer:int64 | null min: 1 3
data.warehouse_id no integer:int64 | null min: 1 42
data.user_id no integer:int64 | null min: 1 9
data.status_id no enum:int64 | null enum: 1, 4 1 - draft/new document. 4 - conducted document. 1
data.document_date no string:date | null "2026-07-14"
data.counts yes object
data.counts.source yes number:float 1
data.counts.target yes number:float 6
data.counts.source_moved yes number:float 0
data.counts.target_moved yes number:float 0
data.conducted_at no string:date-time | null "2026-07-14T10:30:00Z"
data.comment no string | null "Unpack coffee box"
data.items no array<QuantUnpackingItem>
data.items[] no QuantUnpackingItem Quant unpacking line.
data.items[].id yes integer:int64 readOnly min: 1 9001
data.items[].source_product_id yes integer:int64 min: 1 1200
data.items[].target_product_id no integer:int64 | null min: 1 1201
data.items[].source_place_id no integer:int64 | null min: 1 501
data.items[].target_place_id no integer:int64 | null min: 1 502
data.items[].source_quantity yes number:float min: 0 1
data.items[].target_quantity no number:float | null min: 0 6
data.items[].available_quantity no number:float | null min: 0 10
data.items[].batch no string | null "LOT-2026"
data.items[].production_date no string:date | null "2026-01-15"
data.items[].expiration_date no string:date | null "2027-01-15"
data.items[].comment no string | null "Box unpacked"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 9201,
    "external_id": "QU-100245",
    "domain_id": 3,
    "warehouse_id": 42,
    "user_id": 9,
    "status_id": 1,
    "document_date": "2026-07-14",
    "counts": {
      "source": 1,
      "target": 6,
      "source_moved": 0,
      "target_moved": 0
    },
    "conducted_at": null,
    "comment": "Unpack coffee box",
    "items": [
      {
        "id": 9001,
        "source_product_id": 1200,
        "target_product_id": 1201,
        "source_place_id": 501,
        "target_place_id": 502,
        "source_quantity": 1,
        "target_quantity": 6,
        "available_quantity": 10,
        "batch": "LOT-2026",
        "production_date": "2026-01-15",
        "expiration_date": "2027-01-15",
        "comment": "Box unpacked"
      }
    ],
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
GET /api/v2/quant-unpackings/{id}

Get quant unpacking

operationIdgetQuantUnpackings
TagQuant Unpackings
SecuritybearerAuth

Returns one quant unpacking when it exists and is visible to the authenticated account.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/quant-unpackings/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Quant unpacking document ID. 1001

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes QuantUnpacking Quant unpacking document.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.external_id no string | null "QU-100245"
data.domain_id no integer:int64 | null min: 1 3
data.warehouse_id no integer:int64 | null min: 1 42
data.user_id no integer:int64 | null min: 1 9
data.status_id no enum:int64 | null enum: 1, 4 1 - draft/new document. 4 - conducted document. 1
data.document_date no string:date | null "2026-07-14"
data.counts yes object
data.counts.source yes number:float 1
data.counts.target yes number:float 6
data.counts.source_moved yes number:float 0
data.counts.target_moved yes number:float 0
data.conducted_at no string:date-time | null "2026-07-14T10:30:00Z"
data.comment no string | null "Unpack coffee box"
data.items no array<QuantUnpackingItem>
data.items[] no QuantUnpackingItem Quant unpacking line.
data.items[].id yes integer:int64 readOnly min: 1 9001
data.items[].source_product_id yes integer:int64 min: 1 1200
data.items[].target_product_id no integer:int64 | null min: 1 1201
data.items[].source_place_id no integer:int64 | null min: 1 501
data.items[].target_place_id no integer:int64 | null min: 1 502
data.items[].source_quantity yes number:float min: 0 1
data.items[].target_quantity no number:float | null min: 0 6
data.items[].available_quantity no number:float | null min: 0 10
data.items[].batch no string | null "LOT-2026"
data.items[].production_date no string:date | null "2026-01-15"
data.items[].expiration_date no string:date | null "2027-01-15"
data.items[].comment no string | null "Box unpacked"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 9201,
    "external_id": "QU-100245",
    "domain_id": 3,
    "warehouse_id": 42,
    "user_id": 9,
    "status_id": 1,
    "document_date": "2026-07-14",
    "counts": {
      "source": 1,
      "target": 6,
      "source_moved": 0,
      "target_moved": 0
    },
    "conducted_at": null,
    "comment": "Unpack coffee box",
    "items": [
      {
        "id": 9001,
        "source_product_id": 1200,
        "target_product_id": 1201,
        "source_place_id": 501,
        "target_place_id": 502,
        "source_quantity": 1,
        "target_quantity": 6,
        "available_quantity": 10,
        "batch": "LOT-2026",
        "production_date": "2026-01-15",
        "expiration_date": "2027-01-15",
        "comment": "Box unpacked"
      }
    ],
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
POST /api/v2/quant-unpackings/{id}/conduct

Conduct quant unpacking

operationIdconductQuantUnpacking
TagQuant Unpackings
SecuritybearerAuth

Conduct quant unpacking. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/quant-unpackings/1001/conduct" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}"

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Quant unpacking document ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes QuantUnpacking Quant unpacking document.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.external_id no string | null "QU-100245"
data.domain_id no integer:int64 | null min: 1 3
data.warehouse_id no integer:int64 | null min: 1 42
data.user_id no integer:int64 | null min: 1 9
data.status_id no enum:int64 | null enum: 1, 4 1 - draft/new document. 4 - conducted document. 1
data.document_date no string:date | null "2026-07-14"
data.counts yes object
data.counts.source yes number:float 1
data.counts.target yes number:float 6
data.counts.source_moved yes number:float 0
data.counts.target_moved yes number:float 0
data.conducted_at no string:date-time | null "2026-07-14T10:30:00Z"
data.comment no string | null "Unpack coffee box"
data.items no array<QuantUnpackingItem>
data.items[] no QuantUnpackingItem Quant unpacking line.
data.items[].id yes integer:int64 readOnly min: 1 9001
data.items[].source_product_id yes integer:int64 min: 1 1200
data.items[].target_product_id no integer:int64 | null min: 1 1201
data.items[].source_place_id no integer:int64 | null min: 1 501
data.items[].target_place_id no integer:int64 | null min: 1 502
data.items[].source_quantity yes number:float min: 0 1
data.items[].target_quantity no number:float | null min: 0 6
data.items[].available_quantity no number:float | null min: 0 10
data.items[].batch no string | null "LOT-2026"
data.items[].production_date no string:date | null "2026-01-15"
data.items[].expiration_date no string:date | null "2027-01-15"
data.items[].comment no string | null "Box unpacked"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 9201,
    "external_id": "QU-100245",
    "domain_id": 3,
    "warehouse_id": 42,
    "user_id": 9,
    "status_id": 1,
    "document_date": "2026-07-14",
    "counts": {
      "source": 1,
      "target": 6,
      "source_moved": 0,
      "target_moved": 0
    },
    "conducted_at": null,
    "comment": "Unpack coffee box",
    "items": [
      {
        "id": 9001,
        "source_product_id": 1200,
        "target_product_id": 1201,
        "source_place_id": 501,
        "target_place_id": 502,
        "source_quantity": 1,
        "target_quantity": 6,
        "available_quantity": 10,
        "batch": "LOT-2026",
        "production_date": "2026-01-15",
        "expiration_date": "2027-01-15",
        "comment": "Box unpacked"
      }
    ],
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
POST /api/v2/quant-unpackings/{id}/items

Add quant unpacking

operationIdaddQuantUnpackingsItems
TagQuant Unpackings
SecuritybearerAuth

Add quant unpacking. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/quant-unpackings/1001/items" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Quant unpacking document ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

AddQuantUnpackingItemRequest required

Field Required Type Flags Constraints Description Example
data yes QuantUnpackingItemCreatePayload Quant unpacking source item. Target product and target quantity are derived by the package service.
data.source_product_id yes integer:int64 min: 1 1200
data.source_quantity yes number:float min: 0.001 1
data.source_place_id no integer:int64 | null min: 1 501
data.target_place_id no integer:int64 | null min: 1 502
data.batch no string | null "LOT-2026"
data.production_date no string:date | null "2026-01-15"
data.expiration_date no string:date | null "2027-01-15"
data.comment no string | null "Box unpacked"

Request examples

default

{
  "data": {
    "source_product_id": 1200,
    "source_quantity": 1,
    "source_place_id": 501
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes QuantUnpacking Quant unpacking document.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.external_id no string | null "QU-100245"
data.domain_id no integer:int64 | null min: 1 3
data.warehouse_id no integer:int64 | null min: 1 42
data.user_id no integer:int64 | null min: 1 9
data.status_id no enum:int64 | null enum: 1, 4 1 - draft/new document. 4 - conducted document. 1
data.document_date no string:date | null "2026-07-14"
data.counts yes object
data.counts.source yes number:float 1
data.counts.target yes number:float 6
data.counts.source_moved yes number:float 0
data.counts.target_moved yes number:float 0
data.conducted_at no string:date-time | null "2026-07-14T10:30:00Z"
data.comment no string | null "Unpack coffee box"
data.items no array<QuantUnpackingItem>
data.items[] no QuantUnpackingItem Quant unpacking line.
data.items[].id yes integer:int64 readOnly min: 1 9001
data.items[].source_product_id yes integer:int64 min: 1 1200
data.items[].target_product_id no integer:int64 | null min: 1 1201
data.items[].source_place_id no integer:int64 | null min: 1 501
data.items[].target_place_id no integer:int64 | null min: 1 502
data.items[].source_quantity yes number:float min: 0 1
data.items[].target_quantity no number:float | null min: 0 6
data.items[].available_quantity no number:float | null min: 0 10
data.items[].batch no string | null "LOT-2026"
data.items[].production_date no string:date | null "2026-01-15"
data.items[].expiration_date no string:date | null "2027-01-15"
data.items[].comment no string | null "Box unpacked"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 9201,
    "external_id": "QU-100245",
    "domain_id": 3,
    "warehouse_id": 42,
    "user_id": 9,
    "status_id": 1,
    "document_date": "2026-07-14",
    "counts": {
      "source": 1,
      "target": 6,
      "source_moved": 0,
      "target_moved": 0
    },
    "conducted_at": null,
    "comment": "Unpack coffee box",
    "items": [
      {
        "id": 9001,
        "source_product_id": 1200,
        "target_product_id": 1201,
        "source_place_id": 501,
        "target_place_id": 502,
        "source_quantity": 1,
        "target_quantity": 6,
        "available_quantity": 10,
        "batch": "LOT-2026",
        "production_date": "2026-01-15",
        "expiration_date": "2027-01-15",
        "comment": "Box unpacked"
      }
    ],
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}

Send Documents

GET /api/v2/send-documents

List send documents

operationIdlistSendDocuments
TagSend Documents
SecuritybearerAuth

Returns send documents visible to the authenticated account. Use documented query parameters for filtering, sorting, and pagination.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/send-documents" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 100
Number of records per page. Default is 20; maximum is 100. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 20
sort query no string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, document_date, status_id, warehouse_id, order_count, processing_mode, pipeline_state, created_at, updated_at. Default: -id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. "-id"
include query no string form false Comma-separated optional relations. Allowed values: status, warehouse, delivery_services, orders, orders.products, orders.datamatrix, orders.wildberries, wildberries_supplies, batch. The same filter may also be sent as filter[include] where supported by the Laravel query adapter. "status,warehouse,delivery_services,orders,orders.products,orders.datamatrix,orders.wildberries,wildberries_supplies,batch"
id query no integer:int64 form true min: 1 Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. 1001
status_id query no integer:int64 form true min: 1 Filter by status_id using exact matching. The same filter may also be sent as filter[status_id] where supported by the Laravel query adapter. 1
warehouse_id query no integer:int64 form true min: 1 Filter by warehouse_id using exact matching. The same filter may also be sent as filter[warehouse_id] where supported by the Laravel query adapter. 42
delivery_service_id query no integer:int64 form true min: 1 Filter by delivery_service_id using exact matching. The same filter may also be sent as filter[delivery_service_id] where supported by the Laravel query adapter. 1
order_id query no integer:int64 form true min: 1 Filter by order_id using exact matching. The same filter may also be sent as filter[order_id] where supported by the Laravel query adapter. 1
processing_mode query no string form true Filter by processing_mode using exact matching. The same filter may also be sent as filter[processing_mode] where supported by the Laravel query adapter. "standard"
pipeline_state query no string form true Filter by pipeline_state using exact matching. The same filter may also be sent as filter[pipeline_state] where supported by the Laravel query adapter. "open"
wb_fulfillment_state query no string form true Filter by wb_fulfillment_state using exact matching. The same filter may also be sent as filter[wb_fulfillment_state] where supported by the Laravel query adapter. "delivered"
comment query no string form true Filter by comment using partial text matching. The same filter may also be sent as filter[comment] where supported by the Laravel query adapter. "Priority"
document_date_from query no string:date form true Lower inclusive date boundary for document_date. The same filter may also be sent as filter[document_date_from] where supported by the Laravel query adapter. "2026-07-14"
document_date_to query no string:date form true Upper inclusive date boundary for document_date. The same filter may also be sent as filter[document_date_to] where supported by the Laravel query adapter. "2026-07-14"
created_at_from query no string:date form true Lower inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_from] where supported by the Laravel query adapter. "2026-07-14"
created_at_to query no string:date form true Upper inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_to] where supported by the Laravel query adapter. "2026-07-14"
updated_at_from query no string:date form true Lower inclusive date boundary for updated_at. The same filter may also be sent as filter[updated_at_from] where supported by the Laravel query adapter. "2026-07-14"
updated_at_to query no string:date form true Upper inclusive date boundary for updated_at. The same filter may also be sent as filter[updated_at_to] where supported by the Laravel query adapter. "2026-07-14"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<SendDocument>
data[] no SendDocument Outbound shipment document with its complete operational composition. Collection relations are empty unless requested through include; the item endpoint always loads them.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].domain_id no integer:int64 | null min: 1 3
data[].status_id no integer:int64 | null 1
data[].status no object | null
data[].status.id yes integer:int64 1
data[].status.name yes string "Открыт"
data[].status.color no string | null "#2457c5"
data[].status.background_color no string | null "#eaf0ff"
data[].warehouse_id no integer:int64 | null min: 1 42
data[].warehouse no object | null
data[].warehouse.id yes integer:int64 min: 1 42
data[].warehouse.name yes string "Warehouse Sofia"
data[].warehouse.type_id no integer:int64 | null 2
data[].warehouse.parent_id no integer:int64 | null min: 1 41
data[].delivery_service_ids yes array<integer:int64>
data[].delivery_service_ids[] no integer:int64 min: 1 17
data[].delivery_services yes array<SendDocumentDeliveryService>
data[].delivery_services[] no SendDocumentDeliveryService
data[].delivery_services[].id yes integer:int64 min: 1 17
data[].delivery_services[].name yes string "Wildberries FBS"
data[].delivery_services[].status_id yes integer:int64 1
data[].delivery_services[].external_id no string | null "wb-fbs"
data[].delivery_services[].source_id no string | null "wildberries"
data[].delivery_services[].delivery_type no string | null "pickup_point"
data[].delivery_services[].is_courier yes boolean false
data[].document_date no string:date | null "2026-08-11"
data[].closed_at no string:date-time | null "2026-08-11T10:15:00Z"
data[].comment no string | null "Wildberries shipment 740"
data[].order_count yes integer:int64 min: 0 1
data[].processing yes SendDocumentProcessing
data[].processing.mode no string | null "standard"
data[].processing.pipeline yes array<string>
data[].processing.pipeline[] no string "assignment"
data[].processing.state no string | null "open"
data[].processing.batch_profile_id no integer:int64 | null min: 1 31
data[].processing.batch_profile no object | null
data[].processing.batch_profile.id yes integer:int64 min: 1 31
data[].processing.batch_profile.name yes string "Standard packing"
data[].processing.batch_profile.processing_mode no string | null "standard"
data[].processing.composition_frozen_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].processing.batch_started_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].processing.batch_completed_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].wildberries yes SendDocumentWildberries Wildberries document-level state and safe supply/QR/sticker artifact metadata. Binary label content and encrypted provider payloads are not returned.
data[].wildberries.fulfillment_state no string | null "delivered"
data[].wildberries.error_message no string | null ""
data[].wildberries.processed_at no string:date-time | null "2026-08-11T10:15:00Z"
data[].wildberries.supplies yes array<object>
data[].wildberries.supplies[] no object
data[].orders yes array<SendDocumentOrderAssignment>
data[].orders[] no SendDocumentOrderAssignment
data[].orders[].assignment_id yes integer:int64 min: 1 8801
data[].orders[].marked_at no string:date-time | null "2026-08-11T09:30:00Z"
data[].orders[].created_at no string:date-time | null "2026-08-11T09:00:00Z"
data[].orders[].updated_at no string:date-time | null "2026-08-11T09:30:00Z"
data[].orders[].order yes object | null Complete order snapshot embedded into a shipment document. Marketplace and batch objects preserve provider-specific fields.
data[].orders[].order.id yes integer:int64 min: 1 49060
data[].orders[].order.external_id no string | null "WB-900001234"
data[].orders[].order.status_id no integer:int64 | null 20
data[].orders[].order.warehouse_id no integer:int64 | null min: 1 42
data[].orders[].order.shop_id no integer:int64 | null min: 1 12
data[].orders[].order.order_date no string:date | null "2026-08-10"
data[].orders[].order.send_date no string:date | null "2026-08-11"
data[].orders[].order.amounts no object | null
data[].orders[].order.amounts.shipping_price no number:float | null 8.6
data[].orders[].order.amounts.shipping_cost no number:float | null 0
data[].orders[].order.amounts.sum no number:float | null 39.98
data[].orders[].order.amounts.cod_sum no number:float | null 48.58
data[].orders[].order.contact no object | null
data[].orders[].order.contact.first_name no string | null "Ivan"
data[].orders[].order.contact.middle_name no string | null "Ivanovich"
data[].orders[].order.contact.last_name no string | null "Petrov"
data[].orders[].order.contact.phone no string | null "+359888123456"
data[].orders[].order.contact.email no string:email | null "customer@example.com"
data[].orders[].order.contact.country_id no integer:int64 | null min: 1 100
data[].orders[].order.contact.city_id no integer:int64 | null min: 1 200
data[].orders[].order.contact.postcode no string | null "1000"
data[].orders[].order.contact.latitude no number:float | null min: -90
max: 90
42.6977
data[].orders[].order.contact.longitude no number:float | null min: -180
max: 180
23.3219
data[].orders[].order.contact.full_address no string | null "1 Vitosha Boulevard, Sofia"
data[].orders[].order.delivery no object | null
data[].orders[].order.delivery.service_id no integer:int64 | null min: 1 1
data[].orders[].order.delivery.delivery_type yes enum | null enum: door, pickup_point Normalized delivery channel derived from the configured delivery service. Null when the service type is unknown. "door"
data[].orders[].order.delivery.is_courier yes boolean True for door delivery; false for pickup-point delivery or an unknown service type. true
data[].orders[].order.delivery.status no string | null "created"
data[].orders[].order.delivery.track_number no string | null "CDEK-123456789"
data[].orders[].order.delivery.pickup_point_id no string | null "SOFIA-01"
data[].orders[].order.delivery.source_id no string | null "cdek-15"
data[].orders[].order.delivery.tariff_code no integer:int64 | null 136
data[].orders[].order.delivery.additional_services no object Values of additional CDEK services configured for the selected integration. Boolean true enables a code-only service; other values are sent as the CDEK parameter. {"TRYING_ON":true,"PART_DELIV":false,"PACKAGE_1":2}
data[].orders[].order.delivery.label no string:uri | null "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf"
data[].orders[].order.delivery.delivery_date no string:date | null "2026-07-16"
data[].orders[].order.delivery.delivery_time_start no string:time | null "09:00:00Z"
data[].orders[].order.delivery.delivery_time_end no string:time | null "18:00:00Z"
data[].orders[].order.comments no object | null
data[].orders[].order.comments.delivery_service_text no string | null "Call before delivery"
data[].orders[].order.comments.inner_text no string | null "VIP customer"
data[].orders[].order.offers yes array<SendDocumentOrderLine>
data[].orders[].order.offers[] no SendDocumentOrderLine
data[].orders[].order.offers[].id yes integer:int64 min: 1 7001
data[].orders[].order.offers[].product_id no integer:int64 | null min: 1 1201
data[].orders[].order.offers[].quantity no number:float | null 2
data[].orders[].order.offers[].estimated_price no number:float | null 19.5
data[].orders[].order.offers[].price no number:float | null 19.99
data[].orders[].order.offers[].expiration_date no string:date | null "2027-01-15"
data[].orders[].order.offers[].batch no string | null "LOT-2026"
data[].orders[].order.offers[].operation_user_id no integer:int64 | null min: 1 9
data[].orders[].order.offers[].product no object | null
data[].orders[].order.offers[].reservation no object | null Reservation totals for one order line.
data[].orders[].order.offers[].reservation_items no array<OrderReservationItem>
data[].orders[].order.offers[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].orders[].order.offers[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].orders[].order.datamatrix_codes yes array<DataMatrix>
data[].orders[].order.datamatrix_codes[] no DataMatrix Marked goods DataMatrix code.
data[].orders[].order.datamatrix_codes[].id yes integer:int64 readOnly min: 1 1001
data[].orders[].order.datamatrix_codes[].created_at no string:date | null readOnly Stored code upload date; date precision. "2026-10-19"
data[].orders[].order.datamatrix_codes[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].orders[].order.datamatrix_codes[].domain_id no integer:int64 | null min: 1 3
data[].orders[].order.datamatrix_codes[].warehouse_id no integer:int64 | null min: 1 42
data[].orders[].order.datamatrix_codes[].status_id no enum:int64 | null enum: 0, 1, 2 0 - Imported and available for future warehouse operations. 1 - Reserved or attached by an operational document. 2 - Used by an outbound or completed operation. 0
data[].orders[].order.datamatrix_codes[].acceptance_id no integer:int64 | null min: 1 5101
data[].orders[].order.datamatrix_codes[].order_id no integer:int64 | null min: 1 8101
data[].orders[].order.datamatrix_codes[].product_id no integer:int64 | null min: 1 1201
data[].orders[].order.datamatrix_codes[].barcode no string | null maxLength: 14 "04601234567890"
data[].orders[].order.datamatrix_codes[].short_code no string | null maxLength: 14 "ABC123"
data[].orders[].order.datamatrix_codes[].crypto_tail no string | null "CRYPTO"
data[].orders[].order.datamatrix_codes[].datamatrix no string | null maxLength: 125 "010460123456789021ABC123"
data[].orders[].order.datamatrix_codes[].production_date no string:date | null "2026-01-15"
data[].orders[].order.datamatrix_codes[].expiration_date no string:date | null "2027-01-15"
data[].orders[].order.datamatrix_codes[].batch no string | null "LOT-2026"
data[].orders[].order.datamatrix_codes[].used_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].orders[].order.datamatrix_codes[].accepted_at no string:date-time | null "2026-10-22T10:00:00+03:00"
data[].orders[].order.datamatrix_codes[].shipped_at no string:date-time | null "2026-10-22T10:00:00+03:00"
data[].orders[].order.warehouse no object | null
data[].orders[].order.warehouse.id yes integer:int64 min: 1 42
data[].orders[].order.warehouse.name yes string "Warehouse Sofia"
data[].orders[].order.warehouse.type_id no integer:int64 | null 2
data[].orders[].order.warehouse.parent_id no integer:int64 | null min: 1 41
data[].orders[].order.shop no object | null
data[].orders[].order.shop.id yes integer:int64 min: 1 12
data[].orders[].order.shop.name yes string "Demo Online Store"
data[].orders[].order.shop.status_id no integer:int64 | null 1
data[].orders[].order.company no object | null
data[].orders[].order.company.id yes integer:int64 min: 1 7
data[].orders[].order.company.name yes string "Demo Company"
data[].orders[].order.company.legal_name no string | null "Demo Company Ltd."
data[].orders[].order.place no object | null
data[].orders[].order.accumulation_place no object | null
data[].orders[].order.measurements no object | null
data[].orders[].order.settings no object | null
data[].orders[].order.consumables yes array<object>
data[].orders[].order.consumables[] no object
data[].orders[].order.wildberries no object | null
data[].orders[].order.wildberries.completed_at no string:date-time | null "2026-08-11T10:15:00Z"
data[].orders[].order.batch_matches yes array<object>
data[].orders[].order.batch_matches[] no object
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "id": 740,
      "domain_id": 3,
      "status_id": 1,
      "status": {
        "id": 1,
        "name": "Открыт",
        "color": "#2457c5",
        "background_color": "#eaf0ff"
      },
      "warehouse_id": 42,
      "warehouse": {
        "id": 42,
        "name": "Warehouse Sofia",
        "type_id": 2,
        "parent_id": 41
      },
      "delivery_service_ids": [
        17
      ],
      "delivery_services": [
        {
          "id": 17,
          "name": "Wildberries FBS",
          "status_id": 1,
          "external_id": "wb-fbs",
          "source_id": "wildberries",
          "delivery_type": "pickup_point",
          "is_courier": false
        }
      ],
      "document_date": "2026-08-11",
      "closed_at": "2026-08-11T10:15:00Z",
      "comment": "Wildberries shipment 740",
      "order_count": 1,
      "processing": {
        "mode": "standard",
        "pipeline": [
          "assignment",
          "marking",
          "transfer"
        ],
        "state": "open",
        "batch_profile_id": null,
        "batch_profile": null,
        "composition_frozen_at": null,
        "batch_started_at": null,
        "batch_completed_at": null
      },
      "wildberries": {
        "fulfillment_state": "delivered",
        "error_message": null,
        "processed_at": "2026-08-11T10:15:00Z",
        "supplies": [
          {
            "id": 3201,
            "account_id": 71,
            "external_id": "WB-GI-740",
            "name": "Поставка 740",
            "state": "delivered",
            "state_name": "Доставлена",
            "destination_type": "office",
            "destination_office_id": 507,
            "is_automatic": false,
            "is_b2b": false,
            "cargo_type": "box",
            "cross_border_type": null,
            "order_count": 1,
            "current_qr": {
              "id": 3301,
              "kind": "supply_qr",
              "format": "svg",
              "width": 580,
              "height": 400,
              "barcode": "WB-GI-740",
              "part_a": null,
              "part_b": null,
              "content_hash": "sha256:qr-example",
              "content_available": true,
              "is_current": true,
              "fetched_at": "2026-08-11T09:00:00Z",
              "last_printed_at": null,
              "print_count": 0
            },
            "boxes": [

            ],
            "last_error": {
              "code": null,
              "message": null
            },
            "remote_created_at": "2026-08-11T09:00:00Z",
            "remote_closed_at": null,
            "last_synced_at": "2026-08-11T10:15:00Z",
            "delivered_at": "2026-08-11T10:15:00Z"
          }
        ]
      },
      "orders": [
        {
          "assignment_id": 8801,
          "marked_at": "2026-08-11T09:30:00Z",
          "created_at": "2026-08-11T09:00:00Z",
          "updated_at": "2026-08-11T09:30:00Z",
          "order": {
            "id": 49060,
            "external_id": "WB-900001234",
            "status_id": 20,
            "warehouse_id": 42,
            "shop_id": 12,
            "order_date": "2026-08-10",
            "send_date": "2026-08-11",
            "amounts": {
              "shipping_price": 0,
              "shipping_cost": 0,
              "sum": 39.98,
              "cod_sum": 0
            },
            "contact": {
              "first_name": "Иван",
              "middle_name": null,
              "last_name": "Петров",
              "phone": "+359888123456",
              "email": "customer@example.com",
              "country_id": 100,
              "city_id": 200,
              "postcode": "1000",
              "latitude": 42.6977,
              "longitude": 23.3219,
              "full_address": "Sofia"
            },
            "delivery": {
              "service_id": 17,
              "delivery_type": "pickup_point",
              "is_courier": false,
              "status": "created",
              "track_number": "WB-900001234",
              "pickup_point_id": "WB-SOF-01",
              "source_id": "wildberries",
              "tariff_code": null,
              "additional_services": {
              },
              "label": null,
              "delivery_date": "2026-08-12",
              "delivery_time_start": null,
              "delivery_time_end": null
            },
            "comments": {
              "delivery_service_text": null,
              "inner_text": "Клиентский пример для документа 740"
            },
            "offers": [
              {
                "id": 7001,
                "product_id": 1201,
                "quantity": 2,
                "estimated_price": 19.5,
                "price": 19.99,
                "expiration_date": "2027-01-15",
                "batch": "LOT-2026",
                "operation_user_id": 9,
                "product": {
                  "id": 1201,
                  "external_id": "EXT-10045",
                  "shop_id": 12,
                  "domain_id": 3,
                  "status_id": 1,
                  "type_id": 1,
                  "name": "Coffee 250g",
                  "article": "ART-001245",
                  "sku": "SKU-001245",
                  "price": 19.99,
                  "estimated_price": 21.5,
                  "image_url": null,
                  "dimensions": {
                    "x": 105,
                    "y": 200,
                    "z": 32,
                    "unit": "mm"
                  },
                  "weight": {
                    "value": 250,
                    "unit": "g"
                  },
                  "datamatrix_required": true,
                  "expiration_required": true,
                  "comment": null,
                  "description": "Ground coffee package",
                  "barcodes": [
                    {
                      "barcode": "4601234567890",
                      "is_main": true
                    }
                  ],
                  "package": {
                    "kind": "unit",
                    "parent_product_id": null,
                    "base_product_id": null,
                    "multiplicity": null,
                    "base_multiplicity": null,
                    "depth": 0
                  },
                  "created_at": "2026-08-01T09:00:00Z",
                  "updated_at": "2026-08-10T09:00:00Z"
                },
                "reservation": {
                  "required_qty": 2,
                  "reserved_qty": 2,
                  "unreserved_qty": 0,
                  "missing_qty": 0,
                  "status": "reserved"
                },
                "reservation_items": [

                ],
                "created_at": "2026-08-10T09:00:00Z",
                "updated_at": "2026-08-10T09:00:00Z"
              }
            ],
            "datamatrix_codes": [
              {
                "id": 6101,
                "domain_id": 3,
                "warehouse_id": 42,
                "status_id": 1,
                "acceptance_id": 5101,
                "order_id": 49060,
                "product_id": 1201,
                "barcode": "04601234567890",
                "short_code": "ABC123",
                "crypto_tail": "CRYPTO",
                "datamatrix": "010460123456789021ABC123",
                "production_date": "2026-01-15",
                "expiration_date": "2027-01-15",
                "batch": "LOT-2026",
                "created_at": "2026-08-11T09:15:00Z",
                "updated_at": "2026-08-11T09:15:00Z",
                "used_at": null
              }
            ],
            "warehouse": {
              "id": 42,
              "name": "Warehouse Sofia",
              "type_id": 2,
              "parent_id": 41
            },
            "shop": {
              "id": 12,
              "name": "Demo Online Store",
              "status_id": 1
            },
            "company": {
              "id": 7,
              "name": "Demo Company",
              "legal_name": "Demo Company Ltd."
            },
            "place": null,
            "accumulation_place": null,
            "measurements": {
              "places": 1,
              "dimensions": {
                "x": 220,
                "y": 160,
                "z": 120,
                "unit": "mm"
              },
              "weight": {
                "value": 600,
                "unit": "g"
              }
            },
            "settings": {
              "blank_url": null
            },
            "consumables": [

            ],
            "wildberries": {
              "id": 2101,
              "account_id": 71,
              "wb_order_id": "900001234",
              "order_uid": "WB-UID-49060",
              "rid": "WB-RID-49060",
              "product_id": 1201,
              "state": "confirmed",
              "state_name": "Подтверждён",
              "fulfillment_state": "delivered",
              "fulfillment_state_name": "Доставлен",
              "supplier_status": "confirm",
              "wb_status": "sold",
              "supply_id": 3201,
              "external_supply_id": "WB-GI-740",
              "supply_state": "delivered",
              "delivery_type": "fbs",
              "cross_border_type": null,
              "is_b2b": false,
              "wb_warehouse_id": 507,
              "office_id": 507,
              "nm_id": 12345678,
              "chrt_id": 87654321,
              "article": "ART-001245",
              "skus": [
                "4601234567890"
              ],
              "required_meta": [
                "sgtin"
              ],
              "optional_meta": [

              ],
              "meta_state": "accepted",
              "sticker_state": "ready",
              "prices": {
                "price_minor": 1999,
                "final_price_minor": 1999,
                "sale_price_minor": 1999,
                "currency": "RUB"
              },
              "markings": [
                {
                  "id": 1,
                  "datamatrix_id": 6101,
                  "type": "sgtin",
                  "masked_value": "010460…ABC123",
                  "value_hash": "sha256:example",
                  "state": "accepted",
                  "remote_decision": "accepted",
                  "error_code": null,
                  "error_message": null,
                  "submitted_at": "2026-08-11T09:30:00Z",
                  "verified_at": "2026-08-11T09:31:00Z",
                  "ambiguous_at": null
                }
              ],
              "current_sticker": {
                "id": 3401,
                "kind": "order_sticker",
                "format": "png",
                "width": 580,
                "height": 400,
                "barcode": "WB-900001234",
                "part_a": "123456",
                "part_b": "7890",
                "content_hash": "sha256:sticker-example",
                "content_available": true,
                "is_current": true,
                "fetched_at": "2026-08-11T09:25:00Z",
                "last_printed_at": null,
                "print_count": 0
              },
              "last_error": {
                "code": null,
                "message": null
              },
              "remote_created_at": "2026-08-10T09:00:00Z",
              "seller_date": "2026-08-10",
              "delivery_date": "2026-08-12",
              "confirmed_at": "2026-08-11T09:20:00Z",
              "completed_at": "2026-08-11T10:15:00Z",
              "imported_at": "2026-08-10T09:05:00Z",
              "mapped_at": "2026-08-10T09:06:00Z",
              "reserved_at": "2026-08-11T09:10:00Z",
              "remote_status_checked_at": "2026-08-11T10:15:00Z"
            },
            "batch_matches": [

            ]
          }
        }
      ],
      "created_at": "2026-08-11T08:45:00Z",
      "updated_at": "2026-08-11T10:15:00Z"
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/send-documents?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/send-documents?page=3",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/send-documents?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 3,
    "path": "https://betawms.ffcdek.ru/api/v2/send-documents",
    "per_page": 20,
    "to": 20,
    "total": 43
  }
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
POST /api/v2/send-documents

Create send document

operationIdcreateSendDocuments
TagSend Documents
SecuritybearerAuth

Create send document. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/send-documents" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CreateSendDocumentRequest required

Field Required Type Flags Constraints Description Example
data yes CreateSendDocumentPayload Creates an open shipment document. Warehouse and delivery services must be active and visible in tenant scope.
data.document_date yes string:date "2026-08-11"
data.warehouse_id yes integer:int64 min: 1 42
data.delivery_service_ids yes array<integer:int64> minItems: 1
data.delivery_service_ids[] no integer:int64 min: 1 17
data.comment no string | null maxLength: 1000 "Wildberries shipment 740"

Request examples

default

{
  "data": {
    "document_date": "2026-08-11",
    "warehouse_id": 42,
    "delivery_service_ids": [
      17
    ],
    "comment": "Wildberries shipment 740"
  }
}

Responses

201 Created.

Created.

Field Required Type Flags Constraints Description Example
data yes SendDocument Outbound shipment document with its complete operational composition. Collection relations are empty unless requested through include; the item endpoint always loads them.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.domain_id no integer:int64 | null min: 1 3
data.status_id no integer:int64 | null 1
data.status no object | null
data.status.id yes integer:int64 1
data.status.name yes string "Открыт"
data.status.color no string | null "#2457c5"
data.status.background_color no string | null "#eaf0ff"
data.warehouse_id no integer:int64 | null min: 1 42
data.warehouse no object | null
data.warehouse.id yes integer:int64 min: 1 42
data.warehouse.name yes string "Warehouse Sofia"
data.warehouse.type_id no integer:int64 | null 2
data.warehouse.parent_id no integer:int64 | null min: 1 41
data.delivery_service_ids yes array<integer:int64>
data.delivery_service_ids[] no integer:int64 min: 1 17
data.delivery_services yes array<SendDocumentDeliveryService>
data.delivery_services[] no SendDocumentDeliveryService
data.delivery_services[].id yes integer:int64 min: 1 17
data.delivery_services[].name yes string "Wildberries FBS"
data.delivery_services[].status_id yes integer:int64 1
data.delivery_services[].external_id no string | null "wb-fbs"
data.delivery_services[].source_id no string | null "wildberries"
data.delivery_services[].delivery_type no string | null "pickup_point"
data.delivery_services[].is_courier yes boolean false
data.document_date no string:date | null "2026-08-11"
data.closed_at no string:date-time | null "2026-08-11T10:15:00Z"
data.comment no string | null "Wildberries shipment 740"
data.order_count yes integer:int64 min: 0 1
data.processing yes SendDocumentProcessing
data.processing.mode no string | null "standard"
data.processing.pipeline yes array<string>
data.processing.pipeline[] no string "assignment"
data.processing.state no string | null "open"
data.processing.batch_profile_id no integer:int64 | null min: 1 31
data.processing.batch_profile no object | null
data.processing.batch_profile.id yes integer:int64 min: 1 31
data.processing.batch_profile.name yes string "Standard packing"
data.processing.batch_profile.processing_mode no string | null "standard"
data.processing.composition_frozen_at no string:date-time | null "2026-07-14T10:30:00Z"
data.processing.batch_started_at no string:date-time | null "2026-07-14T10:30:00Z"
data.processing.batch_completed_at no string:date-time | null "2026-07-14T10:30:00Z"
data.wildberries yes SendDocumentWildberries Wildberries document-level state and safe supply/QR/sticker artifact metadata. Binary label content and encrypted provider payloads are not returned.
data.wildberries.fulfillment_state no string | null "delivered"
data.wildberries.error_message no string | null ""
data.wildberries.processed_at no string:date-time | null "2026-08-11T10:15:00Z"
data.wildberries.supplies yes array<object>
data.wildberries.supplies[] no object
data.orders yes array<SendDocumentOrderAssignment>
data.orders[] no SendDocumentOrderAssignment
data.orders[].assignment_id yes integer:int64 min: 1 8801
data.orders[].marked_at no string:date-time | null "2026-08-11T09:30:00Z"
data.orders[].created_at no string:date-time | null "2026-08-11T09:00:00Z"
data.orders[].updated_at no string:date-time | null "2026-08-11T09:30:00Z"
data.orders[].order yes object | null Complete order snapshot embedded into a shipment document. Marketplace and batch objects preserve provider-specific fields.
data.orders[].order.id yes integer:int64 min: 1 49060
data.orders[].order.external_id no string | null "WB-900001234"
data.orders[].order.status_id no integer:int64 | null 20
data.orders[].order.warehouse_id no integer:int64 | null min: 1 42
data.orders[].order.shop_id no integer:int64 | null min: 1 12
data.orders[].order.order_date no string:date | null "2026-08-10"
data.orders[].order.send_date no string:date | null "2026-08-11"
data.orders[].order.amounts no object | null
data.orders[].order.amounts.shipping_price no number:float | null 8.6
data.orders[].order.amounts.shipping_cost no number:float | null 0
data.orders[].order.amounts.sum no number:float | null 39.98
data.orders[].order.amounts.cod_sum no number:float | null 48.58
data.orders[].order.contact no object | null
data.orders[].order.contact.first_name no string | null "Ivan"
data.orders[].order.contact.middle_name no string | null "Ivanovich"
data.orders[].order.contact.last_name no string | null "Petrov"
data.orders[].order.contact.phone no string | null "+359888123456"
data.orders[].order.contact.email no string:email | null "customer@example.com"
data.orders[].order.contact.country_id no integer:int64 | null min: 1 100
data.orders[].order.contact.city_id no integer:int64 | null min: 1 200
data.orders[].order.contact.postcode no string | null "1000"
data.orders[].order.contact.latitude no number:float | null min: -90
max: 90
42.6977
data.orders[].order.contact.longitude no number:float | null min: -180
max: 180
23.3219
data.orders[].order.contact.full_address no string | null "1 Vitosha Boulevard, Sofia"
data.orders[].order.delivery no object | null
data.orders[].order.delivery.service_id no integer:int64 | null min: 1 1
data.orders[].order.delivery.delivery_type yes enum | null enum: door, pickup_point Normalized delivery channel derived from the configured delivery service. Null when the service type is unknown. "door"
data.orders[].order.delivery.is_courier yes boolean True for door delivery; false for pickup-point delivery or an unknown service type. true
data.orders[].order.delivery.status no string | null "created"
data.orders[].order.delivery.track_number no string | null "CDEK-123456789"
data.orders[].order.delivery.pickup_point_id no string | null "SOFIA-01"
data.orders[].order.delivery.source_id no string | null "cdek-15"
data.orders[].order.delivery.tariff_code no integer:int64 | null 136
data.orders[].order.delivery.additional_services no object Values of additional CDEK services configured for the selected integration. Boolean true enables a code-only service; other values are sent as the CDEK parameter. {"TRYING_ON":true,"PART_DELIV":false,"PACKAGE_1":2}
data.orders[].order.delivery.label no string:uri | null "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf"
data.orders[].order.delivery.delivery_date no string:date | null "2026-07-16"
data.orders[].order.delivery.delivery_time_start no string:time | null "09:00:00Z"
data.orders[].order.delivery.delivery_time_end no string:time | null "18:00:00Z"
data.orders[].order.comments no object | null
data.orders[].order.comments.delivery_service_text no string | null "Call before delivery"
data.orders[].order.comments.inner_text no string | null "VIP customer"
data.orders[].order.offers yes array<SendDocumentOrderLine>
data.orders[].order.offers[] no SendDocumentOrderLine
data.orders[].order.offers[].id yes integer:int64 min: 1 7001
data.orders[].order.offers[].product_id no integer:int64 | null min: 1 1201
data.orders[].order.offers[].quantity no number:float | null 2
data.orders[].order.offers[].estimated_price no number:float | null 19.5
data.orders[].order.offers[].price no number:float | null 19.99
data.orders[].order.offers[].expiration_date no string:date | null "2027-01-15"
data.orders[].order.offers[].batch no string | null "LOT-2026"
data.orders[].order.offers[].operation_user_id no integer:int64 | null min: 1 9
data.orders[].order.offers[].product no object | null
data.orders[].order.offers[].product.id yes integer:int64 min: 1 1201
data.orders[].order.offers[].product.external_id no string | null "EXT-10045"
data.orders[].order.offers[].product.domain_id no integer:int64 | null min: 1 3
data.orders[].order.offers[].product.shop_id no integer:int64 | null min: 1 12
data.orders[].order.offers[].product.status_id no enum:int64 | null enum: 1, 2, 3 1 - active; 2 - disabled; 3 - deleted. 1
data.orders[].order.offers[].product.type_id no integer:int64 | null 1
data.orders[].order.offers[].product.name yes string "Coffee 250g"
data.orders[].order.offers[].product.article no string | null "ART-001245"
data.orders[].order.offers[].product.sku no string | null "SKU-001245"
data.orders[].order.offers[].product.price no number:float | null 19.99
data.orders[].order.offers[].product.estimated_price no number:float | null 21.5
data.orders[].order.offers[].product.image_url no string:uri | null "https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg"
data.orders[].order.offers[].product.dimensions yes Dimensions
data.orders[].order.offers[].product.weight yes Weight
data.orders[].order.offers[].product.datamatrix_required yes boolean true
data.orders[].order.offers[].product.expiration_required yes boolean true
data.orders[].order.offers[].product.comment no string | null "Keep dry"
data.orders[].order.offers[].product.description no string | null "Ground coffee package"
data.orders[].order.offers[].product.barcodes yes array<ProductBarcode>
data.orders[].order.offers[].product.package yes object
data.orders[].order.offers[].product.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.offers[].product.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.offers[].reservation no object | null Reservation totals for one order line.
data.orders[].order.offers[].reservation.required_qty yes number:float 3
data.orders[].order.offers[].reservation.reserved_qty yes number:float 1
data.orders[].order.offers[].reservation.unreserved_qty yes number:float 2
data.orders[].order.offers[].reservation.missing_qty yes number:float 2
data.orders[].order.offers[].reservation.status yes enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.orders[].order.offers[].reservation_items no array<OrderReservationItem>
data.orders[].order.offers[].reservation_items[] no OrderReservationItem Physical product or expanded component used to explain a reservation shortage.
data.orders[].order.offers[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.offers[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.datamatrix_codes yes array<DataMatrix>
data.orders[].order.datamatrix_codes[] no DataMatrix Marked goods DataMatrix code.
data.orders[].order.datamatrix_codes[].id yes integer:int64 readOnly min: 1 1001
data.orders[].order.datamatrix_codes[].created_at no string:date | null readOnly Stored code upload date; date precision. "2026-10-19"
data.orders[].order.datamatrix_codes[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.datamatrix_codes[].domain_id no integer:int64 | null min: 1 3
data.orders[].order.datamatrix_codes[].warehouse_id no integer:int64 | null min: 1 42
data.orders[].order.datamatrix_codes[].status_id no enum:int64 | null enum: 0, 1, 2 0 - Imported and available for future warehouse operations. 1 - Reserved or attached by an operational document. 2 - Used by an outbound or completed operation. 0
data.orders[].order.datamatrix_codes[].acceptance_id no integer:int64 | null min: 1 5101
data.orders[].order.datamatrix_codes[].order_id no integer:int64 | null min: 1 8101
data.orders[].order.datamatrix_codes[].product_id no integer:int64 | null min: 1 1201
data.orders[].order.datamatrix_codes[].barcode no string | null maxLength: 14 "04601234567890"
data.orders[].order.datamatrix_codes[].short_code no string | null maxLength: 14 "ABC123"
data.orders[].order.datamatrix_codes[].crypto_tail no string | null "CRYPTO"
data.orders[].order.datamatrix_codes[].datamatrix no string | null maxLength: 125 "010460123456789021ABC123"
data.orders[].order.datamatrix_codes[].production_date no string:date | null "2026-01-15"
data.orders[].order.datamatrix_codes[].expiration_date no string:date | null "2027-01-15"
data.orders[].order.datamatrix_codes[].batch no string | null "LOT-2026"
data.orders[].order.datamatrix_codes[].used_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.datamatrix_codes[].accepted_at no string:date-time | null "2026-10-22T10:00:00+03:00"
data.orders[].order.datamatrix_codes[].shipped_at no string:date-time | null "2026-10-22T10:00:00+03:00"
data.orders[].order.warehouse no object | null
data.orders[].order.warehouse.id yes integer:int64 min: 1 42
data.orders[].order.warehouse.name yes string "Warehouse Sofia"
data.orders[].order.warehouse.type_id no integer:int64 | null 2
data.orders[].order.warehouse.parent_id no integer:int64 | null min: 1 41
data.orders[].order.shop no object | null
data.orders[].order.shop.id yes integer:int64 min: 1 12
data.orders[].order.shop.name yes string "Demo Online Store"
data.orders[].order.shop.status_id no integer:int64 | null 1
data.orders[].order.company no object | null
data.orders[].order.company.id yes integer:int64 min: 1 7
data.orders[].order.company.name yes string "Demo Company"
data.orders[].order.company.legal_name no string | null "Demo Company Ltd."
data.orders[].order.place no object | null
data.orders[].order.accumulation_place no object | null
data.orders[].order.measurements no object | null
data.orders[].order.settings no object | null
data.orders[].order.consumables yes array<object>
data.orders[].order.consumables[] no object
data.orders[].order.wildberries no object | null
data.orders[].order.wildberries.completed_at no string:date-time | null "2026-08-11T10:15:00Z"
data.orders[].order.batch_matches yes array<object>
data.orders[].order.batch_matches[] no object
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 740,
    "domain_id": 3,
    "status_id": 1,
    "status": {
      "id": 1,
      "name": "Открыт",
      "color": "#2457c5",
      "background_color": "#eaf0ff"
    },
    "warehouse_id": 42,
    "warehouse": {
      "id": 42,
      "name": "Warehouse Sofia",
      "type_id": 2,
      "parent_id": 41
    },
    "delivery_service_ids": [
      17
    ],
    "delivery_services": [
      {
        "id": 17,
        "name": "Wildberries FBS",
        "status_id": 1,
        "external_id": "wb-fbs",
        "source_id": "wildberries",
        "delivery_type": "pickup_point",
        "is_courier": false
      }
    ],
    "document_date": "2026-08-11",
    "closed_at": "2026-08-11T10:15:00Z",
    "comment": "Wildberries shipment 740",
    "order_count": 1,
    "processing": {
      "mode": "standard",
      "pipeline": [
        "assignment",
        "marking",
        "transfer"
      ],
      "state": "open",
      "batch_profile_id": null,
      "batch_profile": null,
      "composition_frozen_at": null,
      "batch_started_at": null,
      "batch_completed_at": null
    },
    "wildberries": {
      "fulfillment_state": "delivered",
      "error_message": null,
      "processed_at": "2026-08-11T10:15:00Z",
      "supplies": [
        {
          "id": 3201,
          "account_id": 71,
          "external_id": "WB-GI-740",
          "name": "Поставка 740",
          "state": "delivered",
          "state_name": "Доставлена",
          "destination_type": "office",
          "destination_office_id": 507,
          "is_automatic": false,
          "is_b2b": false,
          "cargo_type": "box",
          "cross_border_type": null,
          "order_count": 1,
          "current_qr": {
            "id": 3301,
            "kind": "supply_qr",
            "format": "svg",
            "width": 580,
            "height": 400,
            "barcode": "WB-GI-740",
            "part_a": null,
            "part_b": null,
            "content_hash": "sha256:qr-example",
            "content_available": true,
            "is_current": true,
            "fetched_at": "2026-08-11T09:00:00Z",
            "last_printed_at": null,
            "print_count": 0
          },
          "boxes": [

          ],
          "last_error": {
            "code": null,
            "message": null
          },
          "remote_created_at": "2026-08-11T09:00:00Z",
          "remote_closed_at": null,
          "last_synced_at": "2026-08-11T10:15:00Z",
          "delivered_at": "2026-08-11T10:15:00Z"
        }
      ]
    },
    "orders": [
      {
        "assignment_id": 8801,
        "marked_at": "2026-08-11T09:30:00Z",
        "created_at": "2026-08-11T09:00:00Z",
        "updated_at": "2026-08-11T09:30:00Z",
        "order": {
          "id": 49060,
          "external_id": "WB-900001234",
          "status_id": 20,
          "warehouse_id": 42,
          "shop_id": 12,
          "order_date": "2026-08-10",
          "send_date": "2026-08-11",
          "amounts": {
            "shipping_price": 0,
            "shipping_cost": 0,
            "sum": 39.98,
            "cod_sum": 0
          },
          "contact": {
            "first_name": "Иван",
            "middle_name": null,
            "last_name": "Петров",
            "phone": "+359888123456",
            "email": "customer@example.com",
            "country_id": 100,
            "city_id": 200,
            "postcode": "1000",
            "latitude": 42.6977,
            "longitude": 23.3219,
            "full_address": "Sofia"
          },
          "delivery": {
            "service_id": 17,
            "delivery_type": "pickup_point",
            "is_courier": false,
            "status": "created",
            "track_number": "WB-900001234",
            "pickup_point_id": "WB-SOF-01",
            "source_id": "wildberries",
            "tariff_code": null,
            "additional_services": {
            },
            "label": null,
            "delivery_date": "2026-08-12",
            "delivery_time_start": null,
            "delivery_time_end": null
          },
          "comments": {
            "delivery_service_text": null,
            "inner_text": "Клиентский пример для документа 740"
          },
          "offers": [
            {
              "id": 7001,
              "product_id": 1201,
              "quantity": 2,
              "estimated_price": 19.5,
              "price": 19.99,
              "expiration_date": "2027-01-15",
              "batch": "LOT-2026",
              "operation_user_id": 9,
              "product": {
                "id": 1201,
                "external_id": "EXT-10045",
                "shop_id": 12,
                "domain_id": 3,
                "status_id": 1,
                "type_id": 1,
                "name": "Coffee 250g",
                "article": "ART-001245",
                "sku": "SKU-001245",
                "price": 19.99,
                "estimated_price": 21.5,
                "image_url": null,
                "dimensions": {
                  "x": 105,
                  "y": 200,
                  "z": 32,
                  "unit": "mm"
                },
                "weight": {
                  "value": 250,
                  "unit": "g"
                },
                "datamatrix_required": true,
                "expiration_required": true,
                "comment": null,
                "description": "Ground coffee package",
                "barcodes": [
                  {
                    "barcode": "4601234567890",
                    "is_main": true
                  }
                ],
                "package": {
                  "kind": "unit",
                  "parent_product_id": null,
                  "base_product_id": null,
                  "multiplicity": null,
                  "base_multiplicity": null,
                  "depth": 0
                },
                "created_at": "2026-08-01T09:00:00Z",
                "updated_at": "2026-08-10T09:00:00Z"
              },
              "reservation": {
                "required_qty": 2,
                "reserved_qty": 2,
                "unreserved_qty": 0,
                "missing_qty": 0,
                "status": "reserved"
              },
              "reservation_items": [

              ],
              "created_at": "2026-08-10T09:00:00Z",
              "updated_at": "2026-08-10T09:00:00Z"
            }
          ],
          "datamatrix_codes": [
            {
              "id": 6101,
              "domain_id": 3,
              "warehouse_id": 42,
              "status_id": 1,
              "acceptance_id": 5101,
              "order_id": 49060,
              "product_id": 1201,
              "barcode": "04601234567890",
              "short_code": "ABC123",
              "crypto_tail": "CRYPTO",
              "datamatrix": "010460123456789021ABC123",
              "production_date": "2026-01-15",
              "expiration_date": "2027-01-15",
              "batch": "LOT-2026",
              "created_at": "2026-08-11T09:15:00Z",
              "updated_at": "2026-08-11T09:15:00Z",
              "used_at": null
            }
          ],
          "warehouse": {
            "id": 42,
            "name": "Warehouse Sofia",
            "type_id": 2,
            "parent_id": 41
          },
          "shop": {
            "id": 12,
            "name": "Demo Online Store",
            "status_id": 1
          },
          "company": {
            "id": 7,
            "name": "Demo Company",
            "legal_name": "Demo Company Ltd."
          },
          "place": null,
          "accumulation_place": null,
          "measurements": {
            "places": 1,
            "dimensions": {
              "x": 220,
              "y": 160,
              "z": 120,
              "unit": "mm"
            },
            "weight": {
              "value": 600,
              "unit": "g"
            }
          },
          "settings": {
            "blank_url": null
          },
          "consumables": [

          ],
          "wildberries": {
            "id": 2101,
            "account_id": 71,
            "wb_order_id": "900001234",
            "order_uid": "WB-UID-49060",
            "rid": "WB-RID-49060",
            "product_id": 1201,
            "state": "confirmed",
            "state_name": "Подтверждён",
            "fulfillment_state": "delivered",
            "fulfillment_state_name": "Доставлен",
            "supplier_status": "confirm",
            "wb_status": "sold",
            "supply_id": 3201,
            "external_supply_id": "WB-GI-740",
            "supply_state": "delivered",
            "delivery_type": "fbs",
            "cross_border_type": null,
            "is_b2b": false,
            "wb_warehouse_id": 507,
            "office_id": 507,
            "nm_id": 12345678,
            "chrt_id": 87654321,
            "article": "ART-001245",
            "skus": [
              "4601234567890"
            ],
            "required_meta": [
              "sgtin"
            ],
            "optional_meta": [

            ],
            "meta_state": "accepted",
            "sticker_state": "ready",
            "prices": {
              "price_minor": 1999,
              "final_price_minor": 1999,
              "sale_price_minor": 1999,
              "currency": "RUB"
            },
            "markings": [
              {
                "id": 1,
                "datamatrix_id": 6101,
                "type": "sgtin",
                "masked_value": "010460…ABC123",
                "value_hash": "sha256:example",
                "state": "accepted",
                "remote_decision": "accepted",
                "error_code": null,
                "error_message": null,
                "submitted_at": "2026-08-11T09:30:00Z",
                "verified_at": "2026-08-11T09:31:00Z",
                "ambiguous_at": null
              }
            ],
            "current_sticker": {
              "id": 3401,
              "kind": "order_sticker",
              "format": "png",
              "width": 580,
              "height": 400,
              "barcode": "WB-900001234",
              "part_a": "123456",
              "part_b": "7890",
              "content_hash": "sha256:sticker-example",
              "content_available": true,
              "is_current": true,
              "fetched_at": "2026-08-11T09:25:00Z",
              "last_printed_at": null,
              "print_count": 0
            },
            "last_error": {
              "code": null,
              "message": null
            },
            "remote_created_at": "2026-08-10T09:00:00Z",
            "seller_date": "2026-08-10",
            "delivery_date": "2026-08-12",
            "confirmed_at": "2026-08-11T09:20:00Z",
            "completed_at": "2026-08-11T10:15:00Z",
            "imported_at": "2026-08-10T09:05:00Z",
            "mapped_at": "2026-08-10T09:06:00Z",
            "reserved_at": "2026-08-11T09:10:00Z",
            "remote_status_checked_at": "2026-08-11T10:15:00Z"
          },
          "batch_matches": [

          ]
        }
      }
    ],
    "created_at": "2026-08-11T08:45:00Z",
    "updated_at": "2026-08-11T10:15:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

409 Conflict

SendDocumentConflict

The shipment document lifecycle or composition does not allow the requested operation.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

documentStateConflict

{
  "message": "Состав документа уже заморожен.",
  "errors": {
    "send_document": [
      "Состав документа уже заморожен."
    ]
  }
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
GET /api/v2/send-documents/{id}

Get send document

operationIdgetSendDocuments
TagSend Documents
SecuritybearerAuth

Returns one send document when it exists and is visible to the authenticated account.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/send-documents/740" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Shipment document ID. 740

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes SendDocument Outbound shipment document with its complete operational composition. Collection relations are empty unless requested through include; the item endpoint always loads them.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.domain_id no integer:int64 | null min: 1 3
data.status_id no integer:int64 | null 1
data.status no object | null
data.status.id yes integer:int64 1
data.status.name yes string "Открыт"
data.status.color no string | null "#2457c5"
data.status.background_color no string | null "#eaf0ff"
data.warehouse_id no integer:int64 | null min: 1 42
data.warehouse no object | null
data.warehouse.id yes integer:int64 min: 1 42
data.warehouse.name yes string "Warehouse Sofia"
data.warehouse.type_id no integer:int64 | null 2
data.warehouse.parent_id no integer:int64 | null min: 1 41
data.delivery_service_ids yes array<integer:int64>
data.delivery_service_ids[] no integer:int64 min: 1 17
data.delivery_services yes array<SendDocumentDeliveryService>
data.delivery_services[] no SendDocumentDeliveryService
data.delivery_services[].id yes integer:int64 min: 1 17
data.delivery_services[].name yes string "Wildberries FBS"
data.delivery_services[].status_id yes integer:int64 1
data.delivery_services[].external_id no string | null "wb-fbs"
data.delivery_services[].source_id no string | null "wildberries"
data.delivery_services[].delivery_type no string | null "pickup_point"
data.delivery_services[].is_courier yes boolean false
data.document_date no string:date | null "2026-08-11"
data.closed_at no string:date-time | null "2026-08-11T10:15:00Z"
data.comment no string | null "Wildberries shipment 740"
data.order_count yes integer:int64 min: 0 1
data.processing yes SendDocumentProcessing
data.processing.mode no string | null "standard"
data.processing.pipeline yes array<string>
data.processing.pipeline[] no string "assignment"
data.processing.state no string | null "open"
data.processing.batch_profile_id no integer:int64 | null min: 1 31
data.processing.batch_profile no object | null
data.processing.batch_profile.id yes integer:int64 min: 1 31
data.processing.batch_profile.name yes string "Standard packing"
data.processing.batch_profile.processing_mode no string | null "standard"
data.processing.composition_frozen_at no string:date-time | null "2026-07-14T10:30:00Z"
data.processing.batch_started_at no string:date-time | null "2026-07-14T10:30:00Z"
data.processing.batch_completed_at no string:date-time | null "2026-07-14T10:30:00Z"
data.wildberries yes SendDocumentWildberries Wildberries document-level state and safe supply/QR/sticker artifact metadata. Binary label content and encrypted provider payloads are not returned.
data.wildberries.fulfillment_state no string | null "delivered"
data.wildberries.error_message no string | null ""
data.wildberries.processed_at no string:date-time | null "2026-08-11T10:15:00Z"
data.wildberries.supplies yes array<object>
data.wildberries.supplies[] no object
data.orders yes array<SendDocumentOrderAssignment>
data.orders[] no SendDocumentOrderAssignment
data.orders[].assignment_id yes integer:int64 min: 1 8801
data.orders[].marked_at no string:date-time | null "2026-08-11T09:30:00Z"
data.orders[].created_at no string:date-time | null "2026-08-11T09:00:00Z"
data.orders[].updated_at no string:date-time | null "2026-08-11T09:30:00Z"
data.orders[].order yes object | null Complete order snapshot embedded into a shipment document. Marketplace and batch objects preserve provider-specific fields.
data.orders[].order.id yes integer:int64 min: 1 49060
data.orders[].order.external_id no string | null "WB-900001234"
data.orders[].order.status_id no integer:int64 | null 20
data.orders[].order.warehouse_id no integer:int64 | null min: 1 42
data.orders[].order.shop_id no integer:int64 | null min: 1 12
data.orders[].order.order_date no string:date | null "2026-08-10"
data.orders[].order.send_date no string:date | null "2026-08-11"
data.orders[].order.amounts no object | null
data.orders[].order.amounts.shipping_price no number:float | null 8.6
data.orders[].order.amounts.shipping_cost no number:float | null 0
data.orders[].order.amounts.sum no number:float | null 39.98
data.orders[].order.amounts.cod_sum no number:float | null 48.58
data.orders[].order.contact no object | null
data.orders[].order.contact.first_name no string | null "Ivan"
data.orders[].order.contact.middle_name no string | null "Ivanovich"
data.orders[].order.contact.last_name no string | null "Petrov"
data.orders[].order.contact.phone no string | null "+359888123456"
data.orders[].order.contact.email no string:email | null "customer@example.com"
data.orders[].order.contact.country_id no integer:int64 | null min: 1 100
data.orders[].order.contact.city_id no integer:int64 | null min: 1 200
data.orders[].order.contact.postcode no string | null "1000"
data.orders[].order.contact.latitude no number:float | null min: -90
max: 90
42.6977
data.orders[].order.contact.longitude no number:float | null min: -180
max: 180
23.3219
data.orders[].order.contact.full_address no string | null "1 Vitosha Boulevard, Sofia"
data.orders[].order.delivery no object | null
data.orders[].order.delivery.service_id no integer:int64 | null min: 1 1
data.orders[].order.delivery.delivery_type yes enum | null enum: door, pickup_point Normalized delivery channel derived from the configured delivery service. Null when the service type is unknown. "door"
data.orders[].order.delivery.is_courier yes boolean True for door delivery; false for pickup-point delivery or an unknown service type. true
data.orders[].order.delivery.status no string | null "created"
data.orders[].order.delivery.track_number no string | null "CDEK-123456789"
data.orders[].order.delivery.pickup_point_id no string | null "SOFIA-01"
data.orders[].order.delivery.source_id no string | null "cdek-15"
data.orders[].order.delivery.tariff_code no integer:int64 | null 136
data.orders[].order.delivery.additional_services no object Values of additional CDEK services configured for the selected integration. Boolean true enables a code-only service; other values are sent as the CDEK parameter. {"TRYING_ON":true,"PART_DELIV":false,"PACKAGE_1":2}
data.orders[].order.delivery.label no string:uri | null "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf"
data.orders[].order.delivery.delivery_date no string:date | null "2026-07-16"
data.orders[].order.delivery.delivery_time_start no string:time | null "09:00:00Z"
data.orders[].order.delivery.delivery_time_end no string:time | null "18:00:00Z"
data.orders[].order.comments no object | null
data.orders[].order.comments.delivery_service_text no string | null "Call before delivery"
data.orders[].order.comments.inner_text no string | null "VIP customer"
data.orders[].order.offers yes array<SendDocumentOrderLine>
data.orders[].order.offers[] no SendDocumentOrderLine
data.orders[].order.offers[].id yes integer:int64 min: 1 7001
data.orders[].order.offers[].product_id no integer:int64 | null min: 1 1201
data.orders[].order.offers[].quantity no number:float | null 2
data.orders[].order.offers[].estimated_price no number:float | null 19.5
data.orders[].order.offers[].price no number:float | null 19.99
data.orders[].order.offers[].expiration_date no string:date | null "2027-01-15"
data.orders[].order.offers[].batch no string | null "LOT-2026"
data.orders[].order.offers[].operation_user_id no integer:int64 | null min: 1 9
data.orders[].order.offers[].product no object | null
data.orders[].order.offers[].product.id yes integer:int64 min: 1 1201
data.orders[].order.offers[].product.external_id no string | null "EXT-10045"
data.orders[].order.offers[].product.domain_id no integer:int64 | null min: 1 3
data.orders[].order.offers[].product.shop_id no integer:int64 | null min: 1 12
data.orders[].order.offers[].product.status_id no enum:int64 | null enum: 1, 2, 3 1 - active; 2 - disabled; 3 - deleted. 1
data.orders[].order.offers[].product.type_id no integer:int64 | null 1
data.orders[].order.offers[].product.name yes string "Coffee 250g"
data.orders[].order.offers[].product.article no string | null "ART-001245"
data.orders[].order.offers[].product.sku no string | null "SKU-001245"
data.orders[].order.offers[].product.price no number:float | null 19.99
data.orders[].order.offers[].product.estimated_price no number:float | null 21.5
data.orders[].order.offers[].product.image_url no string:uri | null "https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg"
data.orders[].order.offers[].product.dimensions yes Dimensions
data.orders[].order.offers[].product.weight yes Weight
data.orders[].order.offers[].product.datamatrix_required yes boolean true
data.orders[].order.offers[].product.expiration_required yes boolean true
data.orders[].order.offers[].product.comment no string | null "Keep dry"
data.orders[].order.offers[].product.description no string | null "Ground coffee package"
data.orders[].order.offers[].product.barcodes yes array<ProductBarcode>
data.orders[].order.offers[].product.package yes object
data.orders[].order.offers[].product.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.offers[].product.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.offers[].reservation no object | null Reservation totals for one order line.
data.orders[].order.offers[].reservation.required_qty yes number:float 3
data.orders[].order.offers[].reservation.reserved_qty yes number:float 1
data.orders[].order.offers[].reservation.unreserved_qty yes number:float 2
data.orders[].order.offers[].reservation.missing_qty yes number:float 2
data.orders[].order.offers[].reservation.status yes enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.orders[].order.offers[].reservation_items no array<OrderReservationItem>
data.orders[].order.offers[].reservation_items[] no OrderReservationItem Physical product or expanded component used to explain a reservation shortage.
data.orders[].order.offers[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.offers[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.datamatrix_codes yes array<DataMatrix>
data.orders[].order.datamatrix_codes[] no DataMatrix Marked goods DataMatrix code.
data.orders[].order.datamatrix_codes[].id yes integer:int64 readOnly min: 1 1001
data.orders[].order.datamatrix_codes[].created_at no string:date | null readOnly Stored code upload date; date precision. "2026-10-19"
data.orders[].order.datamatrix_codes[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.datamatrix_codes[].domain_id no integer:int64 | null min: 1 3
data.orders[].order.datamatrix_codes[].warehouse_id no integer:int64 | null min: 1 42
data.orders[].order.datamatrix_codes[].status_id no enum:int64 | null enum: 0, 1, 2 0 - Imported and available for future warehouse operations. 1 - Reserved or attached by an operational document. 2 - Used by an outbound or completed operation. 0
data.orders[].order.datamatrix_codes[].acceptance_id no integer:int64 | null min: 1 5101
data.orders[].order.datamatrix_codes[].order_id no integer:int64 | null min: 1 8101
data.orders[].order.datamatrix_codes[].product_id no integer:int64 | null min: 1 1201
data.orders[].order.datamatrix_codes[].barcode no string | null maxLength: 14 "04601234567890"
data.orders[].order.datamatrix_codes[].short_code no string | null maxLength: 14 "ABC123"
data.orders[].order.datamatrix_codes[].crypto_tail no string | null "CRYPTO"
data.orders[].order.datamatrix_codes[].datamatrix no string | null maxLength: 125 "010460123456789021ABC123"
data.orders[].order.datamatrix_codes[].production_date no string:date | null "2026-01-15"
data.orders[].order.datamatrix_codes[].expiration_date no string:date | null "2027-01-15"
data.orders[].order.datamatrix_codes[].batch no string | null "LOT-2026"
data.orders[].order.datamatrix_codes[].used_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.datamatrix_codes[].accepted_at no string:date-time | null "2026-10-22T10:00:00+03:00"
data.orders[].order.datamatrix_codes[].shipped_at no string:date-time | null "2026-10-22T10:00:00+03:00"
data.orders[].order.warehouse no object | null
data.orders[].order.warehouse.id yes integer:int64 min: 1 42
data.orders[].order.warehouse.name yes string "Warehouse Sofia"
data.orders[].order.warehouse.type_id no integer:int64 | null 2
data.orders[].order.warehouse.parent_id no integer:int64 | null min: 1 41
data.orders[].order.shop no object | null
data.orders[].order.shop.id yes integer:int64 min: 1 12
data.orders[].order.shop.name yes string "Demo Online Store"
data.orders[].order.shop.status_id no integer:int64 | null 1
data.orders[].order.company no object | null
data.orders[].order.company.id yes integer:int64 min: 1 7
data.orders[].order.company.name yes string "Demo Company"
data.orders[].order.company.legal_name no string | null "Demo Company Ltd."
data.orders[].order.place no object | null
data.orders[].order.accumulation_place no object | null
data.orders[].order.measurements no object | null
data.orders[].order.settings no object | null
data.orders[].order.consumables yes array<object>
data.orders[].order.consumables[] no object
data.orders[].order.wildberries no object | null
data.orders[].order.wildberries.completed_at no string:date-time | null "2026-08-11T10:15:00Z"
data.orders[].order.batch_matches yes array<object>
data.orders[].order.batch_matches[] no object
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 740,
    "domain_id": 3,
    "status_id": 1,
    "status": {
      "id": 1,
      "name": "Открыт",
      "color": "#2457c5",
      "background_color": "#eaf0ff"
    },
    "warehouse_id": 42,
    "warehouse": {
      "id": 42,
      "name": "Warehouse Sofia",
      "type_id": 2,
      "parent_id": 41
    },
    "delivery_service_ids": [
      17
    ],
    "delivery_services": [
      {
        "id": 17,
        "name": "Wildberries FBS",
        "status_id": 1,
        "external_id": "wb-fbs",
        "source_id": "wildberries",
        "delivery_type": "pickup_point",
        "is_courier": false
      }
    ],
    "document_date": "2026-08-11",
    "closed_at": "2026-08-11T10:15:00Z",
    "comment": "Wildberries shipment 740",
    "order_count": 1,
    "processing": {
      "mode": "standard",
      "pipeline": [
        "assignment",
        "marking",
        "transfer"
      ],
      "state": "open",
      "batch_profile_id": null,
      "batch_profile": null,
      "composition_frozen_at": null,
      "batch_started_at": null,
      "batch_completed_at": null
    },
    "wildberries": {
      "fulfillment_state": "delivered",
      "error_message": null,
      "processed_at": "2026-08-11T10:15:00Z",
      "supplies": [
        {
          "id": 3201,
          "account_id": 71,
          "external_id": "WB-GI-740",
          "name": "Поставка 740",
          "state": "delivered",
          "state_name": "Доставлена",
          "destination_type": "office",
          "destination_office_id": 507,
          "is_automatic": false,
          "is_b2b": false,
          "cargo_type": "box",
          "cross_border_type": null,
          "order_count": 1,
          "current_qr": {
            "id": 3301,
            "kind": "supply_qr",
            "format": "svg",
            "width": 580,
            "height": 400,
            "barcode": "WB-GI-740",
            "part_a": null,
            "part_b": null,
            "content_hash": "sha256:qr-example",
            "content_available": true,
            "is_current": true,
            "fetched_at": "2026-08-11T09:00:00Z",
            "last_printed_at": null,
            "print_count": 0
          },
          "boxes": [

          ],
          "last_error": {
            "code": null,
            "message": null
          },
          "remote_created_at": "2026-08-11T09:00:00Z",
          "remote_closed_at": null,
          "last_synced_at": "2026-08-11T10:15:00Z",
          "delivered_at": "2026-08-11T10:15:00Z"
        }
      ]
    },
    "orders": [
      {
        "assignment_id": 8801,
        "marked_at": "2026-08-11T09:30:00Z",
        "created_at": "2026-08-11T09:00:00Z",
        "updated_at": "2026-08-11T09:30:00Z",
        "order": {
          "id": 49060,
          "external_id": "WB-900001234",
          "status_id": 20,
          "warehouse_id": 42,
          "shop_id": 12,
          "order_date": "2026-08-10",
          "send_date": "2026-08-11",
          "amounts": {
            "shipping_price": 0,
            "shipping_cost": 0,
            "sum": 39.98,
            "cod_sum": 0
          },
          "contact": {
            "first_name": "Иван",
            "middle_name": null,
            "last_name": "Петров",
            "phone": "+359888123456",
            "email": "customer@example.com",
            "country_id": 100,
            "city_id": 200,
            "postcode": "1000",
            "latitude": 42.6977,
            "longitude": 23.3219,
            "full_address": "Sofia"
          },
          "delivery": {
            "service_id": 17,
            "delivery_type": "pickup_point",
            "is_courier": false,
            "status": "created",
            "track_number": "WB-900001234",
            "pickup_point_id": "WB-SOF-01",
            "source_id": "wildberries",
            "tariff_code": null,
            "additional_services": {
            },
            "label": null,
            "delivery_date": "2026-08-12",
            "delivery_time_start": null,
            "delivery_time_end": null
          },
          "comments": {
            "delivery_service_text": null,
            "inner_text": "Клиентский пример для документа 740"
          },
          "offers": [
            {
              "id": 7001,
              "product_id": 1201,
              "quantity": 2,
              "estimated_price": 19.5,
              "price": 19.99,
              "expiration_date": "2027-01-15",
              "batch": "LOT-2026",
              "operation_user_id": 9,
              "product": {
                "id": 1201,
                "external_id": "EXT-10045",
                "shop_id": 12,
                "domain_id": 3,
                "status_id": 1,
                "type_id": 1,
                "name": "Coffee 250g",
                "article": "ART-001245",
                "sku": "SKU-001245",
                "price": 19.99,
                "estimated_price": 21.5,
                "image_url": null,
                "dimensions": {
                  "x": 105,
                  "y": 200,
                  "z": 32,
                  "unit": "mm"
                },
                "weight": {
                  "value": 250,
                  "unit": "g"
                },
                "datamatrix_required": true,
                "expiration_required": true,
                "comment": null,
                "description": "Ground coffee package",
                "barcodes": [
                  {
                    "barcode": "4601234567890",
                    "is_main": true
                  }
                ],
                "package": {
                  "kind": "unit",
                  "parent_product_id": null,
                  "base_product_id": null,
                  "multiplicity": null,
                  "base_multiplicity": null,
                  "depth": 0
                },
                "created_at": "2026-08-01T09:00:00Z",
                "updated_at": "2026-08-10T09:00:00Z"
              },
              "reservation": {
                "required_qty": 2,
                "reserved_qty": 2,
                "unreserved_qty": 0,
                "missing_qty": 0,
                "status": "reserved"
              },
              "reservation_items": [

              ],
              "created_at": "2026-08-10T09:00:00Z",
              "updated_at": "2026-08-10T09:00:00Z"
            }
          ],
          "datamatrix_codes": [
            {
              "id": 6101,
              "domain_id": 3,
              "warehouse_id": 42,
              "status_id": 1,
              "acceptance_id": 5101,
              "order_id": 49060,
              "product_id": 1201,
              "barcode": "04601234567890",
              "short_code": "ABC123",
              "crypto_tail": "CRYPTO",
              "datamatrix": "010460123456789021ABC123",
              "production_date": "2026-01-15",
              "expiration_date": "2027-01-15",
              "batch": "LOT-2026",
              "created_at": "2026-08-11T09:15:00Z",
              "updated_at": "2026-08-11T09:15:00Z",
              "used_at": null
            }
          ],
          "warehouse": {
            "id": 42,
            "name": "Warehouse Sofia",
            "type_id": 2,
            "parent_id": 41
          },
          "shop": {
            "id": 12,
            "name": "Demo Online Store",
            "status_id": 1
          },
          "company": {
            "id": 7,
            "name": "Demo Company",
            "legal_name": "Demo Company Ltd."
          },
          "place": null,
          "accumulation_place": null,
          "measurements": {
            "places": 1,
            "dimensions": {
              "x": 220,
              "y": 160,
              "z": 120,
              "unit": "mm"
            },
            "weight": {
              "value": 600,
              "unit": "g"
            }
          },
          "settings": {
            "blank_url": null
          },
          "consumables": [

          ],
          "wildberries": {
            "id": 2101,
            "account_id": 71,
            "wb_order_id": "900001234",
            "order_uid": "WB-UID-49060",
            "rid": "WB-RID-49060",
            "product_id": 1201,
            "state": "confirmed",
            "state_name": "Подтверждён",
            "fulfillment_state": "delivered",
            "fulfillment_state_name": "Доставлен",
            "supplier_status": "confirm",
            "wb_status": "sold",
            "supply_id": 3201,
            "external_supply_id": "WB-GI-740",
            "supply_state": "delivered",
            "delivery_type": "fbs",
            "cross_border_type": null,
            "is_b2b": false,
            "wb_warehouse_id": 507,
            "office_id": 507,
            "nm_id": 12345678,
            "chrt_id": 87654321,
            "article": "ART-001245",
            "skus": [
              "4601234567890"
            ],
            "required_meta": [
              "sgtin"
            ],
            "optional_meta": [

            ],
            "meta_state": "accepted",
            "sticker_state": "ready",
            "prices": {
              "price_minor": 1999,
              "final_price_minor": 1999,
              "sale_price_minor": 1999,
              "currency": "RUB"
            },
            "markings": [
              {
                "id": 1,
                "datamatrix_id": 6101,
                "type": "sgtin",
                "masked_value": "010460…ABC123",
                "value_hash": "sha256:example",
                "state": "accepted",
                "remote_decision": "accepted",
                "error_code": null,
                "error_message": null,
                "submitted_at": "2026-08-11T09:30:00Z",
                "verified_at": "2026-08-11T09:31:00Z",
                "ambiguous_at": null
              }
            ],
            "current_sticker": {
              "id": 3401,
              "kind": "order_sticker",
              "format": "png",
              "width": 580,
              "height": 400,
              "barcode": "WB-900001234",
              "part_a": "123456",
              "part_b": "7890",
              "content_hash": "sha256:sticker-example",
              "content_available": true,
              "is_current": true,
              "fetched_at": "2026-08-11T09:25:00Z",
              "last_printed_at": null,
              "print_count": 0
            },
            "last_error": {
              "code": null,
              "message": null
            },
            "remote_created_at": "2026-08-10T09:00:00Z",
            "seller_date": "2026-08-10",
            "delivery_date": "2026-08-12",
            "confirmed_at": "2026-08-11T09:20:00Z",
            "completed_at": "2026-08-11T10:15:00Z",
            "imported_at": "2026-08-10T09:05:00Z",
            "mapped_at": "2026-08-10T09:06:00Z",
            "reserved_at": "2026-08-11T09:10:00Z",
            "remote_status_checked_at": "2026-08-11T10:15:00Z"
          },
          "batch_matches": [

          ]
        }
      }
    ],
    "created_at": "2026-08-11T08:45:00Z",
    "updated_at": "2026-08-11T10:15:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
PUT /api/v2/send-documents/{id}

Update send document

operationIdreplaceSendDocuments
TagSend Documents
SecuritybearerAuth

Update send document. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/send-documents/740" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Shipment document ID. 740
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

ReplaceSendDocumentRequest required

Field Required Type Flags Constraints Description Example
data yes ReplaceSendDocumentPayload Shipment document update. Omitted fields remain unchanged; status transitions follow the administrative lifecycle rules.
data.status_id no integer:int64 | null 2
data.document_date no string:date | null "2026-08-11"
data.warehouse_id no integer:int64 | null min: 1 42
data.delivery_service_ids no array<integer:int64> minItems: 1
data.delivery_service_ids[] no integer:int64 min: 1 17
data.comment no string | null maxLength: 1000 "Передано перевозчику"

Request examples

default

{
  "data": {
    "status_id": 2,
    "comment": "Передано перевозчику"
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes SendDocument Outbound shipment document with its complete operational composition. Collection relations are empty unless requested through include; the item endpoint always loads them.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.domain_id no integer:int64 | null min: 1 3
data.status_id no integer:int64 | null 1
data.status no object | null
data.status.id yes integer:int64 1
data.status.name yes string "Открыт"
data.status.color no string | null "#2457c5"
data.status.background_color no string | null "#eaf0ff"
data.warehouse_id no integer:int64 | null min: 1 42
data.warehouse no object | null
data.warehouse.id yes integer:int64 min: 1 42
data.warehouse.name yes string "Warehouse Sofia"
data.warehouse.type_id no integer:int64 | null 2
data.warehouse.parent_id no integer:int64 | null min: 1 41
data.delivery_service_ids yes array<integer:int64>
data.delivery_service_ids[] no integer:int64 min: 1 17
data.delivery_services yes array<SendDocumentDeliveryService>
data.delivery_services[] no SendDocumentDeliveryService
data.delivery_services[].id yes integer:int64 min: 1 17
data.delivery_services[].name yes string "Wildberries FBS"
data.delivery_services[].status_id yes integer:int64 1
data.delivery_services[].external_id no string | null "wb-fbs"
data.delivery_services[].source_id no string | null "wildberries"
data.delivery_services[].delivery_type no string | null "pickup_point"
data.delivery_services[].is_courier yes boolean false
data.document_date no string:date | null "2026-08-11"
data.closed_at no string:date-time | null "2026-08-11T10:15:00Z"
data.comment no string | null "Wildberries shipment 740"
data.order_count yes integer:int64 min: 0 1
data.processing yes SendDocumentProcessing
data.processing.mode no string | null "standard"
data.processing.pipeline yes array<string>
data.processing.pipeline[] no string "assignment"
data.processing.state no string | null "open"
data.processing.batch_profile_id no integer:int64 | null min: 1 31
data.processing.batch_profile no object | null
data.processing.batch_profile.id yes integer:int64 min: 1 31
data.processing.batch_profile.name yes string "Standard packing"
data.processing.batch_profile.processing_mode no string | null "standard"
data.processing.composition_frozen_at no string:date-time | null "2026-07-14T10:30:00Z"
data.processing.batch_started_at no string:date-time | null "2026-07-14T10:30:00Z"
data.processing.batch_completed_at no string:date-time | null "2026-07-14T10:30:00Z"
data.wildberries yes SendDocumentWildberries Wildberries document-level state and safe supply/QR/sticker artifact metadata. Binary label content and encrypted provider payloads are not returned.
data.wildberries.fulfillment_state no string | null "delivered"
data.wildberries.error_message no string | null ""
data.wildberries.processed_at no string:date-time | null "2026-08-11T10:15:00Z"
data.wildberries.supplies yes array<object>
data.wildberries.supplies[] no object
data.orders yes array<SendDocumentOrderAssignment>
data.orders[] no SendDocumentOrderAssignment
data.orders[].assignment_id yes integer:int64 min: 1 8801
data.orders[].marked_at no string:date-time | null "2026-08-11T09:30:00Z"
data.orders[].created_at no string:date-time | null "2026-08-11T09:00:00Z"
data.orders[].updated_at no string:date-time | null "2026-08-11T09:30:00Z"
data.orders[].order yes object | null Complete order snapshot embedded into a shipment document. Marketplace and batch objects preserve provider-specific fields.
data.orders[].order.id yes integer:int64 min: 1 49060
data.orders[].order.external_id no string | null "WB-900001234"
data.orders[].order.status_id no integer:int64 | null 20
data.orders[].order.warehouse_id no integer:int64 | null min: 1 42
data.orders[].order.shop_id no integer:int64 | null min: 1 12
data.orders[].order.order_date no string:date | null "2026-08-10"
data.orders[].order.send_date no string:date | null "2026-08-11"
data.orders[].order.amounts no object | null
data.orders[].order.amounts.shipping_price no number:float | null 8.6
data.orders[].order.amounts.shipping_cost no number:float | null 0
data.orders[].order.amounts.sum no number:float | null 39.98
data.orders[].order.amounts.cod_sum no number:float | null 48.58
data.orders[].order.contact no object | null
data.orders[].order.contact.first_name no string | null "Ivan"
data.orders[].order.contact.middle_name no string | null "Ivanovich"
data.orders[].order.contact.last_name no string | null "Petrov"
data.orders[].order.contact.phone no string | null "+359888123456"
data.orders[].order.contact.email no string:email | null "customer@example.com"
data.orders[].order.contact.country_id no integer:int64 | null min: 1 100
data.orders[].order.contact.city_id no integer:int64 | null min: 1 200
data.orders[].order.contact.postcode no string | null "1000"
data.orders[].order.contact.latitude no number:float | null min: -90
max: 90
42.6977
data.orders[].order.contact.longitude no number:float | null min: -180
max: 180
23.3219
data.orders[].order.contact.full_address no string | null "1 Vitosha Boulevard, Sofia"
data.orders[].order.delivery no object | null
data.orders[].order.delivery.service_id no integer:int64 | null min: 1 1
data.orders[].order.delivery.delivery_type yes enum | null enum: door, pickup_point Normalized delivery channel derived from the configured delivery service. Null when the service type is unknown. "door"
data.orders[].order.delivery.is_courier yes boolean True for door delivery; false for pickup-point delivery or an unknown service type. true
data.orders[].order.delivery.status no string | null "created"
data.orders[].order.delivery.track_number no string | null "CDEK-123456789"
data.orders[].order.delivery.pickup_point_id no string | null "SOFIA-01"
data.orders[].order.delivery.source_id no string | null "cdek-15"
data.orders[].order.delivery.tariff_code no integer:int64 | null 136
data.orders[].order.delivery.additional_services no object Values of additional CDEK services configured for the selected integration. Boolean true enables a code-only service; other values are sent as the CDEK parameter. {"TRYING_ON":true,"PART_DELIV":false,"PACKAGE_1":2}
data.orders[].order.delivery.label no string:uri | null "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf"
data.orders[].order.delivery.delivery_date no string:date | null "2026-07-16"
data.orders[].order.delivery.delivery_time_start no string:time | null "09:00:00Z"
data.orders[].order.delivery.delivery_time_end no string:time | null "18:00:00Z"
data.orders[].order.comments no object | null
data.orders[].order.comments.delivery_service_text no string | null "Call before delivery"
data.orders[].order.comments.inner_text no string | null "VIP customer"
data.orders[].order.offers yes array<SendDocumentOrderLine>
data.orders[].order.offers[] no SendDocumentOrderLine
data.orders[].order.offers[].id yes integer:int64 min: 1 7001
data.orders[].order.offers[].product_id no integer:int64 | null min: 1 1201
data.orders[].order.offers[].quantity no number:float | null 2
data.orders[].order.offers[].estimated_price no number:float | null 19.5
data.orders[].order.offers[].price no number:float | null 19.99
data.orders[].order.offers[].expiration_date no string:date | null "2027-01-15"
data.orders[].order.offers[].batch no string | null "LOT-2026"
data.orders[].order.offers[].operation_user_id no integer:int64 | null min: 1 9
data.orders[].order.offers[].product no object | null
data.orders[].order.offers[].product.id yes integer:int64 min: 1 1201
data.orders[].order.offers[].product.external_id no string | null "EXT-10045"
data.orders[].order.offers[].product.domain_id no integer:int64 | null min: 1 3
data.orders[].order.offers[].product.shop_id no integer:int64 | null min: 1 12
data.orders[].order.offers[].product.status_id no enum:int64 | null enum: 1, 2, 3 1 - active; 2 - disabled; 3 - deleted. 1
data.orders[].order.offers[].product.type_id no integer:int64 | null 1
data.orders[].order.offers[].product.name yes string "Coffee 250g"
data.orders[].order.offers[].product.article no string | null "ART-001245"
data.orders[].order.offers[].product.sku no string | null "SKU-001245"
data.orders[].order.offers[].product.price no number:float | null 19.99
data.orders[].order.offers[].product.estimated_price no number:float | null 21.5
data.orders[].order.offers[].product.image_url no string:uri | null "https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg"
data.orders[].order.offers[].product.dimensions yes Dimensions
data.orders[].order.offers[].product.weight yes Weight
data.orders[].order.offers[].product.datamatrix_required yes boolean true
data.orders[].order.offers[].product.expiration_required yes boolean true
data.orders[].order.offers[].product.comment no string | null "Keep dry"
data.orders[].order.offers[].product.description no string | null "Ground coffee package"
data.orders[].order.offers[].product.barcodes yes array<ProductBarcode>
data.orders[].order.offers[].product.package yes object
data.orders[].order.offers[].product.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.offers[].product.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.offers[].reservation no object | null Reservation totals for one order line.
data.orders[].order.offers[].reservation.required_qty yes number:float 3
data.orders[].order.offers[].reservation.reserved_qty yes number:float 1
data.orders[].order.offers[].reservation.unreserved_qty yes number:float 2
data.orders[].order.offers[].reservation.missing_qty yes number:float 2
data.orders[].order.offers[].reservation.status yes enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.orders[].order.offers[].reservation_items no array<OrderReservationItem>
data.orders[].order.offers[].reservation_items[] no OrderReservationItem Physical product or expanded component used to explain a reservation shortage.
data.orders[].order.offers[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.offers[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.datamatrix_codes yes array<DataMatrix>
data.orders[].order.datamatrix_codes[] no DataMatrix Marked goods DataMatrix code.
data.orders[].order.datamatrix_codes[].id yes integer:int64 readOnly min: 1 1001
data.orders[].order.datamatrix_codes[].created_at no string:date | null readOnly Stored code upload date; date precision. "2026-10-19"
data.orders[].order.datamatrix_codes[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.datamatrix_codes[].domain_id no integer:int64 | null min: 1 3
data.orders[].order.datamatrix_codes[].warehouse_id no integer:int64 | null min: 1 42
data.orders[].order.datamatrix_codes[].status_id no enum:int64 | null enum: 0, 1, 2 0 - Imported and available for future warehouse operations. 1 - Reserved or attached by an operational document. 2 - Used by an outbound or completed operation. 0
data.orders[].order.datamatrix_codes[].acceptance_id no integer:int64 | null min: 1 5101
data.orders[].order.datamatrix_codes[].order_id no integer:int64 | null min: 1 8101
data.orders[].order.datamatrix_codes[].product_id no integer:int64 | null min: 1 1201
data.orders[].order.datamatrix_codes[].barcode no string | null maxLength: 14 "04601234567890"
data.orders[].order.datamatrix_codes[].short_code no string | null maxLength: 14 "ABC123"
data.orders[].order.datamatrix_codes[].crypto_tail no string | null "CRYPTO"
data.orders[].order.datamatrix_codes[].datamatrix no string | null maxLength: 125 "010460123456789021ABC123"
data.orders[].order.datamatrix_codes[].production_date no string:date | null "2026-01-15"
data.orders[].order.datamatrix_codes[].expiration_date no string:date | null "2027-01-15"
data.orders[].order.datamatrix_codes[].batch no string | null "LOT-2026"
data.orders[].order.datamatrix_codes[].used_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.datamatrix_codes[].accepted_at no string:date-time | null "2026-10-22T10:00:00+03:00"
data.orders[].order.datamatrix_codes[].shipped_at no string:date-time | null "2026-10-22T10:00:00+03:00"
data.orders[].order.warehouse no object | null
data.orders[].order.warehouse.id yes integer:int64 min: 1 42
data.orders[].order.warehouse.name yes string "Warehouse Sofia"
data.orders[].order.warehouse.type_id no integer:int64 | null 2
data.orders[].order.warehouse.parent_id no integer:int64 | null min: 1 41
data.orders[].order.shop no object | null
data.orders[].order.shop.id yes integer:int64 min: 1 12
data.orders[].order.shop.name yes string "Demo Online Store"
data.orders[].order.shop.status_id no integer:int64 | null 1
data.orders[].order.company no object | null
data.orders[].order.company.id yes integer:int64 min: 1 7
data.orders[].order.company.name yes string "Demo Company"
data.orders[].order.company.legal_name no string | null "Demo Company Ltd."
data.orders[].order.place no object | null
data.orders[].order.accumulation_place no object | null
data.orders[].order.measurements no object | null
data.orders[].order.settings no object | null
data.orders[].order.consumables yes array<object>
data.orders[].order.consumables[] no object
data.orders[].order.wildberries no object | null
data.orders[].order.wildberries.completed_at no string:date-time | null "2026-08-11T10:15:00Z"
data.orders[].order.batch_matches yes array<object>
data.orders[].order.batch_matches[] no object
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 740,
    "domain_id": 3,
    "status_id": 1,
    "status": {
      "id": 1,
      "name": "Открыт",
      "color": "#2457c5",
      "background_color": "#eaf0ff"
    },
    "warehouse_id": 42,
    "warehouse": {
      "id": 42,
      "name": "Warehouse Sofia",
      "type_id": 2,
      "parent_id": 41
    },
    "delivery_service_ids": [
      17
    ],
    "delivery_services": [
      {
        "id": 17,
        "name": "Wildberries FBS",
        "status_id": 1,
        "external_id": "wb-fbs",
        "source_id": "wildberries",
        "delivery_type": "pickup_point",
        "is_courier": false
      }
    ],
    "document_date": "2026-08-11",
    "closed_at": "2026-08-11T10:15:00Z",
    "comment": "Wildberries shipment 740",
    "order_count": 1,
    "processing": {
      "mode": "standard",
      "pipeline": [
        "assignment",
        "marking",
        "transfer"
      ],
      "state": "open",
      "batch_profile_id": null,
      "batch_profile": null,
      "composition_frozen_at": null,
      "batch_started_at": null,
      "batch_completed_at": null
    },
    "wildberries": {
      "fulfillment_state": "delivered",
      "error_message": null,
      "processed_at": "2026-08-11T10:15:00Z",
      "supplies": [
        {
          "id": 3201,
          "account_id": 71,
          "external_id": "WB-GI-740",
          "name": "Поставка 740",
          "state": "delivered",
          "state_name": "Доставлена",
          "destination_type": "office",
          "destination_office_id": 507,
          "is_automatic": false,
          "is_b2b": false,
          "cargo_type": "box",
          "cross_border_type": null,
          "order_count": 1,
          "current_qr": {
            "id": 3301,
            "kind": "supply_qr",
            "format": "svg",
            "width": 580,
            "height": 400,
            "barcode": "WB-GI-740",
            "part_a": null,
            "part_b": null,
            "content_hash": "sha256:qr-example",
            "content_available": true,
            "is_current": true,
            "fetched_at": "2026-08-11T09:00:00Z",
            "last_printed_at": null,
            "print_count": 0
          },
          "boxes": [

          ],
          "last_error": {
            "code": null,
            "message": null
          },
          "remote_created_at": "2026-08-11T09:00:00Z",
          "remote_closed_at": null,
          "last_synced_at": "2026-08-11T10:15:00Z",
          "delivered_at": "2026-08-11T10:15:00Z"
        }
      ]
    },
    "orders": [
      {
        "assignment_id": 8801,
        "marked_at": "2026-08-11T09:30:00Z",
        "created_at": "2026-08-11T09:00:00Z",
        "updated_at": "2026-08-11T09:30:00Z",
        "order": {
          "id": 49060,
          "external_id": "WB-900001234",
          "status_id": 20,
          "warehouse_id": 42,
          "shop_id": 12,
          "order_date": "2026-08-10",
          "send_date": "2026-08-11",
          "amounts": {
            "shipping_price": 0,
            "shipping_cost": 0,
            "sum": 39.98,
            "cod_sum": 0
          },
          "contact": {
            "first_name": "Иван",
            "middle_name": null,
            "last_name": "Петров",
            "phone": "+359888123456",
            "email": "customer@example.com",
            "country_id": 100,
            "city_id": 200,
            "postcode": "1000",
            "latitude": 42.6977,
            "longitude": 23.3219,
            "full_address": "Sofia"
          },
          "delivery": {
            "service_id": 17,
            "delivery_type": "pickup_point",
            "is_courier": false,
            "status": "created",
            "track_number": "WB-900001234",
            "pickup_point_id": "WB-SOF-01",
            "source_id": "wildberries",
            "tariff_code": null,
            "additional_services": {
            },
            "label": null,
            "delivery_date": "2026-08-12",
            "delivery_time_start": null,
            "delivery_time_end": null
          },
          "comments": {
            "delivery_service_text": null,
            "inner_text": "Клиентский пример для документа 740"
          },
          "offers": [
            {
              "id": 7001,
              "product_id": 1201,
              "quantity": 2,
              "estimated_price": 19.5,
              "price": 19.99,
              "expiration_date": "2027-01-15",
              "batch": "LOT-2026",
              "operation_user_id": 9,
              "product": {
                "id": 1201,
                "external_id": "EXT-10045",
                "shop_id": 12,
                "domain_id": 3,
                "status_id": 1,
                "type_id": 1,
                "name": "Coffee 250g",
                "article": "ART-001245",
                "sku": "SKU-001245",
                "price": 19.99,
                "estimated_price": 21.5,
                "image_url": null,
                "dimensions": {
                  "x": 105,
                  "y": 200,
                  "z": 32,
                  "unit": "mm"
                },
                "weight": {
                  "value": 250,
                  "unit": "g"
                },
                "datamatrix_required": true,
                "expiration_required": true,
                "comment": null,
                "description": "Ground coffee package",
                "barcodes": [
                  {
                    "barcode": "4601234567890",
                    "is_main": true
                  }
                ],
                "package": {
                  "kind": "unit",
                  "parent_product_id": null,
                  "base_product_id": null,
                  "multiplicity": null,
                  "base_multiplicity": null,
                  "depth": 0
                },
                "created_at": "2026-08-01T09:00:00Z",
                "updated_at": "2026-08-10T09:00:00Z"
              },
              "reservation": {
                "required_qty": 2,
                "reserved_qty": 2,
                "unreserved_qty": 0,
                "missing_qty": 0,
                "status": "reserved"
              },
              "reservation_items": [

              ],
              "created_at": "2026-08-10T09:00:00Z",
              "updated_at": "2026-08-10T09:00:00Z"
            }
          ],
          "datamatrix_codes": [
            {
              "id": 6101,
              "domain_id": 3,
              "warehouse_id": 42,
              "status_id": 1,
              "acceptance_id": 5101,
              "order_id": 49060,
              "product_id": 1201,
              "barcode": "04601234567890",
              "short_code": "ABC123",
              "crypto_tail": "CRYPTO",
              "datamatrix": "010460123456789021ABC123",
              "production_date": "2026-01-15",
              "expiration_date": "2027-01-15",
              "batch": "LOT-2026",
              "created_at": "2026-08-11T09:15:00Z",
              "updated_at": "2026-08-11T09:15:00Z",
              "used_at": null
            }
          ],
          "warehouse": {
            "id": 42,
            "name": "Warehouse Sofia",
            "type_id": 2,
            "parent_id": 41
          },
          "shop": {
            "id": 12,
            "name": "Demo Online Store",
            "status_id": 1
          },
          "company": {
            "id": 7,
            "name": "Demo Company",
            "legal_name": "Demo Company Ltd."
          },
          "place": null,
          "accumulation_place": null,
          "measurements": {
            "places": 1,
            "dimensions": {
              "x": 220,
              "y": 160,
              "z": 120,
              "unit": "mm"
            },
            "weight": {
              "value": 600,
              "unit": "g"
            }
          },
          "settings": {
            "blank_url": null
          },
          "consumables": [

          ],
          "wildberries": {
            "id": 2101,
            "account_id": 71,
            "wb_order_id": "900001234",
            "order_uid": "WB-UID-49060",
            "rid": "WB-RID-49060",
            "product_id": 1201,
            "state": "confirmed",
            "state_name": "Подтверждён",
            "fulfillment_state": "delivered",
            "fulfillment_state_name": "Доставлен",
            "supplier_status": "confirm",
            "wb_status": "sold",
            "supply_id": 3201,
            "external_supply_id": "WB-GI-740",
            "supply_state": "delivered",
            "delivery_type": "fbs",
            "cross_border_type": null,
            "is_b2b": false,
            "wb_warehouse_id": 507,
            "office_id": 507,
            "nm_id": 12345678,
            "chrt_id": 87654321,
            "article": "ART-001245",
            "skus": [
              "4601234567890"
            ],
            "required_meta": [
              "sgtin"
            ],
            "optional_meta": [

            ],
            "meta_state": "accepted",
            "sticker_state": "ready",
            "prices": {
              "price_minor": 1999,
              "final_price_minor": 1999,
              "sale_price_minor": 1999,
              "currency": "RUB"
            },
            "markings": [
              {
                "id": 1,
                "datamatrix_id": 6101,
                "type": "sgtin",
                "masked_value": "010460…ABC123",
                "value_hash": "sha256:example",
                "state": "accepted",
                "remote_decision": "accepted",
                "error_code": null,
                "error_message": null,
                "submitted_at": "2026-08-11T09:30:00Z",
                "verified_at": "2026-08-11T09:31:00Z",
                "ambiguous_at": null
              }
            ],
            "current_sticker": {
              "id": 3401,
              "kind": "order_sticker",
              "format": "png",
              "width": 580,
              "height": 400,
              "barcode": "WB-900001234",
              "part_a": "123456",
              "part_b": "7890",
              "content_hash": "sha256:sticker-example",
              "content_available": true,
              "is_current": true,
              "fetched_at": "2026-08-11T09:25:00Z",
              "last_printed_at": null,
              "print_count": 0
            },
            "last_error": {
              "code": null,
              "message": null
            },
            "remote_created_at": "2026-08-10T09:00:00Z",
            "seller_date": "2026-08-10",
            "delivery_date": "2026-08-12",
            "confirmed_at": "2026-08-11T09:20:00Z",
            "completed_at": "2026-08-11T10:15:00Z",
            "imported_at": "2026-08-10T09:05:00Z",
            "mapped_at": "2026-08-10T09:06:00Z",
            "reserved_at": "2026-08-11T09:10:00Z",
            "remote_status_checked_at": "2026-08-11T10:15:00Z"
          },
          "batch_matches": [

          ]
        }
      }
    ],
    "created_at": "2026-08-11T08:45:00Z",
    "updated_at": "2026-08-11T10:15:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

SendDocumentConflict

The shipment document lifecycle or composition does not allow the requested operation.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

documentStateConflict

{
  "message": "Состав документа уже заморожен.",
  "errors": {
    "send_document": [
      "Состав документа уже заморожен."
    ]
  }
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
PATCH /api/v2/send-documents/{id}

Update send document

operationIdpatchSendDocuments
TagSend Documents
SecuritybearerAuth

Update send document. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request PATCH "${NWMS_BASE_URL}/api/v2/send-documents/740" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Shipment document ID. 740
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

PatchSendDocumentRequest required

Field Required Type Flags Constraints Description Example
data yes PatchSendDocumentPayload Partial shipment document update. Omitted fields remain unchanged.
data.status_id no integer:int64 | null 2
data.document_date no string:date | null "2026-08-11"
data.warehouse_id no integer:int64 | null min: 1 42
data.delivery_service_ids no array<integer:int64> minItems: 1
data.delivery_service_ids[] no integer:int64 min: 1 17
data.comment no string | null maxLength: 1000 "Передано перевозчику"

Request examples

default

{
  "data": {
    "comment": "Передано перевозчику"
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes SendDocument Outbound shipment document with its complete operational composition. Collection relations are empty unless requested through include; the item endpoint always loads them.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.domain_id no integer:int64 | null min: 1 3
data.status_id no integer:int64 | null 1
data.status no object | null
data.status.id yes integer:int64 1
data.status.name yes string "Открыт"
data.status.color no string | null "#2457c5"
data.status.background_color no string | null "#eaf0ff"
data.warehouse_id no integer:int64 | null min: 1 42
data.warehouse no object | null
data.warehouse.id yes integer:int64 min: 1 42
data.warehouse.name yes string "Warehouse Sofia"
data.warehouse.type_id no integer:int64 | null 2
data.warehouse.parent_id no integer:int64 | null min: 1 41
data.delivery_service_ids yes array<integer:int64>
data.delivery_service_ids[] no integer:int64 min: 1 17
data.delivery_services yes array<SendDocumentDeliveryService>
data.delivery_services[] no SendDocumentDeliveryService
data.delivery_services[].id yes integer:int64 min: 1 17
data.delivery_services[].name yes string "Wildberries FBS"
data.delivery_services[].status_id yes integer:int64 1
data.delivery_services[].external_id no string | null "wb-fbs"
data.delivery_services[].source_id no string | null "wildberries"
data.delivery_services[].delivery_type no string | null "pickup_point"
data.delivery_services[].is_courier yes boolean false
data.document_date no string:date | null "2026-08-11"
data.closed_at no string:date-time | null "2026-08-11T10:15:00Z"
data.comment no string | null "Wildberries shipment 740"
data.order_count yes integer:int64 min: 0 1
data.processing yes SendDocumentProcessing
data.processing.mode no string | null "standard"
data.processing.pipeline yes array<string>
data.processing.pipeline[] no string "assignment"
data.processing.state no string | null "open"
data.processing.batch_profile_id no integer:int64 | null min: 1 31
data.processing.batch_profile no object | null
data.processing.batch_profile.id yes integer:int64 min: 1 31
data.processing.batch_profile.name yes string "Standard packing"
data.processing.batch_profile.processing_mode no string | null "standard"
data.processing.composition_frozen_at no string:date-time | null "2026-07-14T10:30:00Z"
data.processing.batch_started_at no string:date-time | null "2026-07-14T10:30:00Z"
data.processing.batch_completed_at no string:date-time | null "2026-07-14T10:30:00Z"
data.wildberries yes SendDocumentWildberries Wildberries document-level state and safe supply/QR/sticker artifact metadata. Binary label content and encrypted provider payloads are not returned.
data.wildberries.fulfillment_state no string | null "delivered"
data.wildberries.error_message no string | null ""
data.wildberries.processed_at no string:date-time | null "2026-08-11T10:15:00Z"
data.wildberries.supplies yes array<object>
data.wildberries.supplies[] no object
data.orders yes array<SendDocumentOrderAssignment>
data.orders[] no SendDocumentOrderAssignment
data.orders[].assignment_id yes integer:int64 min: 1 8801
data.orders[].marked_at no string:date-time | null "2026-08-11T09:30:00Z"
data.orders[].created_at no string:date-time | null "2026-08-11T09:00:00Z"
data.orders[].updated_at no string:date-time | null "2026-08-11T09:30:00Z"
data.orders[].order yes object | null Complete order snapshot embedded into a shipment document. Marketplace and batch objects preserve provider-specific fields.
data.orders[].order.id yes integer:int64 min: 1 49060
data.orders[].order.external_id no string | null "WB-900001234"
data.orders[].order.status_id no integer:int64 | null 20
data.orders[].order.warehouse_id no integer:int64 | null min: 1 42
data.orders[].order.shop_id no integer:int64 | null min: 1 12
data.orders[].order.order_date no string:date | null "2026-08-10"
data.orders[].order.send_date no string:date | null "2026-08-11"
data.orders[].order.amounts no object | null
data.orders[].order.amounts.shipping_price no number:float | null 8.6
data.orders[].order.amounts.shipping_cost no number:float | null 0
data.orders[].order.amounts.sum no number:float | null 39.98
data.orders[].order.amounts.cod_sum no number:float | null 48.58
data.orders[].order.contact no object | null
data.orders[].order.contact.first_name no string | null "Ivan"
data.orders[].order.contact.middle_name no string | null "Ivanovich"
data.orders[].order.contact.last_name no string | null "Petrov"
data.orders[].order.contact.phone no string | null "+359888123456"
data.orders[].order.contact.email no string:email | null "customer@example.com"
data.orders[].order.contact.country_id no integer:int64 | null min: 1 100
data.orders[].order.contact.city_id no integer:int64 | null min: 1 200
data.orders[].order.contact.postcode no string | null "1000"
data.orders[].order.contact.latitude no number:float | null min: -90
max: 90
42.6977
data.orders[].order.contact.longitude no number:float | null min: -180
max: 180
23.3219
data.orders[].order.contact.full_address no string | null "1 Vitosha Boulevard, Sofia"
data.orders[].order.delivery no object | null
data.orders[].order.delivery.service_id no integer:int64 | null min: 1 1
data.orders[].order.delivery.delivery_type yes enum | null enum: door, pickup_point Normalized delivery channel derived from the configured delivery service. Null when the service type is unknown. "door"
data.orders[].order.delivery.is_courier yes boolean True for door delivery; false for pickup-point delivery or an unknown service type. true
data.orders[].order.delivery.status no string | null "created"
data.orders[].order.delivery.track_number no string | null "CDEK-123456789"
data.orders[].order.delivery.pickup_point_id no string | null "SOFIA-01"
data.orders[].order.delivery.source_id no string | null "cdek-15"
data.orders[].order.delivery.tariff_code no integer:int64 | null 136
data.orders[].order.delivery.additional_services no object Values of additional CDEK services configured for the selected integration. Boolean true enables a code-only service; other values are sent as the CDEK parameter. {"TRYING_ON":true,"PART_DELIV":false,"PACKAGE_1":2}
data.orders[].order.delivery.label no string:uri | null "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf"
data.orders[].order.delivery.delivery_date no string:date | null "2026-07-16"
data.orders[].order.delivery.delivery_time_start no string:time | null "09:00:00Z"
data.orders[].order.delivery.delivery_time_end no string:time | null "18:00:00Z"
data.orders[].order.comments no object | null
data.orders[].order.comments.delivery_service_text no string | null "Call before delivery"
data.orders[].order.comments.inner_text no string | null "VIP customer"
data.orders[].order.offers yes array<SendDocumentOrderLine>
data.orders[].order.offers[] no SendDocumentOrderLine
data.orders[].order.offers[].id yes integer:int64 min: 1 7001
data.orders[].order.offers[].product_id no integer:int64 | null min: 1 1201
data.orders[].order.offers[].quantity no number:float | null 2
data.orders[].order.offers[].estimated_price no number:float | null 19.5
data.orders[].order.offers[].price no number:float | null 19.99
data.orders[].order.offers[].expiration_date no string:date | null "2027-01-15"
data.orders[].order.offers[].batch no string | null "LOT-2026"
data.orders[].order.offers[].operation_user_id no integer:int64 | null min: 1 9
data.orders[].order.offers[].product no object | null
data.orders[].order.offers[].product.id yes integer:int64 min: 1 1201
data.orders[].order.offers[].product.external_id no string | null "EXT-10045"
data.orders[].order.offers[].product.domain_id no integer:int64 | null min: 1 3
data.orders[].order.offers[].product.shop_id no integer:int64 | null min: 1 12
data.orders[].order.offers[].product.status_id no enum:int64 | null enum: 1, 2, 3 1 - active; 2 - disabled; 3 - deleted. 1
data.orders[].order.offers[].product.type_id no integer:int64 | null 1
data.orders[].order.offers[].product.name yes string "Coffee 250g"
data.orders[].order.offers[].product.article no string | null "ART-001245"
data.orders[].order.offers[].product.sku no string | null "SKU-001245"
data.orders[].order.offers[].product.price no number:float | null 19.99
data.orders[].order.offers[].product.estimated_price no number:float | null 21.5
data.orders[].order.offers[].product.image_url no string:uri | null "https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg"
data.orders[].order.offers[].product.dimensions yes Dimensions
data.orders[].order.offers[].product.weight yes Weight
data.orders[].order.offers[].product.datamatrix_required yes boolean true
data.orders[].order.offers[].product.expiration_required yes boolean true
data.orders[].order.offers[].product.comment no string | null "Keep dry"
data.orders[].order.offers[].product.description no string | null "Ground coffee package"
data.orders[].order.offers[].product.barcodes yes array<ProductBarcode>
data.orders[].order.offers[].product.package yes object
data.orders[].order.offers[].product.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.offers[].product.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.offers[].reservation no object | null Reservation totals for one order line.
data.orders[].order.offers[].reservation.required_qty yes number:float 3
data.orders[].order.offers[].reservation.reserved_qty yes number:float 1
data.orders[].order.offers[].reservation.unreserved_qty yes number:float 2
data.orders[].order.offers[].reservation.missing_qty yes number:float 2
data.orders[].order.offers[].reservation.status yes enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.orders[].order.offers[].reservation_items no array<OrderReservationItem>
data.orders[].order.offers[].reservation_items[] no OrderReservationItem Physical product or expanded component used to explain a reservation shortage.
data.orders[].order.offers[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.offers[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.datamatrix_codes yes array<DataMatrix>
data.orders[].order.datamatrix_codes[] no DataMatrix Marked goods DataMatrix code.
data.orders[].order.datamatrix_codes[].id yes integer:int64 readOnly min: 1 1001
data.orders[].order.datamatrix_codes[].created_at no string:date | null readOnly Stored code upload date; date precision. "2026-10-19"
data.orders[].order.datamatrix_codes[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.datamatrix_codes[].domain_id no integer:int64 | null min: 1 3
data.orders[].order.datamatrix_codes[].warehouse_id no integer:int64 | null min: 1 42
data.orders[].order.datamatrix_codes[].status_id no enum:int64 | null enum: 0, 1, 2 0 - Imported and available for future warehouse operations. 1 - Reserved or attached by an operational document. 2 - Used by an outbound or completed operation. 0
data.orders[].order.datamatrix_codes[].acceptance_id no integer:int64 | null min: 1 5101
data.orders[].order.datamatrix_codes[].order_id no integer:int64 | null min: 1 8101
data.orders[].order.datamatrix_codes[].product_id no integer:int64 | null min: 1 1201
data.orders[].order.datamatrix_codes[].barcode no string | null maxLength: 14 "04601234567890"
data.orders[].order.datamatrix_codes[].short_code no string | null maxLength: 14 "ABC123"
data.orders[].order.datamatrix_codes[].crypto_tail no string | null "CRYPTO"
data.orders[].order.datamatrix_codes[].datamatrix no string | null maxLength: 125 "010460123456789021ABC123"
data.orders[].order.datamatrix_codes[].production_date no string:date | null "2026-01-15"
data.orders[].order.datamatrix_codes[].expiration_date no string:date | null "2027-01-15"
data.orders[].order.datamatrix_codes[].batch no string | null "LOT-2026"
data.orders[].order.datamatrix_codes[].used_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.datamatrix_codes[].accepted_at no string:date-time | null "2026-10-22T10:00:00+03:00"
data.orders[].order.datamatrix_codes[].shipped_at no string:date-time | null "2026-10-22T10:00:00+03:00"
data.orders[].order.warehouse no object | null
data.orders[].order.warehouse.id yes integer:int64 min: 1 42
data.orders[].order.warehouse.name yes string "Warehouse Sofia"
data.orders[].order.warehouse.type_id no integer:int64 | null 2
data.orders[].order.warehouse.parent_id no integer:int64 | null min: 1 41
data.orders[].order.shop no object | null
data.orders[].order.shop.id yes integer:int64 min: 1 12
data.orders[].order.shop.name yes string "Demo Online Store"
data.orders[].order.shop.status_id no integer:int64 | null 1
data.orders[].order.company no object | null
data.orders[].order.company.id yes integer:int64 min: 1 7
data.orders[].order.company.name yes string "Demo Company"
data.orders[].order.company.legal_name no string | null "Demo Company Ltd."
data.orders[].order.place no object | null
data.orders[].order.accumulation_place no object | null
data.orders[].order.measurements no object | null
data.orders[].order.settings no object | null
data.orders[].order.consumables yes array<object>
data.orders[].order.consumables[] no object
data.orders[].order.wildberries no object | null
data.orders[].order.wildberries.completed_at no string:date-time | null "2026-08-11T10:15:00Z"
data.orders[].order.batch_matches yes array<object>
data.orders[].order.batch_matches[] no object
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 740,
    "domain_id": 3,
    "status_id": 1,
    "status": {
      "id": 1,
      "name": "Открыт",
      "color": "#2457c5",
      "background_color": "#eaf0ff"
    },
    "warehouse_id": 42,
    "warehouse": {
      "id": 42,
      "name": "Warehouse Sofia",
      "type_id": 2,
      "parent_id": 41
    },
    "delivery_service_ids": [
      17
    ],
    "delivery_services": [
      {
        "id": 17,
        "name": "Wildberries FBS",
        "status_id": 1,
        "external_id": "wb-fbs",
        "source_id": "wildberries",
        "delivery_type": "pickup_point",
        "is_courier": false
      }
    ],
    "document_date": "2026-08-11",
    "closed_at": "2026-08-11T10:15:00Z",
    "comment": "Wildberries shipment 740",
    "order_count": 1,
    "processing": {
      "mode": "standard",
      "pipeline": [
        "assignment",
        "marking",
        "transfer"
      ],
      "state": "open",
      "batch_profile_id": null,
      "batch_profile": null,
      "composition_frozen_at": null,
      "batch_started_at": null,
      "batch_completed_at": null
    },
    "wildberries": {
      "fulfillment_state": "delivered",
      "error_message": null,
      "processed_at": "2026-08-11T10:15:00Z",
      "supplies": [
        {
          "id": 3201,
          "account_id": 71,
          "external_id": "WB-GI-740",
          "name": "Поставка 740",
          "state": "delivered",
          "state_name": "Доставлена",
          "destination_type": "office",
          "destination_office_id": 507,
          "is_automatic": false,
          "is_b2b": false,
          "cargo_type": "box",
          "cross_border_type": null,
          "order_count": 1,
          "current_qr": {
            "id": 3301,
            "kind": "supply_qr",
            "format": "svg",
            "width": 580,
            "height": 400,
            "barcode": "WB-GI-740",
            "part_a": null,
            "part_b": null,
            "content_hash": "sha256:qr-example",
            "content_available": true,
            "is_current": true,
            "fetched_at": "2026-08-11T09:00:00Z",
            "last_printed_at": null,
            "print_count": 0
          },
          "boxes": [

          ],
          "last_error": {
            "code": null,
            "message": null
          },
          "remote_created_at": "2026-08-11T09:00:00Z",
          "remote_closed_at": null,
          "last_synced_at": "2026-08-11T10:15:00Z",
          "delivered_at": "2026-08-11T10:15:00Z"
        }
      ]
    },
    "orders": [
      {
        "assignment_id": 8801,
        "marked_at": "2026-08-11T09:30:00Z",
        "created_at": "2026-08-11T09:00:00Z",
        "updated_at": "2026-08-11T09:30:00Z",
        "order": {
          "id": 49060,
          "external_id": "WB-900001234",
          "status_id": 20,
          "warehouse_id": 42,
          "shop_id": 12,
          "order_date": "2026-08-10",
          "send_date": "2026-08-11",
          "amounts": {
            "shipping_price": 0,
            "shipping_cost": 0,
            "sum": 39.98,
            "cod_sum": 0
          },
          "contact": {
            "first_name": "Иван",
            "middle_name": null,
            "last_name": "Петров",
            "phone": "+359888123456",
            "email": "customer@example.com",
            "country_id": 100,
            "city_id": 200,
            "postcode": "1000",
            "latitude": 42.6977,
            "longitude": 23.3219,
            "full_address": "Sofia"
          },
          "delivery": {
            "service_id": 17,
            "delivery_type": "pickup_point",
            "is_courier": false,
            "status": "created",
            "track_number": "WB-900001234",
            "pickup_point_id": "WB-SOF-01",
            "source_id": "wildberries",
            "tariff_code": null,
            "additional_services": {
            },
            "label": null,
            "delivery_date": "2026-08-12",
            "delivery_time_start": null,
            "delivery_time_end": null
          },
          "comments": {
            "delivery_service_text": null,
            "inner_text": "Клиентский пример для документа 740"
          },
          "offers": [
            {
              "id": 7001,
              "product_id": 1201,
              "quantity": 2,
              "estimated_price": 19.5,
              "price": 19.99,
              "expiration_date": "2027-01-15",
              "batch": "LOT-2026",
              "operation_user_id": 9,
              "product": {
                "id": 1201,
                "external_id": "EXT-10045",
                "shop_id": 12,
                "domain_id": 3,
                "status_id": 1,
                "type_id": 1,
                "name": "Coffee 250g",
                "article": "ART-001245",
                "sku": "SKU-001245",
                "price": 19.99,
                "estimated_price": 21.5,
                "image_url": null,
                "dimensions": {
                  "x": 105,
                  "y": 200,
                  "z": 32,
                  "unit": "mm"
                },
                "weight": {
                  "value": 250,
                  "unit": "g"
                },
                "datamatrix_required": true,
                "expiration_required": true,
                "comment": null,
                "description": "Ground coffee package",
                "barcodes": [
                  {
                    "barcode": "4601234567890",
                    "is_main": true
                  }
                ],
                "package": {
                  "kind": "unit",
                  "parent_product_id": null,
                  "base_product_id": null,
                  "multiplicity": null,
                  "base_multiplicity": null,
                  "depth": 0
                },
                "created_at": "2026-08-01T09:00:00Z",
                "updated_at": "2026-08-10T09:00:00Z"
              },
              "reservation": {
                "required_qty": 2,
                "reserved_qty": 2,
                "unreserved_qty": 0,
                "missing_qty": 0,
                "status": "reserved"
              },
              "reservation_items": [

              ],
              "created_at": "2026-08-10T09:00:00Z",
              "updated_at": "2026-08-10T09:00:00Z"
            }
          ],
          "datamatrix_codes": [
            {
              "id": 6101,
              "domain_id": 3,
              "warehouse_id": 42,
              "status_id": 1,
              "acceptance_id": 5101,
              "order_id": 49060,
              "product_id": 1201,
              "barcode": "04601234567890",
              "short_code": "ABC123",
              "crypto_tail": "CRYPTO",
              "datamatrix": "010460123456789021ABC123",
              "production_date": "2026-01-15",
              "expiration_date": "2027-01-15",
              "batch": "LOT-2026",
              "created_at": "2026-08-11T09:15:00Z",
              "updated_at": "2026-08-11T09:15:00Z",
              "used_at": null
            }
          ],
          "warehouse": {
            "id": 42,
            "name": "Warehouse Sofia",
            "type_id": 2,
            "parent_id": 41
          },
          "shop": {
            "id": 12,
            "name": "Demo Online Store",
            "status_id": 1
          },
          "company": {
            "id": 7,
            "name": "Demo Company",
            "legal_name": "Demo Company Ltd."
          },
          "place": null,
          "accumulation_place": null,
          "measurements": {
            "places": 1,
            "dimensions": {
              "x": 220,
              "y": 160,
              "z": 120,
              "unit": "mm"
            },
            "weight": {
              "value": 600,
              "unit": "g"
            }
          },
          "settings": {
            "blank_url": null
          },
          "consumables": [

          ],
          "wildberries": {
            "id": 2101,
            "account_id": 71,
            "wb_order_id": "900001234",
            "order_uid": "WB-UID-49060",
            "rid": "WB-RID-49060",
            "product_id": 1201,
            "state": "confirmed",
            "state_name": "Подтверждён",
            "fulfillment_state": "delivered",
            "fulfillment_state_name": "Доставлен",
            "supplier_status": "confirm",
            "wb_status": "sold",
            "supply_id": 3201,
            "external_supply_id": "WB-GI-740",
            "supply_state": "delivered",
            "delivery_type": "fbs",
            "cross_border_type": null,
            "is_b2b": false,
            "wb_warehouse_id": 507,
            "office_id": 507,
            "nm_id": 12345678,
            "chrt_id": 87654321,
            "article": "ART-001245",
            "skus": [
              "4601234567890"
            ],
            "required_meta": [
              "sgtin"
            ],
            "optional_meta": [

            ],
            "meta_state": "accepted",
            "sticker_state": "ready",
            "prices": {
              "price_minor": 1999,
              "final_price_minor": 1999,
              "sale_price_minor": 1999,
              "currency": "RUB"
            },
            "markings": [
              {
                "id": 1,
                "datamatrix_id": 6101,
                "type": "sgtin",
                "masked_value": "010460…ABC123",
                "value_hash": "sha256:example",
                "state": "accepted",
                "remote_decision": "accepted",
                "error_code": null,
                "error_message": null,
                "submitted_at": "2026-08-11T09:30:00Z",
                "verified_at": "2026-08-11T09:31:00Z",
                "ambiguous_at": null
              }
            ],
            "current_sticker": {
              "id": 3401,
              "kind": "order_sticker",
              "format": "png",
              "width": 580,
              "height": 400,
              "barcode": "WB-900001234",
              "part_a": "123456",
              "part_b": "7890",
              "content_hash": "sha256:sticker-example",
              "content_available": true,
              "is_current": true,
              "fetched_at": "2026-08-11T09:25:00Z",
              "last_printed_at": null,
              "print_count": 0
            },
            "last_error": {
              "code": null,
              "message": null
            },
            "remote_created_at": "2026-08-10T09:00:00Z",
            "seller_date": "2026-08-10",
            "delivery_date": "2026-08-12",
            "confirmed_at": "2026-08-11T09:20:00Z",
            "completed_at": "2026-08-11T10:15:00Z",
            "imported_at": "2026-08-10T09:05:00Z",
            "mapped_at": "2026-08-10T09:06:00Z",
            "reserved_at": "2026-08-11T09:10:00Z",
            "remote_status_checked_at": "2026-08-11T10:15:00Z"
          },
          "batch_matches": [

          ]
        }
      }
    ],
    "created_at": "2026-08-11T08:45:00Z",
    "updated_at": "2026-08-11T10:15:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

SendDocumentConflict

The shipment document lifecycle or composition does not allow the requested operation.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

documentStateConflict

{
  "message": "Состав документа уже заморожен.",
  "errors": {
    "send_document": [
      "Состав документа уже заморожен."
    ]
  }
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
DELETE /api/v2/send-documents/{id}

Remove send document

operationIddeleteSendDocuments
TagSend Documents
SecuritybearerAuth

Deletes the resource when the authenticated account has permission and the current lifecycle state allows deletion. If deletion is blocked by related records or document state, the API returns a validation error.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request DELETE "${NWMS_BASE_URL}/api/v2/send-documents/740" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}"

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Shipment document ID. 740
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes object | null
meta yes object
meta.api_version yes enum enum: v2 "v2"
meta.deleted yes boolean true
meta.id yes integer:int64 min: 1 1001

Response examples

success

{
  "data": null,
  "meta": {
    "api_version": "v2",
    "deleted": true,
    "id": 740
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

SendDocumentConflict

The shipment document lifecycle or composition does not allow the requested operation.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

documentStateConflict

{
  "message": "Состав документа уже заморожен.",
  "errors": {
    "send_document": [
      "Состав документа уже заморожен."
    ]
  }
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
GET /api/v2/send-documents/{id}/events

List send document events

operationIdlistSendDocumentsEvents
TagSend Documents
SecuritybearerAuth

Returns send documents visible to the authenticated account. Use documented query parameters for filtering, sorting, and pagination.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/send-documents/740/events" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Shipment document ID. 740
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 500
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 100
sort query no string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, happened_at, created_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. "id"
id query no integer:int64 form true min: 1 Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. 1001
category query no string form true Filter by category using exact matching. The same filter may also be sent as filter[category] where supported by the Laravel query adapter. "document"
state query no string form true Filter by state using exact matching. The same filter may also be sent as filter[state] where supported by the Laravel query adapter. "ready"
direction query no string form true Filter by direction using exact matching. The same filter may also be sent as filter[direction] where supported by the Laravel query adapter. "outbound"
order_id query no integer:int64 form true min: 1 Filter by order_id using exact matching. The same filter may also be sent as filter[order_id] where supported by the Laravel query adapter. 1
product_id query no integer:int64 form true min: 1 Filter by product_id using exact matching. The same filter may also be sent as filter[product_id] where supported by the Laravel query adapter. 1201
event query no string form true Filter by event using partial text matching. The same filter may also be sent as filter[event] where supported by the Laravel query adapter. "order_attached"
error_message query no string form true Filter by error_message using partial text matching. The same filter may also be sent as filter[error_message] where supported by the Laravel query adapter. "Remote service rejected the shipment"
happened_at_from query no string:date form true Lower inclusive date boundary for happened_at. The same filter may also be sent as filter[happened_at_from] where supported by the Laravel query adapter. "2026-07-14"
happened_at_to query no string:date form true Upper inclusive date boundary for happened_at. The same filter may also be sent as filter[happened_at_to] where supported by the Laravel query adapter. "2026-07-14"
created_at_from query no string:date form true Lower inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_from] where supported by the Laravel query adapter. "2026-07-14"
created_at_to query no string:date form true Upper inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_to] where supported by the Laravel query adapter. "2026-07-14"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<SendDocumentAuditEvent>
data[] no SendDocumentAuditEvent Append-only audit event for a shipment document.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].category no string | null "document"
data[].event yes string "order_attached"
data[].state no string | null "open"
data[].direction no string | null "outbound"
data[].happened_at no string:date-time | null "2026-08-11T09:00:00Z"
data[].actor_id no integer:int64 | null min: 1 15
data[].actor_type no string | null "user"
data[].request_id no string | null "req-740-attach"
data[].order_id no integer:int64 | null min: 1 49060
data[].product_id no integer:int64 | null min: 1 1201
data[].entity_type no string | null "shipment"
data[].entity_id no integer:int64 | null min: 1 740
data[].context yes object
data[].error_code no string | null ""
data[].error_message no string | null ""
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "id": 9901,
      "category": "document",
      "event": "order_attached",
      "state": "open",
      "direction": "outbound",
      "happened_at": "2026-08-11T09:00:00Z",
      "actor_id": 15,
      "actor_type": "user",
      "request_id": "req-740-attach",
      "order_id": 49060,
      "product_id": null,
      "entity_type": "shipment",
      "entity_id": 740,
      "context": {
        "document_id": 740,
        "order_id": 49060
      },
      "error_code": null,
      "error_message": null,
      "created_at": "2026-08-11T09:00:00Z",
      "updated_at": "2026-08-11T09:00:00Z"
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/send-documents/740/events?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/send-documents/740/events?page=2",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/send-documents/740/events?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "https://betawms.ffcdek.ru/api/v2/send-documents/740/events",
    "per_page": 100,
    "to": 100,
    "total": 123
  }
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
POST /api/v2/send-documents/{id}/orders

Attach orders to send document

operationIdcreateSendDocumentsOrders
TagSend Documents
SecuritybearerAuth

Attach orders to send document. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/send-documents/740/orders" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Shipment document ID. 740
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

AttachSendDocumentOrdersRequest required

Field Required Type Flags Constraints Description Example
data yes AttachSendDocumentOrdersPayload Orders to attach. Every order must be visible to the caller and compatible with the document warehouse, delivery services and lifecycle state.
data.order_ids yes array<integer:int64> minItems: 1
maxItems: 100
data.order_ids[] no integer:int64 min: 1 49060

Request examples

default

{
  "data": {
    "order_ids": [
      49060
    ]
  }
}

Responses

201 Created.

Created.

Field Required Type Flags Constraints Description Example
data yes SendDocument Outbound shipment document with its complete operational composition. Collection relations are empty unless requested through include; the item endpoint always loads them.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.domain_id no integer:int64 | null min: 1 3
data.status_id no integer:int64 | null 1
data.status no object | null
data.status.id yes integer:int64 1
data.status.name yes string "Открыт"
data.status.color no string | null "#2457c5"
data.status.background_color no string | null "#eaf0ff"
data.warehouse_id no integer:int64 | null min: 1 42
data.warehouse no object | null
data.warehouse.id yes integer:int64 min: 1 42
data.warehouse.name yes string "Warehouse Sofia"
data.warehouse.type_id no integer:int64 | null 2
data.warehouse.parent_id no integer:int64 | null min: 1 41
data.delivery_service_ids yes array<integer:int64>
data.delivery_service_ids[] no integer:int64 min: 1 17
data.delivery_services yes array<SendDocumentDeliveryService>
data.delivery_services[] no SendDocumentDeliveryService
data.delivery_services[].id yes integer:int64 min: 1 17
data.delivery_services[].name yes string "Wildberries FBS"
data.delivery_services[].status_id yes integer:int64 1
data.delivery_services[].external_id no string | null "wb-fbs"
data.delivery_services[].source_id no string | null "wildberries"
data.delivery_services[].delivery_type no string | null "pickup_point"
data.delivery_services[].is_courier yes boolean false
data.document_date no string:date | null "2026-08-11"
data.closed_at no string:date-time | null "2026-08-11T10:15:00Z"
data.comment no string | null "Wildberries shipment 740"
data.order_count yes integer:int64 min: 0 1
data.processing yes SendDocumentProcessing
data.processing.mode no string | null "standard"
data.processing.pipeline yes array<string>
data.processing.pipeline[] no string "assignment"
data.processing.state no string | null "open"
data.processing.batch_profile_id no integer:int64 | null min: 1 31
data.processing.batch_profile no object | null
data.processing.batch_profile.id yes integer:int64 min: 1 31
data.processing.batch_profile.name yes string "Standard packing"
data.processing.batch_profile.processing_mode no string | null "standard"
data.processing.composition_frozen_at no string:date-time | null "2026-07-14T10:30:00Z"
data.processing.batch_started_at no string:date-time | null "2026-07-14T10:30:00Z"
data.processing.batch_completed_at no string:date-time | null "2026-07-14T10:30:00Z"
data.wildberries yes SendDocumentWildberries Wildberries document-level state and safe supply/QR/sticker artifact metadata. Binary label content and encrypted provider payloads are not returned.
data.wildberries.fulfillment_state no string | null "delivered"
data.wildberries.error_message no string | null ""
data.wildberries.processed_at no string:date-time | null "2026-08-11T10:15:00Z"
data.wildberries.supplies yes array<object>
data.wildberries.supplies[] no object
data.orders yes array<SendDocumentOrderAssignment>
data.orders[] no SendDocumentOrderAssignment
data.orders[].assignment_id yes integer:int64 min: 1 8801
data.orders[].marked_at no string:date-time | null "2026-08-11T09:30:00Z"
data.orders[].created_at no string:date-time | null "2026-08-11T09:00:00Z"
data.orders[].updated_at no string:date-time | null "2026-08-11T09:30:00Z"
data.orders[].order yes object | null Complete order snapshot embedded into a shipment document. Marketplace and batch objects preserve provider-specific fields.
data.orders[].order.id yes integer:int64 min: 1 49060
data.orders[].order.external_id no string | null "WB-900001234"
data.orders[].order.status_id no integer:int64 | null 20
data.orders[].order.warehouse_id no integer:int64 | null min: 1 42
data.orders[].order.shop_id no integer:int64 | null min: 1 12
data.orders[].order.order_date no string:date | null "2026-08-10"
data.orders[].order.send_date no string:date | null "2026-08-11"
data.orders[].order.amounts no object | null
data.orders[].order.amounts.shipping_price no number:float | null 8.6
data.orders[].order.amounts.shipping_cost no number:float | null 0
data.orders[].order.amounts.sum no number:float | null 39.98
data.orders[].order.amounts.cod_sum no number:float | null 48.58
data.orders[].order.contact no object | null
data.orders[].order.contact.first_name no string | null "Ivan"
data.orders[].order.contact.middle_name no string | null "Ivanovich"
data.orders[].order.contact.last_name no string | null "Petrov"
data.orders[].order.contact.phone no string | null "+359888123456"
data.orders[].order.contact.email no string:email | null "customer@example.com"
data.orders[].order.contact.country_id no integer:int64 | null min: 1 100
data.orders[].order.contact.city_id no integer:int64 | null min: 1 200
data.orders[].order.contact.postcode no string | null "1000"
data.orders[].order.contact.latitude no number:float | null min: -90
max: 90
42.6977
data.orders[].order.contact.longitude no number:float | null min: -180
max: 180
23.3219
data.orders[].order.contact.full_address no string | null "1 Vitosha Boulevard, Sofia"
data.orders[].order.delivery no object | null
data.orders[].order.delivery.service_id no integer:int64 | null min: 1 1
data.orders[].order.delivery.delivery_type yes enum | null enum: door, pickup_point Normalized delivery channel derived from the configured delivery service. Null when the service type is unknown. "door"
data.orders[].order.delivery.is_courier yes boolean True for door delivery; false for pickup-point delivery or an unknown service type. true
data.orders[].order.delivery.status no string | null "created"
data.orders[].order.delivery.track_number no string | null "CDEK-123456789"
data.orders[].order.delivery.pickup_point_id no string | null "SOFIA-01"
data.orders[].order.delivery.source_id no string | null "cdek-15"
data.orders[].order.delivery.tariff_code no integer:int64 | null 136
data.orders[].order.delivery.additional_services no object Values of additional CDEK services configured for the selected integration. Boolean true enables a code-only service; other values are sent as the CDEK parameter. {"TRYING_ON":true,"PART_DELIV":false,"PACKAGE_1":2}
data.orders[].order.delivery.label no string:uri | null "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf"
data.orders[].order.delivery.delivery_date no string:date | null "2026-07-16"
data.orders[].order.delivery.delivery_time_start no string:time | null "09:00:00Z"
data.orders[].order.delivery.delivery_time_end no string:time | null "18:00:00Z"
data.orders[].order.comments no object | null
data.orders[].order.comments.delivery_service_text no string | null "Call before delivery"
data.orders[].order.comments.inner_text no string | null "VIP customer"
data.orders[].order.offers yes array<SendDocumentOrderLine>
data.orders[].order.offers[] no SendDocumentOrderLine
data.orders[].order.offers[].id yes integer:int64 min: 1 7001
data.orders[].order.offers[].product_id no integer:int64 | null min: 1 1201
data.orders[].order.offers[].quantity no number:float | null 2
data.orders[].order.offers[].estimated_price no number:float | null 19.5
data.orders[].order.offers[].price no number:float | null 19.99
data.orders[].order.offers[].expiration_date no string:date | null "2027-01-15"
data.orders[].order.offers[].batch no string | null "LOT-2026"
data.orders[].order.offers[].operation_user_id no integer:int64 | null min: 1 9
data.orders[].order.offers[].product no object | null
data.orders[].order.offers[].product.id yes integer:int64 min: 1 1201
data.orders[].order.offers[].product.external_id no string | null "EXT-10045"
data.orders[].order.offers[].product.domain_id no integer:int64 | null min: 1 3
data.orders[].order.offers[].product.shop_id no integer:int64 | null min: 1 12
data.orders[].order.offers[].product.status_id no enum:int64 | null enum: 1, 2, 3 1 - active; 2 - disabled; 3 - deleted. 1
data.orders[].order.offers[].product.type_id no integer:int64 | null 1
data.orders[].order.offers[].product.name yes string "Coffee 250g"
data.orders[].order.offers[].product.article no string | null "ART-001245"
data.orders[].order.offers[].product.sku no string | null "SKU-001245"
data.orders[].order.offers[].product.price no number:float | null 19.99
data.orders[].order.offers[].product.estimated_price no number:float | null 21.5
data.orders[].order.offers[].product.image_url no string:uri | null "https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg"
data.orders[].order.offers[].product.dimensions yes Dimensions
data.orders[].order.offers[].product.weight yes Weight
data.orders[].order.offers[].product.datamatrix_required yes boolean true
data.orders[].order.offers[].product.expiration_required yes boolean true
data.orders[].order.offers[].product.comment no string | null "Keep dry"
data.orders[].order.offers[].product.description no string | null "Ground coffee package"
data.orders[].order.offers[].product.barcodes yes array<ProductBarcode>
data.orders[].order.offers[].product.package yes object
data.orders[].order.offers[].product.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.offers[].product.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.offers[].reservation no object | null Reservation totals for one order line.
data.orders[].order.offers[].reservation.required_qty yes number:float 3
data.orders[].order.offers[].reservation.reserved_qty yes number:float 1
data.orders[].order.offers[].reservation.unreserved_qty yes number:float 2
data.orders[].order.offers[].reservation.missing_qty yes number:float 2
data.orders[].order.offers[].reservation.status yes enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.orders[].order.offers[].reservation_items no array<OrderReservationItem>
data.orders[].order.offers[].reservation_items[] no OrderReservationItem Physical product or expanded component used to explain a reservation shortage.
data.orders[].order.offers[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.offers[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.datamatrix_codes yes array<DataMatrix>
data.orders[].order.datamatrix_codes[] no DataMatrix Marked goods DataMatrix code.
data.orders[].order.datamatrix_codes[].id yes integer:int64 readOnly min: 1 1001
data.orders[].order.datamatrix_codes[].created_at no string:date | null readOnly Stored code upload date; date precision. "2026-10-19"
data.orders[].order.datamatrix_codes[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.datamatrix_codes[].domain_id no integer:int64 | null min: 1 3
data.orders[].order.datamatrix_codes[].warehouse_id no integer:int64 | null min: 1 42
data.orders[].order.datamatrix_codes[].status_id no enum:int64 | null enum: 0, 1, 2 0 - Imported and available for future warehouse operations. 1 - Reserved or attached by an operational document. 2 - Used by an outbound or completed operation. 0
data.orders[].order.datamatrix_codes[].acceptance_id no integer:int64 | null min: 1 5101
data.orders[].order.datamatrix_codes[].order_id no integer:int64 | null min: 1 8101
data.orders[].order.datamatrix_codes[].product_id no integer:int64 | null min: 1 1201
data.orders[].order.datamatrix_codes[].barcode no string | null maxLength: 14 "04601234567890"
data.orders[].order.datamatrix_codes[].short_code no string | null maxLength: 14 "ABC123"
data.orders[].order.datamatrix_codes[].crypto_tail no string | null "CRYPTO"
data.orders[].order.datamatrix_codes[].datamatrix no string | null maxLength: 125 "010460123456789021ABC123"
data.orders[].order.datamatrix_codes[].production_date no string:date | null "2026-01-15"
data.orders[].order.datamatrix_codes[].expiration_date no string:date | null "2027-01-15"
data.orders[].order.datamatrix_codes[].batch no string | null "LOT-2026"
data.orders[].order.datamatrix_codes[].used_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.datamatrix_codes[].accepted_at no string:date-time | null "2026-10-22T10:00:00+03:00"
data.orders[].order.datamatrix_codes[].shipped_at no string:date-time | null "2026-10-22T10:00:00+03:00"
data.orders[].order.warehouse no object | null
data.orders[].order.warehouse.id yes integer:int64 min: 1 42
data.orders[].order.warehouse.name yes string "Warehouse Sofia"
data.orders[].order.warehouse.type_id no integer:int64 | null 2
data.orders[].order.warehouse.parent_id no integer:int64 | null min: 1 41
data.orders[].order.shop no object | null
data.orders[].order.shop.id yes integer:int64 min: 1 12
data.orders[].order.shop.name yes string "Demo Online Store"
data.orders[].order.shop.status_id no integer:int64 | null 1
data.orders[].order.company no object | null
data.orders[].order.company.id yes integer:int64 min: 1 7
data.orders[].order.company.name yes string "Demo Company"
data.orders[].order.company.legal_name no string | null "Demo Company Ltd."
data.orders[].order.place no object | null
data.orders[].order.accumulation_place no object | null
data.orders[].order.measurements no object | null
data.orders[].order.settings no object | null
data.orders[].order.consumables yes array<object>
data.orders[].order.consumables[] no object
data.orders[].order.wildberries no object | null
data.orders[].order.wildberries.completed_at no string:date-time | null "2026-08-11T10:15:00Z"
data.orders[].order.batch_matches yes array<object>
data.orders[].order.batch_matches[] no object
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 740,
    "domain_id": 3,
    "status_id": 1,
    "status": {
      "id": 1,
      "name": "Открыт",
      "color": "#2457c5",
      "background_color": "#eaf0ff"
    },
    "warehouse_id": 42,
    "warehouse": {
      "id": 42,
      "name": "Warehouse Sofia",
      "type_id": 2,
      "parent_id": 41
    },
    "delivery_service_ids": [
      17
    ],
    "delivery_services": [
      {
        "id": 17,
        "name": "Wildberries FBS",
        "status_id": 1,
        "external_id": "wb-fbs",
        "source_id": "wildberries",
        "delivery_type": "pickup_point",
        "is_courier": false
      }
    ],
    "document_date": "2026-08-11",
    "closed_at": "2026-08-11T10:15:00Z",
    "comment": "Wildberries shipment 740",
    "order_count": 1,
    "processing": {
      "mode": "standard",
      "pipeline": [
        "assignment",
        "marking",
        "transfer"
      ],
      "state": "open",
      "batch_profile_id": null,
      "batch_profile": null,
      "composition_frozen_at": null,
      "batch_started_at": null,
      "batch_completed_at": null
    },
    "wildberries": {
      "fulfillment_state": "delivered",
      "error_message": null,
      "processed_at": "2026-08-11T10:15:00Z",
      "supplies": [
        {
          "id": 3201,
          "account_id": 71,
          "external_id": "WB-GI-740",
          "name": "Поставка 740",
          "state": "delivered",
          "state_name": "Доставлена",
          "destination_type": "office",
          "destination_office_id": 507,
          "is_automatic": false,
          "is_b2b": false,
          "cargo_type": "box",
          "cross_border_type": null,
          "order_count": 1,
          "current_qr": {
            "id": 3301,
            "kind": "supply_qr",
            "format": "svg",
            "width": 580,
            "height": 400,
            "barcode": "WB-GI-740",
            "part_a": null,
            "part_b": null,
            "content_hash": "sha256:qr-example",
            "content_available": true,
            "is_current": true,
            "fetched_at": "2026-08-11T09:00:00Z",
            "last_printed_at": null,
            "print_count": 0
          },
          "boxes": [

          ],
          "last_error": {
            "code": null,
            "message": null
          },
          "remote_created_at": "2026-08-11T09:00:00Z",
          "remote_closed_at": null,
          "last_synced_at": "2026-08-11T10:15:00Z",
          "delivered_at": "2026-08-11T10:15:00Z"
        }
      ]
    },
    "orders": [
      {
        "assignment_id": 8801,
        "marked_at": "2026-08-11T09:30:00Z",
        "created_at": "2026-08-11T09:00:00Z",
        "updated_at": "2026-08-11T09:30:00Z",
        "order": {
          "id": 49060,
          "external_id": "WB-900001234",
          "status_id": 20,
          "warehouse_id": 42,
          "shop_id": 12,
          "order_date": "2026-08-10",
          "send_date": "2026-08-11",
          "amounts": {
            "shipping_price": 0,
            "shipping_cost": 0,
            "sum": 39.98,
            "cod_sum": 0
          },
          "contact": {
            "first_name": "Иван",
            "middle_name": null,
            "last_name": "Петров",
            "phone": "+359888123456",
            "email": "customer@example.com",
            "country_id": 100,
            "city_id": 200,
            "postcode": "1000",
            "latitude": 42.6977,
            "longitude": 23.3219,
            "full_address": "Sofia"
          },
          "delivery": {
            "service_id": 17,
            "delivery_type": "pickup_point",
            "is_courier": false,
            "status": "created",
            "track_number": "WB-900001234",
            "pickup_point_id": "WB-SOF-01",
            "source_id": "wildberries",
            "tariff_code": null,
            "additional_services": {
            },
            "label": null,
            "delivery_date": "2026-08-12",
            "delivery_time_start": null,
            "delivery_time_end": null
          },
          "comments": {
            "delivery_service_text": null,
            "inner_text": "Клиентский пример для документа 740"
          },
          "offers": [
            {
              "id": 7001,
              "product_id": 1201,
              "quantity": 2,
              "estimated_price": 19.5,
              "price": 19.99,
              "expiration_date": "2027-01-15",
              "batch": "LOT-2026",
              "operation_user_id": 9,
              "product": {
                "id": 1201,
                "external_id": "EXT-10045",
                "shop_id": 12,
                "domain_id": 3,
                "status_id": 1,
                "type_id": 1,
                "name": "Coffee 250g",
                "article": "ART-001245",
                "sku": "SKU-001245",
                "price": 19.99,
                "estimated_price": 21.5,
                "image_url": null,
                "dimensions": {
                  "x": 105,
                  "y": 200,
                  "z": 32,
                  "unit": "mm"
                },
                "weight": {
                  "value": 250,
                  "unit": "g"
                },
                "datamatrix_required": true,
                "expiration_required": true,
                "comment": null,
                "description": "Ground coffee package",
                "barcodes": [
                  {
                    "barcode": "4601234567890",
                    "is_main": true
                  }
                ],
                "package": {
                  "kind": "unit",
                  "parent_product_id": null,
                  "base_product_id": null,
                  "multiplicity": null,
                  "base_multiplicity": null,
                  "depth": 0
                },
                "created_at": "2026-08-01T09:00:00Z",
                "updated_at": "2026-08-10T09:00:00Z"
              },
              "reservation": {
                "required_qty": 2,
                "reserved_qty": 2,
                "unreserved_qty": 0,
                "missing_qty": 0,
                "status": "reserved"
              },
              "reservation_items": [

              ],
              "created_at": "2026-08-10T09:00:00Z",
              "updated_at": "2026-08-10T09:00:00Z"
            }
          ],
          "datamatrix_codes": [
            {
              "id": 6101,
              "domain_id": 3,
              "warehouse_id": 42,
              "status_id": 1,
              "acceptance_id": 5101,
              "order_id": 49060,
              "product_id": 1201,
              "barcode": "04601234567890",
              "short_code": "ABC123",
              "crypto_tail": "CRYPTO",
              "datamatrix": "010460123456789021ABC123",
              "production_date": "2026-01-15",
              "expiration_date": "2027-01-15",
              "batch": "LOT-2026",
              "created_at": "2026-08-11T09:15:00Z",
              "updated_at": "2026-08-11T09:15:00Z",
              "used_at": null
            }
          ],
          "warehouse": {
            "id": 42,
            "name": "Warehouse Sofia",
            "type_id": 2,
            "parent_id": 41
          },
          "shop": {
            "id": 12,
            "name": "Demo Online Store",
            "status_id": 1
          },
          "company": {
            "id": 7,
            "name": "Demo Company",
            "legal_name": "Demo Company Ltd."
          },
          "place": null,
          "accumulation_place": null,
          "measurements": {
            "places": 1,
            "dimensions": {
              "x": 220,
              "y": 160,
              "z": 120,
              "unit": "mm"
            },
            "weight": {
              "value": 600,
              "unit": "g"
            }
          },
          "settings": {
            "blank_url": null
          },
          "consumables": [

          ],
          "wildberries": {
            "id": 2101,
            "account_id": 71,
            "wb_order_id": "900001234",
            "order_uid": "WB-UID-49060",
            "rid": "WB-RID-49060",
            "product_id": 1201,
            "state": "confirmed",
            "state_name": "Подтверждён",
            "fulfillment_state": "delivered",
            "fulfillment_state_name": "Доставлен",
            "supplier_status": "confirm",
            "wb_status": "sold",
            "supply_id": 3201,
            "external_supply_id": "WB-GI-740",
            "supply_state": "delivered",
            "delivery_type": "fbs",
            "cross_border_type": null,
            "is_b2b": false,
            "wb_warehouse_id": 507,
            "office_id": 507,
            "nm_id": 12345678,
            "chrt_id": 87654321,
            "article": "ART-001245",
            "skus": [
              "4601234567890"
            ],
            "required_meta": [
              "sgtin"
            ],
            "optional_meta": [

            ],
            "meta_state": "accepted",
            "sticker_state": "ready",
            "prices": {
              "price_minor": 1999,
              "final_price_minor": 1999,
              "sale_price_minor": 1999,
              "currency": "RUB"
            },
            "markings": [
              {
                "id": 1,
                "datamatrix_id": 6101,
                "type": "sgtin",
                "masked_value": "010460…ABC123",
                "value_hash": "sha256:example",
                "state": "accepted",
                "remote_decision": "accepted",
                "error_code": null,
                "error_message": null,
                "submitted_at": "2026-08-11T09:30:00Z",
                "verified_at": "2026-08-11T09:31:00Z",
                "ambiguous_at": null
              }
            ],
            "current_sticker": {
              "id": 3401,
              "kind": "order_sticker",
              "format": "png",
              "width": 580,
              "height": 400,
              "barcode": "WB-900001234",
              "part_a": "123456",
              "part_b": "7890",
              "content_hash": "sha256:sticker-example",
              "content_available": true,
              "is_current": true,
              "fetched_at": "2026-08-11T09:25:00Z",
              "last_printed_at": null,
              "print_count": 0
            },
            "last_error": {
              "code": null,
              "message": null
            },
            "remote_created_at": "2026-08-10T09:00:00Z",
            "seller_date": "2026-08-10",
            "delivery_date": "2026-08-12",
            "confirmed_at": "2026-08-11T09:20:00Z",
            "completed_at": "2026-08-11T10:15:00Z",
            "imported_at": "2026-08-10T09:05:00Z",
            "mapped_at": "2026-08-10T09:06:00Z",
            "reserved_at": "2026-08-11T09:10:00Z",
            "remote_status_checked_at": "2026-08-11T10:15:00Z"
          },
          "batch_matches": [

          ]
        }
      }
    ],
    "created_at": "2026-08-11T08:45:00Z",
    "updated_at": "2026-08-11T10:15:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

SendDocumentConflict

The shipment document lifecycle or composition does not allow the requested operation.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

documentStateConflict

{
  "message": "Состав документа уже заморожен.",
  "errors": {
    "send_document": [
      "Состав документа уже заморожен."
    ]
  }
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
DELETE /api/v2/send-documents/{id}/orders/{orderId}

Detach order from send document

operationIddeleteSendDocumentsOrders
TagSend Documents
SecuritybearerAuth

Deletes the resource when the authenticated account has permission and the current lifecycle state allows deletion. If deletion is blocked by related records or document state, the API returns a validation error.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request DELETE "${NWMS_BASE_URL}/api/v2/send-documents/740/orders/49060" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}"

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Shipment document ID. 740
orderId path yes integer:int64 min: 1 Order ID assigned to the shipment document. 49060
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes SendDocument Outbound shipment document with its complete operational composition. Collection relations are empty unless requested through include; the item endpoint always loads them.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.domain_id no integer:int64 | null min: 1 3
data.status_id no integer:int64 | null 1
data.status no object | null
data.status.id yes integer:int64 1
data.status.name yes string "Открыт"
data.status.color no string | null "#2457c5"
data.status.background_color no string | null "#eaf0ff"
data.warehouse_id no integer:int64 | null min: 1 42
data.warehouse no object | null
data.warehouse.id yes integer:int64 min: 1 42
data.warehouse.name yes string "Warehouse Sofia"
data.warehouse.type_id no integer:int64 | null 2
data.warehouse.parent_id no integer:int64 | null min: 1 41
data.delivery_service_ids yes array<integer:int64>
data.delivery_service_ids[] no integer:int64 min: 1 17
data.delivery_services yes array<SendDocumentDeliveryService>
data.delivery_services[] no SendDocumentDeliveryService
data.delivery_services[].id yes integer:int64 min: 1 17
data.delivery_services[].name yes string "Wildberries FBS"
data.delivery_services[].status_id yes integer:int64 1
data.delivery_services[].external_id no string | null "wb-fbs"
data.delivery_services[].source_id no string | null "wildberries"
data.delivery_services[].delivery_type no string | null "pickup_point"
data.delivery_services[].is_courier yes boolean false
data.document_date no string:date | null "2026-08-11"
data.closed_at no string:date-time | null "2026-08-11T10:15:00Z"
data.comment no string | null "Wildberries shipment 740"
data.order_count yes integer:int64 min: 0 1
data.processing yes SendDocumentProcessing
data.processing.mode no string | null "standard"
data.processing.pipeline yes array<string>
data.processing.pipeline[] no string "assignment"
data.processing.state no string | null "open"
data.processing.batch_profile_id no integer:int64 | null min: 1 31
data.processing.batch_profile no object | null
data.processing.batch_profile.id yes integer:int64 min: 1 31
data.processing.batch_profile.name yes string "Standard packing"
data.processing.batch_profile.processing_mode no string | null "standard"
data.processing.composition_frozen_at no string:date-time | null "2026-07-14T10:30:00Z"
data.processing.batch_started_at no string:date-time | null "2026-07-14T10:30:00Z"
data.processing.batch_completed_at no string:date-time | null "2026-07-14T10:30:00Z"
data.wildberries yes SendDocumentWildberries Wildberries document-level state and safe supply/QR/sticker artifact metadata. Binary label content and encrypted provider payloads are not returned.
data.wildberries.fulfillment_state no string | null "delivered"
data.wildberries.error_message no string | null ""
data.wildberries.processed_at no string:date-time | null "2026-08-11T10:15:00Z"
data.wildberries.supplies yes array<object>
data.wildberries.supplies[] no object
data.orders yes array<SendDocumentOrderAssignment>
data.orders[] no SendDocumentOrderAssignment
data.orders[].assignment_id yes integer:int64 min: 1 8801
data.orders[].marked_at no string:date-time | null "2026-08-11T09:30:00Z"
data.orders[].created_at no string:date-time | null "2026-08-11T09:00:00Z"
data.orders[].updated_at no string:date-time | null "2026-08-11T09:30:00Z"
data.orders[].order yes object | null Complete order snapshot embedded into a shipment document. Marketplace and batch objects preserve provider-specific fields.
data.orders[].order.id yes integer:int64 min: 1 49060
data.orders[].order.external_id no string | null "WB-900001234"
data.orders[].order.status_id no integer:int64 | null 20
data.orders[].order.warehouse_id no integer:int64 | null min: 1 42
data.orders[].order.shop_id no integer:int64 | null min: 1 12
data.orders[].order.order_date no string:date | null "2026-08-10"
data.orders[].order.send_date no string:date | null "2026-08-11"
data.orders[].order.amounts no object | null
data.orders[].order.amounts.shipping_price no number:float | null 8.6
data.orders[].order.amounts.shipping_cost no number:float | null 0
data.orders[].order.amounts.sum no number:float | null 39.98
data.orders[].order.amounts.cod_sum no number:float | null 48.58
data.orders[].order.contact no object | null
data.orders[].order.contact.first_name no string | null "Ivan"
data.orders[].order.contact.middle_name no string | null "Ivanovich"
data.orders[].order.contact.last_name no string | null "Petrov"
data.orders[].order.contact.phone no string | null "+359888123456"
data.orders[].order.contact.email no string:email | null "customer@example.com"
data.orders[].order.contact.country_id no integer:int64 | null min: 1 100
data.orders[].order.contact.city_id no integer:int64 | null min: 1 200
data.orders[].order.contact.postcode no string | null "1000"
data.orders[].order.contact.latitude no number:float | null min: -90
max: 90
42.6977
data.orders[].order.contact.longitude no number:float | null min: -180
max: 180
23.3219
data.orders[].order.contact.full_address no string | null "1 Vitosha Boulevard, Sofia"
data.orders[].order.delivery no object | null
data.orders[].order.delivery.service_id no integer:int64 | null min: 1 1
data.orders[].order.delivery.delivery_type yes enum | null enum: door, pickup_point Normalized delivery channel derived from the configured delivery service. Null when the service type is unknown. "door"
data.orders[].order.delivery.is_courier yes boolean True for door delivery; false for pickup-point delivery or an unknown service type. true
data.orders[].order.delivery.status no string | null "created"
data.orders[].order.delivery.track_number no string | null "CDEK-123456789"
data.orders[].order.delivery.pickup_point_id no string | null "SOFIA-01"
data.orders[].order.delivery.source_id no string | null "cdek-15"
data.orders[].order.delivery.tariff_code no integer:int64 | null 136
data.orders[].order.delivery.additional_services no object Values of additional CDEK services configured for the selected integration. Boolean true enables a code-only service; other values are sent as the CDEK parameter. {"TRYING_ON":true,"PART_DELIV":false,"PACKAGE_1":2}
data.orders[].order.delivery.label no string:uri | null "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf"
data.orders[].order.delivery.delivery_date no string:date | null "2026-07-16"
data.orders[].order.delivery.delivery_time_start no string:time | null "09:00:00Z"
data.orders[].order.delivery.delivery_time_end no string:time | null "18:00:00Z"
data.orders[].order.comments no object | null
data.orders[].order.comments.delivery_service_text no string | null "Call before delivery"
data.orders[].order.comments.inner_text no string | null "VIP customer"
data.orders[].order.offers yes array<SendDocumentOrderLine>
data.orders[].order.offers[] no SendDocumentOrderLine
data.orders[].order.offers[].id yes integer:int64 min: 1 7001
data.orders[].order.offers[].product_id no integer:int64 | null min: 1 1201
data.orders[].order.offers[].quantity no number:float | null 2
data.orders[].order.offers[].estimated_price no number:float | null 19.5
data.orders[].order.offers[].price no number:float | null 19.99
data.orders[].order.offers[].expiration_date no string:date | null "2027-01-15"
data.orders[].order.offers[].batch no string | null "LOT-2026"
data.orders[].order.offers[].operation_user_id no integer:int64 | null min: 1 9
data.orders[].order.offers[].product no object | null
data.orders[].order.offers[].product.id yes integer:int64 min: 1 1201
data.orders[].order.offers[].product.external_id no string | null "EXT-10045"
data.orders[].order.offers[].product.domain_id no integer:int64 | null min: 1 3
data.orders[].order.offers[].product.shop_id no integer:int64 | null min: 1 12
data.orders[].order.offers[].product.status_id no enum:int64 | null enum: 1, 2, 3 1 - active; 2 - disabled; 3 - deleted. 1
data.orders[].order.offers[].product.type_id no integer:int64 | null 1
data.orders[].order.offers[].product.name yes string "Coffee 250g"
data.orders[].order.offers[].product.article no string | null "ART-001245"
data.orders[].order.offers[].product.sku no string | null "SKU-001245"
data.orders[].order.offers[].product.price no number:float | null 19.99
data.orders[].order.offers[].product.estimated_price no number:float | null 21.5
data.orders[].order.offers[].product.image_url no string:uri | null "https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg"
data.orders[].order.offers[].product.dimensions yes Dimensions
data.orders[].order.offers[].product.weight yes Weight
data.orders[].order.offers[].product.datamatrix_required yes boolean true
data.orders[].order.offers[].product.expiration_required yes boolean true
data.orders[].order.offers[].product.comment no string | null "Keep dry"
data.orders[].order.offers[].product.description no string | null "Ground coffee package"
data.orders[].order.offers[].product.barcodes yes array<ProductBarcode>
data.orders[].order.offers[].product.package yes object
data.orders[].order.offers[].product.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.offers[].product.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.offers[].reservation no object | null Reservation totals for one order line.
data.orders[].order.offers[].reservation.required_qty yes number:float 3
data.orders[].order.offers[].reservation.reserved_qty yes number:float 1
data.orders[].order.offers[].reservation.unreserved_qty yes number:float 2
data.orders[].order.offers[].reservation.missing_qty yes number:float 2
data.orders[].order.offers[].reservation.status yes enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.orders[].order.offers[].reservation_items no array<OrderReservationItem>
data.orders[].order.offers[].reservation_items[] no OrderReservationItem Physical product or expanded component used to explain a reservation shortage.
data.orders[].order.offers[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.offers[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.datamatrix_codes yes array<DataMatrix>
data.orders[].order.datamatrix_codes[] no DataMatrix Marked goods DataMatrix code.
data.orders[].order.datamatrix_codes[].id yes integer:int64 readOnly min: 1 1001
data.orders[].order.datamatrix_codes[].created_at no string:date | null readOnly Stored code upload date; date precision. "2026-10-19"
data.orders[].order.datamatrix_codes[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.datamatrix_codes[].domain_id no integer:int64 | null min: 1 3
data.orders[].order.datamatrix_codes[].warehouse_id no integer:int64 | null min: 1 42
data.orders[].order.datamatrix_codes[].status_id no enum:int64 | null enum: 0, 1, 2 0 - Imported and available for future warehouse operations. 1 - Reserved or attached by an operational document. 2 - Used by an outbound or completed operation. 0
data.orders[].order.datamatrix_codes[].acceptance_id no integer:int64 | null min: 1 5101
data.orders[].order.datamatrix_codes[].order_id no integer:int64 | null min: 1 8101
data.orders[].order.datamatrix_codes[].product_id no integer:int64 | null min: 1 1201
data.orders[].order.datamatrix_codes[].barcode no string | null maxLength: 14 "04601234567890"
data.orders[].order.datamatrix_codes[].short_code no string | null maxLength: 14 "ABC123"
data.orders[].order.datamatrix_codes[].crypto_tail no string | null "CRYPTO"
data.orders[].order.datamatrix_codes[].datamatrix no string | null maxLength: 125 "010460123456789021ABC123"
data.orders[].order.datamatrix_codes[].production_date no string:date | null "2026-01-15"
data.orders[].order.datamatrix_codes[].expiration_date no string:date | null "2027-01-15"
data.orders[].order.datamatrix_codes[].batch no string | null "LOT-2026"
data.orders[].order.datamatrix_codes[].used_at no string:date-time | null "2026-07-14T10:30:00Z"
data.orders[].order.datamatrix_codes[].accepted_at no string:date-time | null "2026-10-22T10:00:00+03:00"
data.orders[].order.datamatrix_codes[].shipped_at no string:date-time | null "2026-10-22T10:00:00+03:00"
data.orders[].order.warehouse no object | null
data.orders[].order.warehouse.id yes integer:int64 min: 1 42
data.orders[].order.warehouse.name yes string "Warehouse Sofia"
data.orders[].order.warehouse.type_id no integer:int64 | null 2
data.orders[].order.warehouse.parent_id no integer:int64 | null min: 1 41
data.orders[].order.shop no object | null
data.orders[].order.shop.id yes integer:int64 min: 1 12
data.orders[].order.shop.name yes string "Demo Online Store"
data.orders[].order.shop.status_id no integer:int64 | null 1
data.orders[].order.company no object | null
data.orders[].order.company.id yes integer:int64 min: 1 7
data.orders[].order.company.name yes string "Demo Company"
data.orders[].order.company.legal_name no string | null "Demo Company Ltd."
data.orders[].order.place no object | null
data.orders[].order.accumulation_place no object | null
data.orders[].order.measurements no object | null
data.orders[].order.settings no object | null
data.orders[].order.consumables yes array<object>
data.orders[].order.consumables[] no object
data.orders[].order.wildberries no object | null
data.orders[].order.wildberries.completed_at no string:date-time | null "2026-08-11T10:15:00Z"
data.orders[].order.batch_matches yes array<object>
data.orders[].order.batch_matches[] no object
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 740,
    "domain_id": 3,
    "status_id": 1,
    "status": {
      "id": 1,
      "name": "Открыт",
      "color": "#2457c5",
      "background_color": "#eaf0ff"
    },
    "warehouse_id": 42,
    "warehouse": {
      "id": 42,
      "name": "Warehouse Sofia",
      "type_id": 2,
      "parent_id": 41
    },
    "delivery_service_ids": [
      17
    ],
    "delivery_services": [
      {
        "id": 17,
        "name": "Wildberries FBS",
        "status_id": 1,
        "external_id": "wb-fbs",
        "source_id": "wildberries",
        "delivery_type": "pickup_point",
        "is_courier": false
      }
    ],
    "document_date": "2026-08-11",
    "closed_at": "2026-08-11T10:15:00Z",
    "comment": "Wildberries shipment 740",
    "order_count": 1,
    "processing": {
      "mode": "standard",
      "pipeline": [
        "assignment",
        "marking",
        "transfer"
      ],
      "state": "open",
      "batch_profile_id": null,
      "batch_profile": null,
      "composition_frozen_at": null,
      "batch_started_at": null,
      "batch_completed_at": null
    },
    "wildberries": {
      "fulfillment_state": "delivered",
      "error_message": null,
      "processed_at": "2026-08-11T10:15:00Z",
      "supplies": [
        {
          "id": 3201,
          "account_id": 71,
          "external_id": "WB-GI-740",
          "name": "Поставка 740",
          "state": "delivered",
          "state_name": "Доставлена",
          "destination_type": "office",
          "destination_office_id": 507,
          "is_automatic": false,
          "is_b2b": false,
          "cargo_type": "box",
          "cross_border_type": null,
          "order_count": 1,
          "current_qr": {
            "id": 3301,
            "kind": "supply_qr",
            "format": "svg",
            "width": 580,
            "height": 400,
            "barcode": "WB-GI-740",
            "part_a": null,
            "part_b": null,
            "content_hash": "sha256:qr-example",
            "content_available": true,
            "is_current": true,
            "fetched_at": "2026-08-11T09:00:00Z",
            "last_printed_at": null,
            "print_count": 0
          },
          "boxes": [

          ],
          "last_error": {
            "code": null,
            "message": null
          },
          "remote_created_at": "2026-08-11T09:00:00Z",
          "remote_closed_at": null,
          "last_synced_at": "2026-08-11T10:15:00Z",
          "delivered_at": "2026-08-11T10:15:00Z"
        }
      ]
    },
    "orders": [
      {
        "assignment_id": 8801,
        "marked_at": "2026-08-11T09:30:00Z",
        "created_at": "2026-08-11T09:00:00Z",
        "updated_at": "2026-08-11T09:30:00Z",
        "order": {
          "id": 49060,
          "external_id": "WB-900001234",
          "status_id": 20,
          "warehouse_id": 42,
          "shop_id": 12,
          "order_date": "2026-08-10",
          "send_date": "2026-08-11",
          "amounts": {
            "shipping_price": 0,
            "shipping_cost": 0,
            "sum": 39.98,
            "cod_sum": 0
          },
          "contact": {
            "first_name": "Иван",
            "middle_name": null,
            "last_name": "Петров",
            "phone": "+359888123456",
            "email": "customer@example.com",
            "country_id": 100,
            "city_id": 200,
            "postcode": "1000",
            "latitude": 42.6977,
            "longitude": 23.3219,
            "full_address": "Sofia"
          },
          "delivery": {
            "service_id": 17,
            "delivery_type": "pickup_point",
            "is_courier": false,
            "status": "created",
            "track_number": "WB-900001234",
            "pickup_point_id": "WB-SOF-01",
            "source_id": "wildberries",
            "tariff_code": null,
            "additional_services": {
            },
            "label": null,
            "delivery_date": "2026-08-12",
            "delivery_time_start": null,
            "delivery_time_end": null
          },
          "comments": {
            "delivery_service_text": null,
            "inner_text": "Клиентский пример для документа 740"
          },
          "offers": [
            {
              "id": 7001,
              "product_id": 1201,
              "quantity": 2,
              "estimated_price": 19.5,
              "price": 19.99,
              "expiration_date": "2027-01-15",
              "batch": "LOT-2026",
              "operation_user_id": 9,
              "product": {
                "id": 1201,
                "external_id": "EXT-10045",
                "shop_id": 12,
                "domain_id": 3,
                "status_id": 1,
                "type_id": 1,
                "name": "Coffee 250g",
                "article": "ART-001245",
                "sku": "SKU-001245",
                "price": 19.99,
                "estimated_price": 21.5,
                "image_url": null,
                "dimensions": {
                  "x": 105,
                  "y": 200,
                  "z": 32,
                  "unit": "mm"
                },
                "weight": {
                  "value": 250,
                  "unit": "g"
                },
                "datamatrix_required": true,
                "expiration_required": true,
                "comment": null,
                "description": "Ground coffee package",
                "barcodes": [
                  {
                    "barcode": "4601234567890",
                    "is_main": true
                  }
                ],
                "package": {
                  "kind": "unit",
                  "parent_product_id": null,
                  "base_product_id": null,
                  "multiplicity": null,
                  "base_multiplicity": null,
                  "depth": 0
                },
                "created_at": "2026-08-01T09:00:00Z",
                "updated_at": "2026-08-10T09:00:00Z"
              },
              "reservation": {
                "required_qty": 2,
                "reserved_qty": 2,
                "unreserved_qty": 0,
                "missing_qty": 0,
                "status": "reserved"
              },
              "reservation_items": [

              ],
              "created_at": "2026-08-10T09:00:00Z",
              "updated_at": "2026-08-10T09:00:00Z"
            }
          ],
          "datamatrix_codes": [
            {
              "id": 6101,
              "domain_id": 3,
              "warehouse_id": 42,
              "status_id": 1,
              "acceptance_id": 5101,
              "order_id": 49060,
              "product_id": 1201,
              "barcode": "04601234567890",
              "short_code": "ABC123",
              "crypto_tail": "CRYPTO",
              "datamatrix": "010460123456789021ABC123",
              "production_date": "2026-01-15",
              "expiration_date": "2027-01-15",
              "batch": "LOT-2026",
              "created_at": "2026-08-11T09:15:00Z",
              "updated_at": "2026-08-11T09:15:00Z",
              "used_at": null
            }
          ],
          "warehouse": {
            "id": 42,
            "name": "Warehouse Sofia",
            "type_id": 2,
            "parent_id": 41
          },
          "shop": {
            "id": 12,
            "name": "Demo Online Store",
            "status_id": 1
          },
          "company": {
            "id": 7,
            "name": "Demo Company",
            "legal_name": "Demo Company Ltd."
          },
          "place": null,
          "accumulation_place": null,
          "measurements": {
            "places": 1,
            "dimensions": {
              "x": 220,
              "y": 160,
              "z": 120,
              "unit": "mm"
            },
            "weight": {
              "value": 600,
              "unit": "g"
            }
          },
          "settings": {
            "blank_url": null
          },
          "consumables": [

          ],
          "wildberries": {
            "id": 2101,
            "account_id": 71,
            "wb_order_id": "900001234",
            "order_uid": "WB-UID-49060",
            "rid": "WB-RID-49060",
            "product_id": 1201,
            "state": "confirmed",
            "state_name": "Подтверждён",
            "fulfillment_state": "delivered",
            "fulfillment_state_name": "Доставлен",
            "supplier_status": "confirm",
            "wb_status": "sold",
            "supply_id": 3201,
            "external_supply_id": "WB-GI-740",
            "supply_state": "delivered",
            "delivery_type": "fbs",
            "cross_border_type": null,
            "is_b2b": false,
            "wb_warehouse_id": 507,
            "office_id": 507,
            "nm_id": 12345678,
            "chrt_id": 87654321,
            "article": "ART-001245",
            "skus": [
              "4601234567890"
            ],
            "required_meta": [
              "sgtin"
            ],
            "optional_meta": [

            ],
            "meta_state": "accepted",
            "sticker_state": "ready",
            "prices": {
              "price_minor": 1999,
              "final_price_minor": 1999,
              "sale_price_minor": 1999,
              "currency": "RUB"
            },
            "markings": [
              {
                "id": 1,
                "datamatrix_id": 6101,
                "type": "sgtin",
                "masked_value": "010460…ABC123",
                "value_hash": "sha256:example",
                "state": "accepted",
                "remote_decision": "accepted",
                "error_code": null,
                "error_message": null,
                "submitted_at": "2026-08-11T09:30:00Z",
                "verified_at": "2026-08-11T09:31:00Z",
                "ambiguous_at": null
              }
            ],
            "current_sticker": {
              "id": 3401,
              "kind": "order_sticker",
              "format": "png",
              "width": 580,
              "height": 400,
              "barcode": "WB-900001234",
              "part_a": "123456",
              "part_b": "7890",
              "content_hash": "sha256:sticker-example",
              "content_available": true,
              "is_current": true,
              "fetched_at": "2026-08-11T09:25:00Z",
              "last_printed_at": null,
              "print_count": 0
            },
            "last_error": {
              "code": null,
              "message": null
            },
            "remote_created_at": "2026-08-10T09:00:00Z",
            "seller_date": "2026-08-10",
            "delivery_date": "2026-08-12",
            "confirmed_at": "2026-08-11T09:20:00Z",
            "completed_at": "2026-08-11T10:15:00Z",
            "imported_at": "2026-08-10T09:05:00Z",
            "mapped_at": "2026-08-10T09:06:00Z",
            "reserved_at": "2026-08-11T09:10:00Z",
            "remote_status_checked_at": "2026-08-11T10:15:00Z"
          },
          "batch_matches": [

          ]
        }
      }
    ],
    "created_at": "2026-08-11T08:45:00Z",
    "updated_at": "2026-08-11T10:15:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

SendDocumentConflict

The shipment document lifecycle or composition does not allow the requested operation.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

documentStateConflict

{
  "message": "Состав документа уже заморожен.",
  "errors": {
    "send_document": [
      "Состав документа уже заморожен."
    ]
  }
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}

Shops

GET /api/v2/shops

List shops

operationIdlistShops
TagShops
SecuritybearerAuth

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"
}
POST /api/v2/shops

Create shop

operationIdcreateShops
TagShops
SecuritybearerAuth

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.json

Parameters

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 /api/v2/shops/{id}

Get shop

operationIdgetShops
TagShops
SecuritybearerAuth

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"
}
PUT /api/v2/shops/{id}

Update shop

operationIdreplaceShops
TagShops
SecuritybearerAuth

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.json

Parameters

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"
}
PATCH /api/v2/shops/{id}

Update shop

operationIdpatchShops
TagShops
SecuritybearerAuth

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.json

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Shop ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

PatchShopRequest required

Field Required Type Flags Constraints Description Example
data yes PatchShopPayload
data.name no string | null minLength: 1 "Demo Online Store"
data.status_id no integer:int64 | null 1
data.owner_user_id no integer:int64 | null min: 1 15
data.composite_items_enabled no boolean false
data.custom_label_enabled no boolean false
data.custom_label no string | null "CDEK label"

Request examples

default

{
  "data": {
    "custom_label_enabled": false
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes Shop Merchant shop account.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.name yes string "Demo Online Store"
data.status_id no integer:int64 | null 1
data.domain_id no integer:int64 | null min: 1 3
data.owner_user_id no integer:int64 | null min: 1 15
data.composite_items_enabled no boolean false
data.custom_label_enabled no boolean false
data.custom_label no string | null "CDEK label"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 12,
    "name": "Demo Online Store",
    "status_id": 1,
    "domain_id": 3,
    "owner_user_id": 15,
    "composite_items_enabled": false,
    "custom_label_enabled": false,
    "custom_label": null,
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}

Stock Movements

GET /api/v2/stock-movements

List stock movements

operationIdlistStockMovements
TagStock Movements
SecuritybearerAuth

Returns stock movements visible to the authenticated account. Use documented query parameters for filtering, sorting, and pagination.
For incremental export, request sort=id&after_id=<last_seen_id>. The after_id boundary is exclusive. Use the greatest returned id as the next high-water mark. The endpoint does not provide snapshot isolation; rows inserted concurrently with greater IDs may appear in later calls.
Both sides of one relocation use movement_type=stock_transfer and share the same non-null movement_group_id; use that opaque value to correlate the negative and positive rows.
Since the picking-lot update, actual picking appends two atomic order rows: operation=reservation_release has positive quantity_delta for the former reservation, and operation=physical_issue has negative quantity_delta with the actual batch, production_date and expiration_date. Each pair shares movement_group_id and sums to zero, preserving cumulative availability. Do not sum only negative order rows as consumption: that would count both the reservation and the physical issue. Use source=order_picking.issue to select new physical issues. Earlier rows are not rewritten; historical current picked lots can be read from orders.
transfer_kind distinguishes within_warehouse (document types 3/4) and between_warehouses (6/7); movement_group_id is opaque. stock_after remains null. The journal does not cover every manual loss/correction path.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Since the picking-lot update, actual picking appends two atomic order rows: operation=reservation_release has positive quantity_delta for the former reservation, and operation=physical_issue has negative quantity_delta with the actual batch, production_date and expiration_date. Each pair shares movement_group_id and sums to zero, preserving cumulative availability. Do not sum only negative order rows as consumption: that would count both the reservation and the physical issue. Use source=order_picking.issue to select new physical issues. Earlier rows are not rewritten; historical current picked lots can be read from orders.
transfer_kind distinguishes within_warehouse (document types 3/4) and between_warehouses (6/7); movement_group_id is opaque. stock_after remains null. The journal does not cover every manual loss/correction path.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Since the picking-lot update, actual picking appends two atomic order rows: operation=reservation_release has positive quantity_delta for the former reservation, and operation=physical_issue has negative quantity_delta with the actual batch, production_date and expiration_date. Each pair shares movement_group_id and sums to zero, preserving cumulative availability. Do not sum only negative order rows as consumption: that would count both the reservation and the physical issue. Use source=order_picking.issue to select new physical issues. Earlier rows are not rewritten; historical current picked lots can be read from orders.
transfer_kind distinguishes within_warehouse (document types 3/4) and between_warehouses (6/7); movement_group_id is opaque. stock_after remains null. The journal does not cover every manual loss/correction path.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Since the picking-lot update, actual picking appends two atomic order rows: operation=reservation_release has positive quantity_delta for the former reservation, and operation=physical_issue has negative quantity_delta with the actual batch, production_date and expiration_date. Each pair shares movement_group_id and sums to zero, preserving cumulative availability. Do not sum only negative order rows as consumption: that would count both the reservation and the physical issue. Use source=order_picking.issue to select new physical issues. Earlier rows are not rewritten; historical current picked lots can be read from orders.
transfer_kind distinguishes within_warehouse (document types 3/4) and between_warehouses (6/7); movement_group_id is opaque. stock_after remains null. The journal does not cover every manual loss/correction path.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Since the picking-lot update, actual picking appends two atomic order rows: operation=reservation_release has positive quantity_delta for the former reservation, and operation=physical_issue has negative quantity_delta with the actual batch, production_date and expiration_date. Each pair shares movement_group_id and sums to zero, preserving cumulative availability. Do not sum only negative order rows as consumption: that would count both the reservation and the physical issue. Use source=order_picking.issue to select new physical issues. Earlier rows are not rewritten; historical current picked lots can be read from orders.
transfer_kind distinguishes within_warehouse (document types 3/4) and between_warehouses (6/7); movement_group_id is opaque. stock_after remains null. The journal does not cover every manual loss/correction path.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Since the picking-lot update, actual picking appends two atomic order rows: operation=reservation_release has positive quantity_delta for the former reservation, and operation=physical_issue has negative quantity_delta with the actual batch, production_date and expiration_date. Each pair shares movement_group_id and sums to zero, preserving cumulative availability. Do not sum only negative order rows as consumption: that would count both the reservation and the physical issue. Use source=order_picking.issue to select new physical issues. Earlier rows are not rewritten; historical current picked lots can be read from orders.
transfer_kind distinguishes within_warehouse (document types 3/4) and between_warehouses (6/7); movement_group_id is opaque. stock_after remains null. The journal does not cover every manual loss/correction path.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/stock-movements" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 500
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 100
sort query no string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, occurred_at, created_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. "id"
after_id query no integer:int64 form true min: 0 Use sort=id and after_id for incremental export. The after_id boundary is exclusive (id > after_id). The same filter may also be sent as filter[after_id] where supported by the Laravel query adapter. 1000
id query no integer:int64 form true min: 1 Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. 1001
warehouse_id query no integer:int64 form true min: 1 Filter by warehouse_id using exact matching. The same filter may also be sent as filter[warehouse_id] where supported by the Laravel query adapter. 42
product_id query no integer:int64 form true min: 1 Filter by product_id using exact matching. The same filter may also be sent as filter[product_id] where supported by the Laravel query adapter. 1201
base_product_id query no integer:int64 form true min: 1 Filter by base_product_id using exact matching. The same filter may also be sent as filter[base_product_id] where supported by the Laravel query adapter. 1200
document_type_id query no integer:int64 form true min: 1 Filter by document_type_id using exact matching. The same filter may also be sent as filter[document_type_id] where supported by the Laravel query adapter. 1
document_id query no integer:int64 form true min: 1 Filter by document_id using exact matching. The same filter may also be sent as filter[document_id] where supported by the Laravel query adapter. 5101
movement_type query no string form true Filter by movement_type using exact matching. The same filter may also be sent as filter[movement_type] where supported by the Laravel query adapter. "stock_transfer"
movement_group_id query no string form true Filter by movement_group_id using exact matching. The same filter may also be sent as filter[movement_group_id] where supported by the Laravel query adapter. "relocation:1722099600000000"
source query no string form true Filter by source using exact matching. The same filter may also be sent as filter[source] where supported by the Laravel query adapter. "api"
barcode query no string form true Filter by barcode using partial text matching. The same filter may also be sent as filter[barcode] where supported by the Laravel query adapter. "4601234567890"
batch query no string form true Filter by batch using partial text matching. The same filter may also be sent as filter[batch] where supported by the Laravel query adapter. "LOT-2026"
occurred_at_from query no string:date form true Lower inclusive date boundary for occurred_at. The same filter may also be sent as filter[occurred_at_from] where supported by the Laravel query adapter. "2026-07-14"
occurred_at_to query no string:date form true Upper inclusive date boundary for occurred_at. The same filter may also be sent as filter[occurred_at_to] where supported by the Laravel query adapter. "2026-07-14"
created_at_from query no string:date form true Lower inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_from] where supported by the Laravel query adapter. "2026-07-14"
created_at_to query no string:date form true Upper inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_to] where supported by the Laravel query adapter. "2026-07-14"
production_date_from query no string:date form true Lower inclusive date boundary for production_date. The same filter may also be sent as filter[production_date_from] where supported by the Laravel query adapter. "2026-07-14"
production_date_to query no string:date form true Upper inclusive date boundary for production_date. The same filter may also be sent as filter[production_date_to] where supported by the Laravel query adapter. "2026-07-14"
expiration_date_from query no string:date form true Lower inclusive date boundary for expiration_date. The same filter may also be sent as filter[expiration_date_from] where supported by the Laravel query adapter. "2026-07-14"
expiration_date_to query no string:date form true Upper inclusive date boundary for expiration_date. The same filter may also be sent as filter[expiration_date_to] where supported by the Laravel query adapter. "2026-07-14"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<StockMovement>
data[] no StockMovement Append-only stock movement journal row.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].movement_type yes StockMovementType Stock movement type emitted by the backend. Current values are acceptance, order, stock_transfer, inventory, quant_unpacking, and movement. The set may grow when new document sources are added. "stock_transfer"
data[].movement_group_id yes string | null Opaque correlation ID shared by both sides of one relocation or stock-transfer line. "relocation:1722099600000000"
data[].source no string | null "api"
data[].domain_id no integer:int64 | null min: 1 3
data[].warehouse_id no integer:int64 | null min: 1 42
data[].product_id no integer:int64 | null min: 1 1201
data[].base_product_id no integer:int64 | null min: 1 1200
data[].quantity_delta no number:float | null -2
data[].base_quantity_delta no number:float | null -12
data[].stock_after no number:float | null 18
data[].document no StockMovementDocument
data[].document.type_id no integer:int64 | null 3
data[].document.id no integer:int64 | null min: 1 8101
data[].document.line_id no integer:int64 | null min: 1 7001
data[].place_id no integer:int64 | null min: 1 501
data[].barcode no string | null "4601234567890"
data[].batch no string | null "LOT-2026"
data[].production_date no string:date | null "2026-01-15"
data[].expiration_date no string:date | null "2027-01-15"
data[].occurred_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].transfer_kind no enum | null enum: within_warehouse, between_warehouses "within_warehouse"
data[].operation no enum | null enum: reservation_release, physical_issue Set for new picking audit pairs; null for older and other operations. "physical_issue"
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "id": 120001,
      "movement_type": "stock_transfer",
      "movement_group_id": "relocation:1722099600000000",
      "source": "api",
      "domain_id": 3,
      "warehouse_id": 42,
      "product_id": 1201,
      "base_product_id": 1200,
      "quantity_delta": -2,
      "base_quantity_delta": -12,
      "stock_after": null,
      "document": {
        "type_id": 3
      },
      "place_id": 501,
      "barcode": "4601234567890",
      "batch": "LOT-2026",
      "production_date": "2026-01-15",
      "expiration_date": "2027-01-15",
      "occurred_at": "2026-07-14T10:30:00Z",
      "created_at": "2026-07-14T10:30:00Z",
      "updated_at": "2026-07-14T10:30:00Z"
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/stock-movements?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/stock-movements?page=2",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/stock-movements?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "https://betawms.ffcdek.ru/api/v2/stock-movements",
    "per_page": 100,
    "to": 100,
    "total": 123
  }
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}

Users

GET /api/v2/users

List users

operationIdlistUsers
TagUsers
SecuritybearerAuth

Returns users visible to the authenticated account. Use documented query parameters for filtering, sorting, and pagination.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/users" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 500
Number of records per page. Default is 50; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 50
sort query no string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, name, email, domain_id, warehouse_id, created_at, updated_at. Default: -id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. "-id"
id query no integer:int64 form true min: 1 Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. 1001
domain_id query no integer:int64 form true min: 1 Filter by domain_id using exact matching. The same filter may also be sent as filter[domain_id] where supported by the Laravel query adapter. 3
warehouse_id query no integer:int64 form true min: 1 Filter by warehouse_id using exact matching. The same filter may also be sent as filter[warehouse_id] where supported by the Laravel query adapter. 42
parent_id query no integer:int64 form true min: 1 Filter by parent_id using exact matching. The same filter may also be sent as filter[parent_id] where supported by the Laravel query adapter. 1
data_scope query no string form true Filter by data_scope using exact matching. The same filter may also be sent as filter[data_scope] where supported by the Laravel query adapter. "domain"
name query no string form true Filter by name using partial text matching. The same filter may also be sent as filter[name] where supported by the Laravel query adapter. "Coffee"
email query no string form true Filter by email using partial text matching. The same filter may also be sent as filter[email] where supported by the Laravel query adapter. "client.manager@nwms.cloud"
id_from query no number:float form true Lower inclusive numeric boundary for id. The same filter may also be sent as filter[id_from] where supported by the Laravel query adapter. 19.99
id_to query no number:float form true Upper inclusive numeric boundary for id. The same filter may also be sent as filter[id_to] where supported by the Laravel query adapter. 19.99

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<User>
data[] no User Authenticated or visible NWMS user.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].name yes string "Client Manager"
data[].email yes string:email "client.manager@nwms.cloud"
data[].language no string | null "en"
data[].storage_id no string | null "default"
data[].domain_id no integer:int64 | null min: 1 3
data[].warehouse_id no integer:int64 | null min: 1 42
data[].parent_id no integer:int64 | null min: 1 15
data[].data_scope no string | null "domain"
data[].roles no array<string>
data[].roles[] no string "clients"
data[].domain no object | null
data[].domain.id yes integer:int64 min: 1 3
data[].domain.name yes string "Demo Domain"
data[].warehouse no object | null
data[].warehouse.id yes integer:int64 min: 1 42
data[].warehouse.name yes string "Warehouse Sofia"
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "id": 15,
      "name": "Client Manager",
      "email": "client.manager@nwms.cloud",
      "language": "en",
      "storage_id": "default",
      "domain_id": 3,
      "warehouse_id": 42,
      "parent_id": null,
      "data_scope": "domain",
      "roles": [
        "clients"
      ],
      "domain": {
        "id": 3,
        "name": "Demo Domain"
      },
      "warehouse": {
        "id": 42,
        "name": "Warehouse Sofia"
      },
      "created_at": "2026-07-14T09:00:00Z",
      "updated_at": "2026-07-14T09:30:00Z"
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/users?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/users?page=2",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/users?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "https://betawms.ffcdek.ru/api/v2/users",
    "per_page": 50,
    "to": 50,
    "total": 73
  }
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
GET /api/v2/users/{id}

Get user

operationIdgetUsers
TagUsers
SecuritybearerAuth

Returns one user when it exists and is visible to the authenticated account.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/users/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 User ID. 1001

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes User Authenticated or visible NWMS user.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.name yes string "Client Manager"
data.email yes string:email "client.manager@nwms.cloud"
data.language no string | null "en"
data.storage_id no string | null "default"
data.domain_id no integer:int64 | null min: 1 3
data.warehouse_id no integer:int64 | null min: 1 42
data.parent_id no integer:int64 | null min: 1 15
data.data_scope no string | null "domain"
data.roles no array<string>
data.roles[] no string "clients"
data.domain no object | null
data.domain.id yes integer:int64 min: 1 3
data.domain.name yes string "Demo Domain"
data.warehouse no object | null
data.warehouse.id yes integer:int64 min: 1 42
data.warehouse.name yes string "Warehouse Sofia"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 15,
    "name": "Client Manager",
    "email": "client.manager@nwms.cloud",
    "language": "en",
    "storage_id": "default",
    "domain_id": 3,
    "warehouse_id": 42,
    "parent_id": null,
    "data_scope": "domain",
    "roles": [
      "clients"
    ],
    "domain": {
      "id": 3,
      "name": "Demo Domain"
    },
    "warehouse": {
      "id": 42,
      "name": "Warehouse Sofia"
    },
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}

Warehouses

GET /api/v2/warehouses

List warehouses

operationIdlistWarehouses
TagWarehouses
SecuritybearerAuth

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"
}
POST /api/v2/warehouses

Create warehouse

operationIdcreateWarehouses
TagWarehouses
SecuritybearerAuth

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.json

Parameters

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 /api/v2/warehouses/{id}

Get warehouse

operationIdgetWarehouses
TagWarehouses
SecuritybearerAuth

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"
}
PUT /api/v2/warehouses/{id}

Update warehouse

operationIdreplaceWarehouses
TagWarehouses
SecuritybearerAuth

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.json

Parameters

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"
}
PATCH /api/v2/warehouses/{id}

Update warehouse

operationIdpatchWarehouses
TagWarehouses
SecuritybearerAuth

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.json

Parameters

Name In Required Type Style Explode Constraints Description Example
id path yes integer:int64 min: 1 Warehouse ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

PatchWarehouseRequest required

Field Required Type Flags Constraints Description Example
data yes PatchWarehousePayload
data.name no string | null minLength: 1 "Client Warehouse Varna"
data.status_id no integer:int64 | null Warehouse status ID. Values are database-backed and are not modeled as a closed enum in the public contract. 1
data.owner_user_id no integer:int64 | null min: 1 15
data.parent_id no integer:int64 | null min: 1 42
data.country_id no integer:int64 | null min: 1 100
data.currency_id no integer:int64 | null min: 1 978
data.company_id no integer:int64 | null min: 1 7
data.service_provider_company_id no integer:int64 | null min: 1 8
data.billing_setting_id no integer:int64 | null min: 1 12
data.settings no object | null
data.settings.datamatrix no object
data.settings.datamatrix.enabled yes boolean false
data.settings.datamatrix.type no string | null "standard"
data.settings.datamatrix.acceptance_enabled yes boolean false
data.settings.datamatrix.picking_enabled yes boolean false
data.settings.datamatrix.packing_enabled yes boolean false
data.settings.datamatrix.validation_mode no enum:int64 enum: 0, 1, 2 0 disabled, 1 template validation, 2 database validation. Read from warehouse DataMatrix settings. 1
data.settings.expiration_date_enabled no boolean true
data.settings.production_date_enabled no boolean true
data.settings.batch_enabled no boolean true
data.settings.auto_acceptance_enabled no boolean false
data.settings.order_auto_conduct_mode no enum:int64 | null enum: 0, 1, 2, 3 Permission for explicit order auto-conduct actions: 0 = disabled; 1 = skip picking; 2 = skip packing; 3 = skip picking and packing. This setting alone does not perform these actions or confirm carrier handover. Auto-packing is blocked when DataMatrix verification during packing is enabled. 0
data.settings.require_acceptance_dimensions no boolean false
data.settings.crossdock_enabled no boolean Allows cross-docking for a client warehouse. true
data.document no object | null
data.document.number no string | null "WH-DOC-1001"
data.document.date no string:date | null "2026-07-14"
data.custom no object {"billing_group":"Varna B"}

Request examples

default

{
  "data": {
    "billing_setting_id": 12
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes Warehouse Warehouse or client warehouse.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.name yes string "Warehouse Sofia"
data.status_id no integer:int64 | null Warehouse status ID. Values are database-backed and are not modeled as a closed enum in the public contract. 1
data.type_id no integer:int64 | null Warehouse type ID. Values are database-backed and are not modeled as a closed enum in the public contract. 2
data.domain_id no integer:int64 | null min: 1 3
data.owner_user_id no integer:int64 | null min: 1 15
data.parent_id no integer:int64 | null min: 1 41
data.country_id no integer:int64 | null min: 1 100
data.currency_id no integer:int64 | null min: 1 978
data.company_id no integer:int64 | null min: 1 7
data.service_provider_company_id no integer:int64 | null min: 1 8
data.billing_setting_id no integer:int64 | null min: 1 12
data.settings no WarehouseSettings
data.settings.datamatrix no object
data.settings.datamatrix.enabled yes boolean false
data.settings.datamatrix.type no string | null "standard"
data.settings.datamatrix.acceptance_enabled yes boolean false
data.settings.datamatrix.picking_enabled yes boolean false
data.settings.datamatrix.packing_enabled yes boolean false
data.settings.datamatrix.validation_mode no enum:int64 enum: 0, 1, 2 0 disabled, 1 template validation, 2 database validation. Read from warehouse DataMatrix settings. 1
data.settings.expiration_date_enabled no boolean true
data.settings.production_date_enabled no boolean true
data.settings.batch_enabled no boolean true
data.settings.auto_acceptance_enabled no boolean false
data.settings.order_auto_conduct_mode no enum:int64 | null enum: 0, 1, 2, 3 Permission for explicit order auto-conduct actions: 0 = disabled; 1 = skip picking; 2 = skip packing; 3 = skip picking and packing. This setting alone does not perform these actions or confirm carrier handover. Auto-packing is blocked when DataMatrix verification during packing is enabled. 0
data.settings.require_acceptance_dimensions no boolean false
data.settings.crossdock_enabled no boolean Allows cross-docking for a client warehouse. true
data.document no WarehouseDocument
data.document.number no string | null "WH-DOC-1001"
data.document.date no string:date | null "2026-07-14"
data.custom no object Installation-specific warehouse attributes. {"billing_group":"Sofia A"}
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 42,
    "name": "Warehouse Sofia",
    "status_id": 1,
    "type_id": 2,
    "domain_id": 3,
    "owner_user_id": 15,
    "parent_id": 41,
    "country_id": 100,
    "currency_id": 978,
    "company_id": 7,
    "service_provider_company_id": 8,
    "billing_setting_id": 12,
    "settings": {
      "datamatrix": {
        "enabled": true,
        "type": "standard",
        "acceptance_enabled": true,
        "picking_enabled": true,
        "packing_enabled": false
      },
      "expiration_date_enabled": true,
      "production_date_enabled": true,
      "batch_enabled": true,
      "auto_acceptance_enabled": false,
      "order_auto_conduct_mode": 0,
      "require_acceptance_dimensions": false
    },
    "document": {
      "number": "WH-DOC-1001",
      "date": "2026-07-14"
    },
    "custom": {
      "billing_group": "Sofia A"
    },
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

BadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Authentication required

Unauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Forbidden

Forbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Not found

NotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Conflict

Conflict

The request conflicts with the current resource state or idempotency key state.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Validation error

ValidationError

Validation failed.

Field Required Type Flags Constraints Description Example
message yes string "The given data was invalid."
error no string "VALIDATION_ERROR"
errors yes object {"warehouse_id":["The selected warehouse is invalid."]}

Response examples

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Rate limit exceeded

TooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Too Many Attempts."
error yes string "RATE_LIMITED"

500 Internal server error

InternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "The request could not be processed."
error yes string "BAD_REQUEST"

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}

Cross-docking

GET /api/v2/crossdock/cases

List cross-dock cases

operationIdcrossDockListCases
TagCross-docking
SecuritybearerAuth

List cross-dock cases in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 250
Number of records per page. Default is 50; maximum is 250. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 50
sort query no string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, planned_arrival_at, planned_departure_at, created_at, updated_at. Default: -id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. "-id"
include query no string form false Comma-separated optional relations. Allowed values: acceptance, orders, targets. The same filter may also be sent as filter[include] where supported by the Laravel query adapter. "acceptance,orders,targets"
id query no integer:int64 form true min: 1 Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. 1001
status query no string form true Filter by status using exact matching. The same filter may also be sent as filter[status] where supported by the Laravel query adapter. "waiting"
physical_warehouse_id query no integer:int64 form true min: 1 Filter by physical_warehouse_id using exact matching. The same filter may also be sent as filter[physical_warehouse_id] where supported by the Laravel query adapter. 41
client_warehouse_id query no integer:int64 form true min: 1 Filter by client_warehouse_id using exact matching. The same filter may also be sent as filter[client_warehouse_id] where supported by the Laravel query adapter. 43
acceptance_id query no integer:int64 form true min: 1 Filter by acceptance_id using exact matching. The same filter may also be sent as filter[acceptance_id] where supported by the Laravel query adapter. 1
planned_arrival_at_from query no string:date form true Lower inclusive date boundary for planned_arrival_at. The same filter may also be sent as filter[planned_arrival_at_from] where supported by the Laravel query adapter. "2026-07-14"
planned_arrival_at_to query no string:date form true Upper inclusive date boundary for planned_arrival_at. The same filter may also be sent as filter[planned_arrival_at_to] where supported by the Laravel query adapter. "2026-07-14"
created_at_from query no string:date form true Lower inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_from] where supported by the Laravel query adapter. "2026-07-14"
created_at_to query no string:date form true Upper inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_to] where supported by the Laravel query adapter. "2026-07-14"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<CrossDockCase>
data[] no CrossDockCase Cross-dock aggregate linking inbound supply, outbound demand, execution, exceptions, and loading.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].public_id yes string "01J2CROSSDOCKCASE000000001"
data[].external_id no string | null "XD-2026-001"
data[].domain_id yes integer:int64 min: 1 3
data[].physical_warehouse_id yes integer:int64 min: 1 42
data[].client_warehouse_id no integer:int64 | null min: 1 43
data[].client_id no integer:int64 | null min: 1 15
data[].process_version yes string "direct_order_v1"
data[].status yes enum enum: draft, planned, released, in_progress, exception, completed, cancelled "released"
data[].status_before_exception no string | null "released"
data[].plan_hash no string | null minLength: 64
maxLength: 64
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
data[].strategy_version no string | null "fifo-v1"
data[].planned_arrival_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].cutoff_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].planned_departure_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].planned_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].released_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].version yes integer:int64 min: 1 4
data[].acceptance no object | null
data[].acceptance.id yes integer:int64 min: 1 5101
data[].acceptance.external_id no string | null "ASN-100245"
data[].acceptance.type_id yes integer:int64 1
data[].acceptance.type_code yes string "crossdock"
data[].acceptance.status_id yes integer:int64 1
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "id": 1001,
      "public_id": "01J2CROSSDOCKCASE000000001",
      "domain_id": 3,
      "physical_warehouse_id": 42,
      "process_version": "direct_order_v1",
      "status": "released",
      "version": 4
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/crossdock/cases?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/crossdock/cases?page=2",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/crossdock/cases?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "https://betawms.ffcdek.ru/api/v2/crossdock/cases",
    "per_page": 50,
    "to": 50,
    "total": 73
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
GET /api/v2/crossdock/cases/{case}

Get cross-dock case

operationIdcrossDockGetCase
TagCross-docking
SecuritybearerAuth

Get cross-dock case in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes CrossDockCase Cross-dock aggregate linking inbound supply, outbound demand, execution, exceptions, and loading.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.public_id yes string "01J2CROSSDOCKCASE000000001"
data.external_id no string | null "XD-2026-001"
data.domain_id yes integer:int64 min: 1 3
data.physical_warehouse_id yes integer:int64 min: 1 42
data.client_warehouse_id no integer:int64 | null min: 1 43
data.client_id no integer:int64 | null min: 1 15
data.process_version yes string "direct_order_v1"
data.status yes enum enum: draft, planned, released, in_progress, exception, completed, cancelled "released"
data.status_before_exception no string | null "released"
data.plan_hash no string | null minLength: 64
maxLength: 64
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
data.strategy_version no string | null "fifo-v1"
data.planned_arrival_at no string:date-time | null "2026-07-14T10:30:00Z"
data.cutoff_at no string:date-time | null "2026-07-14T10:30:00Z"
data.planned_departure_at no string:date-time | null "2026-07-14T10:30:00Z"
data.planned_at no string:date-time | null "2026-07-14T10:30:00Z"
data.released_at no string:date-time | null "2026-07-14T10:30:00Z"
data.version yes integer:int64 min: 1 4
data.acceptance no object | null
data.acceptance.id yes integer:int64 min: 1 5101
data.acceptance.external_id no string | null "ASN-100245"
data.acceptance.type_id yes integer:int64 1
data.acceptance.type_code yes string "crossdock"
data.acceptance.status_id yes integer:int64 1
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 1001,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "domain_id": 3,
    "physical_warehouse_id": 42,
    "process_version": "direct_order_v1",
    "status": "released",
    "version": 4
  },
  "meta": {
    "api_version": "v2"
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
PATCH /api/v2/crossdock/cases/{case}

Update cross-dock case metadata

operationIdcrossDockUpdateCaseMetadata
TagCross-docking
SecuritybearerAuth

Update cross-dock case metadata in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request PATCH "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CrossDockUpdateCaseRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.command_id yes string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.version yes integer:int64 min: 1 3
data.external_id no string | null maxLength: 190 "XD-2026-001"
data.planned_arrival_at no string:date-time | null "2026-07-14T10:30:00Z"
data.cutoff_at no string:date-time | null "2026-07-14T10:30:00Z"
data.planned_departure_at no string:date-time | null "2026-07-14T10:30:00Z"

Request examples

default

{
  "data": {
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "version": 3
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes CrossDockCase Cross-dock aggregate linking inbound supply, outbound demand, execution, exceptions, and loading.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.public_id yes string "01J2CROSSDOCKCASE000000001"
data.external_id no string | null "XD-2026-001"
data.domain_id yes integer:int64 min: 1 3
data.physical_warehouse_id yes integer:int64 min: 1 42
data.client_warehouse_id no integer:int64 | null min: 1 43
data.client_id no integer:int64 | null min: 1 15
data.process_version yes string "direct_order_v1"
data.status yes enum enum: draft, planned, released, in_progress, exception, completed, cancelled "released"
data.status_before_exception no string | null "released"
data.plan_hash no string | null minLength: 64
maxLength: 64
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
data.strategy_version no string | null "fifo-v1"
data.planned_arrival_at no string:date-time | null "2026-07-14T10:30:00Z"
data.cutoff_at no string:date-time | null "2026-07-14T10:30:00Z"
data.planned_departure_at no string:date-time | null "2026-07-14T10:30:00Z"
data.planned_at no string:date-time | null "2026-07-14T10:30:00Z"
data.released_at no string:date-time | null "2026-07-14T10:30:00Z"
data.version yes integer:int64 min: 1 4
data.acceptance no object | null
data.acceptance.id yes integer:int64 min: 1 5101
data.acceptance.external_id no string | null "ASN-100245"
data.acceptance.type_id yes integer:int64 1
data.acceptance.type_code yes string "crossdock"
data.acceptance.status_id yes integer:int64 1
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 1001,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "domain_id": 3,
    "physical_warehouse_id": 42,
    "process_version": "direct_order_v1",
    "status": "released",
    "version": 4
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

CrossDockBadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "BAD_REQUEST",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

409 Conflict

CrossDockConflict

The request conflicts with the current aggregate version or command state.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

CROSSDOCK_VERSION_CONFLICT

{
  "message": "The request conflicts with the current aggregate version or command state.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "CROSSDOCK_VERSION_CONFLICT",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

422 Validation error

CrossDockValidationError

The given data was invalid.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

VALIDATION_ERROR

{
  "message": "The given data was invalid.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "VALIDATION_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
GET /api/v2/crossdock/cases/{case}/allocations

List cross-dock allocations

operationIdcrossDockListAllocations
TagCross-docking
SecuritybearerAuth

List cross-dock allocations in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/allocations" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 500
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 100
sort query no string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, created_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. "id"
id query no integer:int64 form true min: 1 Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. 1001
state query no string form true Filter by state using exact matching. The same filter may also be sent as filter[state] where supported by the Laravel query adapter. "ready"
supply_id query no integer:int64 form true min: 1 Filter by supply_id using exact matching. The same filter may also be sent as filter[supply_id] where supported by the Laravel query adapter. 1
demand_id query no integer:int64 form true min: 1 Filter by demand_id using exact matching. The same filter may also be sent as filter[demand_id] where supported by the Laravel query adapter. 1

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<CrossDockAllocation>
data[] no CrossDockAllocation Planner decision assigning supply to demand.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].case_id yes integer:int64 min: 1 4101
data[].supply_id yes integer:int64 min: 1 4201
data[].demand_id yes integer:int64 min: 1 4251
data[].base_quantity yes number:float 4
data[].released_base_quantity no number:float 4
data[].short_base_quantity no number:float 0
data[].state yes string "ready"
data[].state_before_exception no string | null "ready"
data[].match_score no number:float 1
data[].match_reason no object
data[].match_reason.reason_codes no array<string>
data[].match_reason.reason_codes[] no string "base_product_match"
data[].version yes integer:int64 2
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "id": 1001,
      "case_id": 4101,
      "supply_id": 4201,
      "demand_id": 4251,
      "base_quantity": 4,
      "released_base_quantity": 4,
      "short_base_quantity": 0,
      "state": "ready",
      "match_score": 1,
      "version": 2
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/allocations?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/allocations?page=2",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/allocations?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/allocations",
    "per_page": 100,
    "to": 100,
    "total": 123
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
POST /api/v2/crossdock/cases/{case}/cancel

Cancel cross-dock case

operationIdcrossDockCancelCase
TagCross-docking
SecuritybearerAuth

Cancel cross-dock case in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/cancel" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CrossDockCancelCaseRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.command_id yes string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.version yes integer:int64 min: 1 3
data.reason yes string maxLength: 5000 "Supplier cancelled shipment"

Request examples

default

{
  "data": {
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "version": 3,
    "reason": "Supplier cancelled shipment"
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes CrossDockResource Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility.
data.id no integer:int64 | null min: 1 4101
data.public_id no string | null "01J2CROSSDOCKCASE000000001"
data.case_id no integer:int64 | null min: 1 4101
data.status no string | null "released"
data.state no string | null "open"
data.version no integer:int64 | null min: 1 3
data.command_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.correlation_id no string:uuid | null "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 4101,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "status": "released",
    "version": 3,
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

CrossDockBadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "BAD_REQUEST",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

409 Conflict

CrossDockConflict

The request conflicts with the current aggregate version or command state.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

CROSSDOCK_VERSION_CONFLICT

{
  "message": "The request conflicts with the current aggregate version or command state.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "CROSSDOCK_VERSION_CONFLICT",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

422 Validation error

CrossDockValidationError

The given data was invalid.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

VALIDATION_ERROR

{
  "message": "The given data was invalid.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "VALIDATION_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
POST /api/v2/crossdock/cases/{case}/close

Close cross-dock case

operationIdcrossDockCloseCase
TagCross-docking
SecuritybearerAuth

Close cross-dock case in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/close" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CrossDockCloseCaseRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.command_id yes string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.version yes integer:int64 min: 1 8

Request examples

default

{
  "data": {
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "version": 8
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes CrossDockResource Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility.
data.id no integer:int64 | null min: 1 4101
data.public_id no string | null "01J2CROSSDOCKCASE000000001"
data.case_id no integer:int64 | null min: 1 4101
data.status no string | null "released"
data.state no string | null "open"
data.version no integer:int64 | null min: 1 3
data.command_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.correlation_id no string:uuid | null "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 4101,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "status": "released",
    "version": 3,
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

CrossDockBadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "BAD_REQUEST",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

409 Conflict

CrossDockConflict

The request conflicts with the current aggregate version or command state.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

CROSSDOCK_VERSION_CONFLICT

{
  "message": "The request conflicts with the current aggregate version or command state.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "CROSSDOCK_VERSION_CONFLICT",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

422 Validation error

CrossDockValidationError

The given data was invalid.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

VALIDATION_ERROR

{
  "message": "The given data was invalid.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "VALIDATION_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
GET /api/v2/crossdock/cases/{case}/demands

List cross-dock demands

operationIdcrossDockListDemands
TagCross-docking
SecuritybearerAuth

List cross-dock demands in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/demands" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 500
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 100
sort query no string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, priority, cutoff_at, created_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. "id"
id query no integer:int64 form true min: 1 Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. 1001
state query no string form true Filter by state using exact matching. The same filter may also be sent as filter[state] where supported by the Laravel query adapter. "ready"
product_id query no integer:int64 form true min: 1 Filter by product_id using exact matching. The same filter may also be sent as filter[product_id] where supported by the Laravel query adapter. 1201
base_product_id query no integer:int64 form true min: 1 Filter by base_product_id using exact matching. The same filter may also be sent as filter[base_product_id] where supported by the Laravel query adapter. 1200
order_id query no integer:int64 form true min: 1 Filter by order_id using exact matching. The same filter may also be sent as filter[order_id] where supported by the Laravel query adapter. 1
target_id query no integer:int64 form true min: 1 Filter by target_id using exact matching. The same filter may also be sent as filter[target_id] where supported by the Laravel query adapter. 1

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<CrossDockDemand>
data[] no CrossDockDemand Outbound product demand linked to one order and target.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].case_id yes integer:int64 min: 1 4101
data[].order_id yes integer:int64 min: 1 8101
data[].order_line_id yes integer:int64 min: 1 8201
data[].target_id yes integer:int64 min: 1 4301
data[].product_id yes integer:int64 min: 1 1201
data[].base_product_id yes integer:int64 min: 1 1201
data[].quantity yes number:float 4
data[].base_quantity yes number:float 4
data[].allocated_base_quantity no number:float 4
data[].fulfilled_base_quantity no number:float 2
data[].state yes string "released"
data[].state_before_exception no string | null "released"
data[].priority no integer:int64 100
data[].cutoff_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].ship_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].source_policy no enum | null enum: crossdock_only, crossdock_then_stock, stock_allowed "crossdock_only"
data[].destination_ref no string | null "SOF-LANE-1"
data[].carrier_ref no string | null "CDEK"
data[].route_ref no string | null "BG-SOF"
data[].version yes integer:int64 2
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "id": 1001,
      "case_id": 4101,
      "order_id": 8101,
      "order_line_id": 8201,
      "target_id": 4301,
      "product_id": 1201,
      "base_product_id": 1201,
      "quantity": 4,
      "base_quantity": 4,
      "allocated_base_quantity": 4,
      "fulfilled_base_quantity": 2,
      "state": "released",
      "priority": 100,
      "version": 2
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/demands?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/demands?page=2",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/demands?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/demands",
    "per_page": 100,
    "to": 100,
    "total": 123
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
GET /api/v2/crossdock/cases/{case}/events

List cross-dock events

operationIdcrossDockListEvents
TagCross-docking
SecuritybearerAuth

List cross-dock events in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/events" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 500
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 100
sort query no string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, occurred_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. "id"
id query no integer:int64 form true min: 1 Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. 1001
type query no string form true Filter by type using exact matching. The same filter may also be sent as filter[type] where supported by the Laravel query adapter. "inbound"
aggregate_type query no string form true Filter by aggregate_type using exact matching. The same filter may also be sent as filter[aggregate_type] where supported by the Laravel query adapter. "case"
command_id query no string form true Filter by command_id using exact matching. The same filter may also be sent as filter[command_id] where supported by the Laravel query adapter. "4fe557e8-70f7-4b36-a124-d3afad4041d4"
occurred_at_from query no string:date form true Lower inclusive date boundary for occurred_at. The same filter may also be sent as filter[occurred_at_from] where supported by the Laravel query adapter. "2026-07-14"
occurred_at_to query no string:date form true Upper inclusive date boundary for occurred_at. The same filter may also be sent as filter[occurred_at_to] where supported by the Laravel query adapter. "2026-07-14"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<CrossDockEvent>
data[] no CrossDockEvent Append-only cross-dock audit event.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].event_id yes string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data[].case_id yes integer:int64 min: 1 4101
data[].aggregate_type yes string "case"
data[].aggregate_id yes string "01J2CROSSDOCKCASE000000001"
data[].aggregate_version yes integer:int64 4
data[].type yes string "crossdock.case.released"
data[].actor_id no integer:int64 | null min: 1 25
data[].source yes string "api"
data[].command_id no string:uuid | null "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data[].correlation_id no string:uuid | null "4d9d6b9b-9c6d-4d2f-8c80-8f9a4d8b4f01"
data[].payload no object
data[].occurred_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].recorded_at no string:date-time | null "2026-07-14T10:30:00Z"
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "id": 1001,
      "event_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
      "case_id": 4101,
      "aggregate_type": "case",
      "aggregate_id": "01J2CROSSDOCKCASE000000001",
      "aggregate_version": 4,
      "type": "crossdock.case.released",
      "source": "api"
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/events?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/events?page=2",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/events?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/events",
    "per_page": 100,
    "to": 100,
    "total": 123
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
GET /api/v2/crossdock/cases/{case}/exceptions

List cross-dock exceptions

operationIdcrossDockListExceptions
TagCross-docking
SecuritybearerAuth

List cross-dock exceptions in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/exceptions" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 500
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 100
sort query no string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, created_at, resolved_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. "id"
id query no integer:int64 form true min: 1 Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. 1001
type query no string form true Filter by type using exact matching. The same filter may also be sent as filter[type] where supported by the Laravel query adapter. "inbound"
severity query no string form true Filter by severity using exact matching. The same filter may also be sent as filter[severity] where supported by the Laravel query adapter. "blocking"
status query no string form true Filter by status using exact matching. The same filter may also be sent as filter[status] where supported by the Laravel query adapter. "waiting"
task_id query no integer:int64 form true min: 1 Filter by task_id using exact matching. The same filter may also be sent as filter[task_id] where supported by the Laravel query adapter. 1
supply_id query no integer:int64 form true min: 1 Filter by supply_id using exact matching. The same filter may also be sent as filter[supply_id] where supported by the Laravel query adapter. 1
demand_id query no integer:int64 form true min: 1 Filter by demand_id using exact matching. The same filter may also be sent as filter[demand_id] where supported by the Laravel query adapter. 1

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<CrossDockException>
data[] no CrossDockException Operational discrepancy with explicit resolution history.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].public_id yes string "01J2CROSSDOCKEXCEPTION001"
data[].case_id yes integer:int64 min: 1 4101
data[].allocation_id no integer:int64 | null min: 1 1001
data[].supply_id no integer:int64 | null min: 1 1001
data[].demand_id no integer:int64 | null min: 1 1001
data[].fulfillment_id no integer:int64 | null min: 1 1001
data[].handling_unit_id no integer:int64 | null min: 1 1001
data[].task_id no integer:int64 | null min: 1 1001
data[].type yes string "shortage"
data[].severity yes enum enum: warning, blocking "blocking"
data[].status yes string "open"
data[].expected no object | null
data[].actual no object | null
data[].resolution_policy no string | null "fallback"
data[].resolution_decision no string | null "fallback_storage"
data[].reason no string | null "Two units missing"
data[].movement_group_id no string | null "XD-MOVE-4101-2"
data[].opened_by no integer:int64 | null min: 1 25
data[].resolved_by no integer:int64 | null min: 1 26
data[].resolved_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].version yes integer:int64 1
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "id": 1001,
      "public_id": "01J2CROSSDOCKEXCEPTION001",
      "case_id": 4101,
      "type": "shortage",
      "severity": "blocking",
      "status": "open",
      "version": 1
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/exceptions?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/exceptions?page=2",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/exceptions?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/exceptions",
    "per_page": 100,
    "to": 100,
    "total": 123
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
POST /api/v2/crossdock/cases/{case}/exceptions

Open cross-dock exception

operationIdcrossDockOpenException
TagCross-docking
SecuritybearerAuth

Open cross-dock exception in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/exceptions" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CrossDockOpenExceptionRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.command_id yes string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.type yes enum enum: shortage, overage, damaged, sku_mismatch, lot_mismatch, expired, unknown_hu, wrong_target, capacity, timeout, cancelled_demand, transport_delay "shortage"
data.severity no enum enum: warning, blocking "blocking"
data.allocation_id no integer:int64 | null min: 1 1001
data.supply_id no integer:int64 | null min: 1 1001
data.demand_id no integer:int64 | null min: 1 1001
data.fulfillment_id no integer:int64 | null min: 1 1001
data.handling_unit_id no integer:int64 | null min: 1 1001
data.task_id no integer:int64 | null min: 1 1001
data.expected no object | null
data.actual no object | null
data.resolution_policy no string | null maxLength: 50 "fallback"
data.reason no string | null maxLength: 5000 "Two units missing"

Request examples

default

{
  "data": {
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "type": "shortage",
    "severity": "blocking"
  }
}

Responses

201 Created.

Created.

Field Required Type Flags Constraints Description Example
data yes CrossDockResource Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility.
data.id no integer:int64 | null min: 1 4101
data.public_id no string | null "01J2CROSSDOCKCASE000000001"
data.case_id no integer:int64 | null min: 1 4101
data.status no string | null "released"
data.state no string | null "open"
data.version no integer:int64 | null min: 1 3
data.command_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.correlation_id no string:uuid | null "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 4101,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "status": "released",
    "version": 3,
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

CrossDockBadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "BAD_REQUEST",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

409 Conflict

CrossDockConflict

The request conflicts with the current aggregate version or command state.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

CROSSDOCK_VERSION_CONFLICT

{
  "message": "The request conflicts with the current aggregate version or command state.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "CROSSDOCK_VERSION_CONFLICT",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

422 Validation error

CrossDockValidationError

The given data was invalid.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

VALIDATION_ERROR

{
  "message": "The given data was invalid.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "VALIDATION_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
POST /api/v2/crossdock/cases/{case}/fallback

Execute cross-dock fallback by alias

operationIdcrossDockExecuteFallbackByAlias
TagCross-docking
SecuritybearerAuth

Compatibility alias for the plural fallback command; prefer /fallbacks in new clients.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/fallback" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CrossDockFallbackRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.command_id yes string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.supply_id yes integer:int64 min: 1 4201
data.exception_id no integer:int64 | null min: 1 4951
data.product_id yes integer:int64 min: 1 1201
data.base_quantity yes number:float min: 0.0001 2
data.source_place_id no integer:int64 | null min: 1 800
data.target_place_id yes integer:int64 min: 1 950
data.route yes enum enum: storage, quarantine "quarantine"
data.source_barcode no string | null maxLength: 190 "4601234567890"
data.reason no string | null maxLength: 5000 "Damaged package"

Request examples

default

{
  "data": {
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "supply_id": 4201,
    "product_id": 1201,
    "base_quantity": 2,
    "target_place_id": 950,
    "route": "quarantine"
  }
}

Responses

201 Created.

Created.

Field Required Type Flags Constraints Description Example
data yes CrossDockResource Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility.
data.id no integer:int64 | null min: 1 4101
data.public_id no string | null "01J2CROSSDOCKCASE000000001"
data.case_id no integer:int64 | null min: 1 4101
data.status no string | null "released"
data.state no string | null "open"
data.version no integer:int64 | null min: 1 3
data.command_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.correlation_id no string:uuid | null "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 4101,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "status": "released",
    "version": 3,
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

CrossDockBadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "BAD_REQUEST",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

409 Conflict

CrossDockConflict

The request conflicts with the current aggregate version or command state.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

CROSSDOCK_VERSION_CONFLICT

{
  "message": "The request conflicts with the current aggregate version or command state.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "CROSSDOCK_VERSION_CONFLICT",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

422 Validation error

CrossDockValidationError

The given data was invalid.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

VALIDATION_ERROR

{
  "message": "The given data was invalid.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "VALIDATION_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
GET /api/v2/crossdock/cases/{case}/fallbacks

List cross-dock fallbacks

operationIdcrossDockListFallbacks
TagCross-docking
SecuritybearerAuth

List cross-dock fallbacks in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/fallbacks" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 500
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 100
sort query no string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, created_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. "id"
id query no integer:int64 form true min: 1 Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. 1001
supply_id query no integer:int64 form true min: 1 Filter by supply_id using exact matching. The same filter may also be sent as filter[supply_id] where supported by the Laravel query adapter. 1
exception_id query no integer:int64 form true min: 1 Filter by exception_id using exact matching. The same filter may also be sent as filter[exception_id] where supported by the Laravel query adapter. 1
product_id query no integer:int64 form true min: 1 Filter by product_id using exact matching. The same filter may also be sent as filter[product_id] where supported by the Laravel query adapter. 1201
route query no string form true Filter by route using exact matching. The same filter may also be sent as filter[route] where supported by the Laravel query adapter. "quarantine"
state query no string form true Filter by state using exact matching. The same filter may also be sent as filter[state] where supported by the Laravel query adapter. "ready"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<CrossDockFallback>
data[] no CrossDockFallback Compensating route from cross-dock flow to storage or quarantine.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].public_id yes string "01J2CROSSDOCKFALLBACK0001"
data[].case_id yes integer:int64 min: 1 4101
data[].supply_id yes integer:int64 min: 1 4201
data[].exception_id no integer:int64 | null min: 1 4951
data[].product_id yes integer:int64 min: 1 1201
data[].base_product_id yes integer:int64 min: 1 1201
data[].quantity yes number:float 2
data[].base_quantity yes number:float 2
data[].source_place_id no integer:int64 | null min: 1 800
data[].target_place_id yes integer:int64 min: 1 950
data[].route yes enum enum: storage, quarantine "quarantine"
data[].acceptance_offer_id no integer:int64 | null min: 1 1001
data[].warehouse_item_id no integer:int64 | null min: 1 1001
data[].state yes string "completed"
data[].reason no string | null "Damaged package"
data[].movement_group_id no string | null "XD-FALLBACK-4101-1"
data[].created_by no integer:int64 | null min: 1 25
data[].version yes integer:int64 1
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "id": 1001,
      "public_id": "01J2CROSSDOCKFALLBACK0001",
      "case_id": 4101,
      "supply_id": 4201,
      "product_id": 1201,
      "base_product_id": 1201,
      "quantity": 2,
      "base_quantity": 2,
      "target_place_id": 950,
      "route": "quarantine",
      "state": "completed",
      "version": 1
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/fallbacks?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/fallbacks?page=2",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/fallbacks?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/fallbacks",
    "per_page": 100,
    "to": 100,
    "total": 123
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
POST /api/v2/crossdock/cases/{case}/fallbacks

Execute cross-dock fallback

operationIdcrossDockExecuteFallback
TagCross-docking
SecuritybearerAuth

Moves the selected quantity to storage or quarantine while preserving source lineage and resolving the linked exception when supplied.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/fallbacks" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CrossDockFallbackRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.command_id yes string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.supply_id yes integer:int64 min: 1 4201
data.exception_id no integer:int64 | null min: 1 4951
data.product_id yes integer:int64 min: 1 1201
data.base_quantity yes number:float min: 0.0001 2
data.source_place_id no integer:int64 | null min: 1 800
data.target_place_id yes integer:int64 min: 1 950
data.route yes enum enum: storage, quarantine "quarantine"
data.source_barcode no string | null maxLength: 190 "4601234567890"
data.reason no string | null maxLength: 5000 "Damaged package"

Request examples

default

{
  "data": {
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "supply_id": 4201,
    "product_id": 1201,
    "base_quantity": 2,
    "target_place_id": 950,
    "route": "quarantine"
  }
}

Responses

201 Created.

Created.

Field Required Type Flags Constraints Description Example
data yes CrossDockResource Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility.
data.id no integer:int64 | null min: 1 4101
data.public_id no string | null "01J2CROSSDOCKCASE000000001"
data.case_id no integer:int64 | null min: 1 4101
data.status no string | null "released"
data.state no string | null "open"
data.version no integer:int64 | null min: 1 3
data.command_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.correlation_id no string:uuid | null "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 4101,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "status": "released",
    "version": 3,
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

CrossDockBadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "BAD_REQUEST",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

409 Conflict

CrossDockConflict

The request conflicts with the current aggregate version or command state.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

CROSSDOCK_VERSION_CONFLICT

{
  "message": "The request conflicts with the current aggregate version or command state.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "CROSSDOCK_VERSION_CONFLICT",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

422 Validation error

CrossDockValidationError

The given data was invalid.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

VALIDATION_ERROR

{
  "message": "The given data was invalid.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "VALIDATION_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
GET /api/v2/crossdock/cases/{case}/fulfillments

List cross-dock fulfillments

operationIdcrossDockListFulfillments
TagCross-docking
SecuritybearerAuth

List cross-dock fulfillments in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/fulfillments" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 500
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 100
sort query no string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, created_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. "id"
id query no integer:int64 form true min: 1 Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. 1001
state query no string form true Filter by state using exact matching. The same filter may also be sent as filter[state] where supported by the Laravel query adapter. "ready"
allocation_id query no integer:int64 form true min: 1 Filter by allocation_id using exact matching. The same filter may also be sent as filter[allocation_id] where supported by the Laravel query adapter. 1
supply_id query no integer:int64 form true min: 1 Filter by supply_id using exact matching. The same filter may also be sent as filter[supply_id] where supported by the Laravel query adapter. 1
demand_id query no integer:int64 form true min: 1 Filter by demand_id using exact matching. The same filter may also be sent as filter[demand_id] where supported by the Laravel query adapter. 1
target_id query no integer:int64 form true min: 1 Filter by target_id using exact matching. The same filter may also be sent as filter[target_id] where supported by the Laravel query adapter. 1
product_id query no integer:int64 form true min: 1 Filter by product_id using exact matching. The same filter may also be sent as filter[product_id] where supported by the Laravel query adapter. 1201
base_product_id query no integer:int64 form true min: 1 Filter by base_product_id using exact matching. The same filter may also be sent as filter[base_product_id] where supported by the Laravel query adapter. 1200

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<CrossDockFulfillment>
data[] no CrossDockFulfillment Physically confirmed cross-dock fragment with exact product and quant lineage.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].fragment_uuid yes string:uuid "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data[].case_id yes integer:int64 min: 1 4101
data[].allocation_id yes integer:int64 min: 1 4501
data[].supply_id yes integer:int64 min: 1 4201
data[].demand_id yes integer:int64 min: 1 4251
data[].target_id yes integer:int64 min: 1 4301
data[].handling_unit_id no integer:int64 | null min: 1 4601
data[].container_place_id no integer:int64 | null min: 1 901
data[].source_warehouse_item_id no integer:int64 | null min: 1 4701
data[].product_id yes integer:int64 min: 1 1201
data[].base_product_id yes integer:int64 min: 1 1201
data[].quantity yes number:float 2
data[].base_quantity yes number:float 2
data[].batch no string | null "LOT-2026"
data[].production_date no string:date | null "2026-07-14"
data[].expiration_date no string:date | null "2027-01-15"
data[].state yes string "routed"
data[].source_place_id no integer:int64 | null min: 1 800
data[].target_place_id no integer:int64 | null min: 1 900
data[].movement_group_id no string | null "XD-MOVE-4101-1"
data[].version yes integer:int64 1
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "id": 1001,
      "fragment_uuid": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4",
      "case_id": 4101,
      "allocation_id": 4501,
      "supply_id": 4201,
      "demand_id": 4251,
      "target_id": 4301,
      "product_id": 1201,
      "base_product_id": 1201,
      "quantity": 2,
      "base_quantity": 2,
      "state": "routed",
      "version": 1
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/fulfillments?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/fulfillments?page=2",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/fulfillments?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/fulfillments",
    "per_page": 100,
    "to": 100,
    "total": 123
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
GET /api/v2/crossdock/cases/{case}/labels

List cross-dock target labels

operationIdcrossDockListTargetLabels
TagCross-docking
SecuritybearerAuth

List cross-dock target labels in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/labels" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 500
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 100
sort query no string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, created_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. "id"
id query no integer:int64 form true min: 1 Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. 1001
status query no string form true Filter by status using exact matching. The same filter may also be sent as filter[status] where supported by the Laravel query adapter. "waiting"
target_id query no integer:int64 form true min: 1 Filter by target_id using exact matching. The same filter may also be sent as filter[target_id] where supported by the Laravel query adapter. 1
version query no integer:int64 form true min: 1 Filter by version using exact matching. The same filter may also be sent as filter[version] where supported by the Laravel query adapter. 1

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<CrossDockTargetLabel>
data[] no CrossDockTargetLabel Versioned, signed target barcode; only the current ready label can confirm a target.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].public_id yes string "01J2CROSSDOCKLABEL0000001"
data[].target_id yes integer:int64 min: 1 4301
data[].version yes integer:int64 2
data[].barcode yes string "XD1.4301.2.signature"
data[].template_version yes string "crossdock-target-v1"
data[].artifact_ref no string | null "crossdock/labels/4401.pdf"
data[].artifact_hash no string | null "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
data[].status yes string "ready"
data[].reprint_count no integer:int64 0
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "id": 1001,
      "public_id": "01J2CROSSDOCKLABEL0000001",
      "target_id": 4301,
      "version": 2,
      "barcode": "XD1.4301.2.signature",
      "template_version": "crossdock-target-v1",
      "status": "ready",
      "reprint_count": 0
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/labels?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/labels?page=2",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/labels?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/labels",
    "per_page": 100,
    "to": 100,
    "total": 123
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
POST /api/v2/crossdock/cases/{case}/labels/print-jobs

Create cross-dock print jobs

operationIdcrossDockCreatePrintJobs
TagCross-docking
SecuritybearerAuth

Create cross-dock print jobs in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/labels/print-jobs" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CrossDockCreatePrintJobsRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.command_id yes string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.version yes integer:int64 min: 1 5
data.label_ids no array<integer:int64> minItems: 1
data.label_ids[] no integer:int64 min: 1 4401
data.printer_id no integer:int64 | null min: 1 55
data.device_id no string | null maxLength: 190 "gate-printer-1"

Request examples

default

{
  "data": {
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "version": 5
  }
}

Responses

201 Created.

Created.

Field Required Type Flags Constraints Description Example
data yes CrossDockResource Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility.
data.id no integer:int64 | null min: 1 4101
data.public_id no string | null "01J2CROSSDOCKCASE000000001"
data.case_id no integer:int64 | null min: 1 4101
data.status no string | null "released"
data.state no string | null "open"
data.version no integer:int64 | null min: 1 3
data.command_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.correlation_id no string:uuid | null "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 4101,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "status": "released",
    "version": 3,
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

CrossDockBadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "BAD_REQUEST",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

409 Conflict

CrossDockConflict

The request conflicts with the current aggregate version or command state.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

CROSSDOCK_VERSION_CONFLICT

{
  "message": "The request conflicts with the current aggregate version or command state.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "CROSSDOCK_VERSION_CONFLICT",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

422 Validation error

CrossDockValidationError

The given data was invalid.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

VALIDATION_ERROR

{
  "message": "The given data was invalid.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "VALIDATION_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
GET /api/v2/crossdock/cases/{case}/loading-visits

List case loading-visit associations

operationIdcrossDockListCaseLoadingVisitAssociations
TagCross-docking
SecuritybearerAuth

List case loading-visit associations in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/loading-visits" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 500
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 100
sort query no string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, created_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. "id"
loading_visit_id query no integer:int64 form true min: 1 Filter by loading_visit_id using exact matching. The same filter may also be sent as filter[loading_visit_id] where supported by the Laravel query adapter. 1
document_type query no string form true Filter by document_type using exact matching. The same filter may also be sent as filter[document_type] where supported by the Laravel query adapter. "acceptance"
document_id query no integer:int64 form true min: 1 Filter by document_id using exact matching. The same filter may also be sent as filter[document_id] where supported by the Laravel query adapter. 5101
role query no string form true Filter by role using exact matching. The same filter may also be sent as filter[role] where supported by the Laravel query adapter. "outbound"
status query no string form true Filter by status using exact matching. The same filter may also be sent as filter[status] where supported by the Laravel query adapter. "waiting"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<CrossDockLoadingAssociation>
data[] no CrossDockLoadingAssociation Association between a cross-dock document and a loading visit.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].case_id no integer:int64 | null min: 1 4101
data[].loading_visit_id yes integer:int64 min: 1 6101
data[].document_type yes string "order"
data[].document_id yes integer:int64 min: 1 8101
data[].role yes string "outbound"
data[].status yes string "attached"
data[].created_by no integer:int64 | null min: 1 25
data[].detached_by no integer:int64 | null min: 1 1001
data[].detached_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].visit no object | null
data[].visit.id yes integer:int64 min: 1 6101
data[].visit.type yes string "outbound"
data[].visit.status yes string "approved"
data[].visit.physical_warehouse_id yes integer:int64 min: 1 42
data[].visit.gate_id no integer:int64 | null min: 1 3
data[].visit.planned_at no string:date-time | null "2026-07-14T10:30:00Z"
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "id": 1001,
      "loading_visit_id": 6101,
      "document_type": "order",
      "document_id": 8101,
      "role": "outbound",
      "status": "attached"
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/loading-visits?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/loading-visits?page=2",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/loading-visits?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/loading-visits",
    "per_page": 100,
    "to": 100,
    "total": 123
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
POST /api/v2/crossdock/cases/{case}/loading-visits/attach

Attach loading visit to cross-dock case

operationIdcrossDockAttachLoadingVisitToCase
TagCross-docking
SecuritybearerAuth

Attach loading visit to cross-dock case in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/loading-visits/attach" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CrossDockLoadingVisitLinkRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.command_id yes string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.version yes integer:int64 min: 1 5
data.loading_visit_id yes integer:int64 min: 1 6101

Request examples

default

{
  "data": {
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "version": 5,
    "loading_visit_id": 6101
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes CrossDockResource Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility.
data.id no integer:int64 | null min: 1 4101
data.public_id no string | null "01J2CROSSDOCKCASE000000001"
data.case_id no integer:int64 | null min: 1 4101
data.status no string | null "released"
data.state no string | null "open"
data.version no integer:int64 | null min: 1 3
data.command_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.correlation_id no string:uuid | null "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 4101,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "status": "released",
    "version": 3,
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

CrossDockBadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "BAD_REQUEST",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

409 Conflict

CrossDockConflict

The request conflicts with the current aggregate version or command state.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

CROSSDOCK_VERSION_CONFLICT

{
  "message": "The request conflicts with the current aggregate version or command state.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "CROSSDOCK_VERSION_CONFLICT",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

422 Validation error

CrossDockValidationError

The given data was invalid.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

VALIDATION_ERROR

{
  "message": "The given data was invalid.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "VALIDATION_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
POST /api/v2/crossdock/cases/{case}/loading-visits/detach

Detach loading visit from cross-dock case

operationIdcrossDockDetachLoadingVisitFromCase
TagCross-docking
SecuritybearerAuth

Detach loading visit from cross-dock case in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/loading-visits/detach" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CrossDockLoadingVisitLinkRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.command_id yes string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.version yes integer:int64 min: 1 5
data.loading_visit_id yes integer:int64 min: 1 6101

Request examples

default

{
  "data": {
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "version": 5,
    "loading_visit_id": 6101
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes CrossDockResource Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility.
data.id no integer:int64 | null min: 1 4101
data.public_id no string | null "01J2CROSSDOCKCASE000000001"
data.case_id no integer:int64 | null min: 1 4101
data.status no string | null "released"
data.state no string | null "open"
data.version no integer:int64 | null min: 1 3
data.command_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.correlation_id no string:uuid | null "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 4101,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "status": "released",
    "version": 3,
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

CrossDockBadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "BAD_REQUEST",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

409 Conflict

CrossDockConflict

The request conflicts with the current aggregate version or command state.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

CROSSDOCK_VERSION_CONFLICT

{
  "message": "The request conflicts with the current aggregate version or command state.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "CROSSDOCK_VERSION_CONFLICT",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

422 Validation error

CrossDockValidationError

The given data was invalid.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

VALIDATION_ERROR

{
  "message": "The given data was invalid.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "VALIDATION_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
POST /api/v2/crossdock/cases/{case}/loading-visits/{visit}/attach

Attach loading visit by path ID

operationIdcrossDockAttachLoadingVisitByPathId
TagCross-docking
SecuritybearerAuth

Attach loading visit by path ID in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/loading-visits/1001/attach" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
visit path yes integer:int64 min: 1 Loading visit ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CrossDockLoadingVisitPathLinkRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.command_id yes string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.version yes integer:int64 min: 1 5

Request examples

default

{
  "data": {
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "version": 5
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes CrossDockResource Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility.
data.id no integer:int64 | null min: 1 4101
data.public_id no string | null "01J2CROSSDOCKCASE000000001"
data.case_id no integer:int64 | null min: 1 4101
data.status no string | null "released"
data.state no string | null "open"
data.version no integer:int64 | null min: 1 3
data.command_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.correlation_id no string:uuid | null "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 4101,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "status": "released",
    "version": 3,
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

CrossDockBadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "BAD_REQUEST",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

409 Conflict

CrossDockConflict

The request conflicts with the current aggregate version or command state.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

CROSSDOCK_VERSION_CONFLICT

{
  "message": "The request conflicts with the current aggregate version or command state.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "CROSSDOCK_VERSION_CONFLICT",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

422 Validation error

CrossDockValidationError

The given data was invalid.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

VALIDATION_ERROR

{
  "message": "The given data was invalid.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "VALIDATION_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
POST /api/v2/crossdock/cases/{case}/loading-visits/{visit}/detach

Detach loading visit by path ID

operationIdcrossDockDetachLoadingVisitByPathId
TagCross-docking
SecuritybearerAuth

Detach loading visit by path ID in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/loading-visits/1001/detach" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
visit path yes integer:int64 min: 1 Loading visit ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CrossDockLoadingVisitPathLinkRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.command_id yes string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.version yes integer:int64 min: 1 5

Request examples

default

{
  "data": {
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "version": 5
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes CrossDockResource Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility.
data.id no integer:int64 | null min: 1 4101
data.public_id no string | null "01J2CROSSDOCKCASE000000001"
data.case_id no integer:int64 | null min: 1 4101
data.status no string | null "released"
data.state no string | null "open"
data.version no integer:int64 | null min: 1 3
data.command_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.correlation_id no string:uuid | null "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 4101,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "status": "released",
    "version": 3,
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

CrossDockBadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "BAD_REQUEST",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

409 Conflict

CrossDockConflict

The request conflicts with the current aggregate version or command state.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

CROSSDOCK_VERSION_CONFLICT

{
  "message": "The request conflicts with the current aggregate version or command state.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "CROSSDOCK_VERSION_CONFLICT",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

422 Validation error

CrossDockValidationError

The given data was invalid.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

VALIDATION_ERROR

{
  "message": "The given data was invalid.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "VALIDATION_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
POST /api/v2/crossdock/cases/{case}/loading/scans

Confirm cross-dock loading scan

operationIdcrossDockConfirmLoadingScan
TagCross-docking
SecuritybearerAuth

Confirms that the current target label for an order is loaded into the associated outbound visit.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/loading/scans" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CrossDockLoadingScanRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.command_id yes string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.loading_visit_id yes integer:int64 min: 1 6101
data.order_id yes integer:int64 min: 1 8101
data.label_barcode yes string maxLength: 100 "XD1.4301.2.signature"
data.device_id no string | null maxLength: 190 "gate-tsd-01"

Request examples

default

{
  "data": {
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "loading_visit_id": 6101,
    "order_id": 8101,
    "label_barcode": "XD1.4301.2.signature"
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes CrossDockResource Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility.
data.id no integer:int64 | null min: 1 4101
data.public_id no string | null "01J2CROSSDOCKCASE000000001"
data.case_id no integer:int64 | null min: 1 4101
data.status no string | null "released"
data.state no string | null "open"
data.version no integer:int64 | null min: 1 3
data.command_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.correlation_id no string:uuid | null "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 4101,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "status": "released",
    "version": 3,
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

CrossDockBadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "BAD_REQUEST",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

409 Conflict

CrossDockConflict

The request conflicts with the current aggregate version or command state.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

CROSSDOCK_VERSION_CONFLICT

{
  "message": "The request conflicts with the current aggregate version or command state.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "CROSSDOCK_VERSION_CONFLICT",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

422 Validation error

CrossDockValidationError

The given data was invalid.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

VALIDATION_ERROR

{
  "message": "The given data was invalid.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "VALIDATION_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
PUT /api/v2/crossdock/cases/{case}/manifest

Replace cross-dock handling-unit manifest

operationIdcrossDockReplaceHandlingUnitManifest
TagCross-docking
SecuritybearerAuth

Atomically replaces the declared SSCC or quant handling-unit manifest and validates barcode ownership and contents.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/manifest" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CrossDockReplaceManifestRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.command_id yes string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.version yes integer:int64 min: 1 3
data.handling_units yes array<object>
data.handling_units[] no object
data.handling_units[].barcode_kind yes enum enum: sscc, quant "sscc"
data.handling_units[].barcode yes string maxLength: 190 "046012345678901234"
data.handling_units[].hu_type no enum | null enum: box, pallet, tote "box"
data.handling_units[].contents yes array<object> minItems: 1
data.handling_units[].contents[] no object
data.handling_units[].contents[].product_id yes integer:int64 min: 1 1201
data.handling_units[].contents[].quantity yes number:float min: 0.0001 4
data.handling_units[].contents[].batch no string | null maxLength: 100 "LOT-2026"
data.handling_units[].contents[].production_date no string:date | null "2026-07-14"
data.handling_units[].contents[].expiration_date no string:date | null "2027-01-15"

Request examples

default

{
  "data": {
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "version": 3,
    "handling_units": [
      {
        "barcode_kind": "sscc",
        "barcode": "046012345678901234",
        "contents": [
          {
            "product_id": 1201,
            "quantity": 4
          }
        ]
      }
    ]
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes CrossDockResource Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility.
data.id no integer:int64 | null min: 1 4101
data.public_id no string | null "01J2CROSSDOCKCASE000000001"
data.case_id no integer:int64 | null min: 1 4101
data.status no string | null "released"
data.state no string | null "open"
data.version no integer:int64 | null min: 1 3
data.command_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.correlation_id no string:uuid | null "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 4101,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "status": "released",
    "version": 3,
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

CrossDockBadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "BAD_REQUEST",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

409 Conflict

CrossDockConflict

The request conflicts with the current aggregate version or command state.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

CROSSDOCK_VERSION_CONFLICT

{
  "message": "The request conflicts with the current aggregate version or command state.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "CROSSDOCK_VERSION_CONFLICT",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

422 Validation error

CrossDockValidationError

The given data was invalid.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

VALIDATION_ERROR

{
  "message": "The given data was invalid.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "VALIDATION_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
GET /api/v2/crossdock/cases/{case}/orders

List cross-dock orders

operationIdcrossDockListOrders
TagCross-docking
SecuritybearerAuth

List cross-dock orders in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/orders" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 250
Number of records per page. Default is 50; maximum is 250. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 50
sort query no string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, send_date, created_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. "id"
id query no integer:int64 form true min: 1 Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. 1001
status_id query no integer:int64 form true min: 1 Filter by status_id using exact matching. The same filter may also be sent as filter[status_id] where supported by the Laravel query adapter. 1

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<Order>
data[] no Order Outbound warehouse order. Optional relation fields are present when loaded by the controller or requested through include.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].external_id no string | null "ORD-100245"
data[].domain_id no integer:int64 | null min: 1 3
data[].type_id no integer:int64 | null 1
data[].shop_id no integer:int64 | null min: 1 12
data[].warehouse_id no integer:int64 | null min: 1 42
data[].status_id no integer:int64 | null Order status ID. The current backend stores status records in the database; values are not modeled as a closed enum in the public contract. 20
data[].status no object | null
data[].status.id yes integer:int64 20
data[].status.name yes string "Created"
data[].status.color no string | null "#2457c5"
data[].status.background_color no string | null "#eaf0ff"
data[].order_date no string:date | null "2026-07-14"
data[].send_date no string | null Stored order send date, potentially supplied by import, manual input or integration processing. It may be a date or date-time string; it is not a universal physical carrier-handover timestamp. "2026-07-15 20:25:08"
data[].source_id no integer:int64 | null min: 1 1
data[].customer_type no integer:int64 | null 1
data[].is_cod no boolean true
data[].amounts no OrderAmounts
data[].amounts.shipping_price no number:float | null 8.6
data[].amounts.shipping_cost no number:float | null 0
data[].amounts.sum no number:float | null 39.98
data[].amounts.cod_sum no number:float | null 48.58
data[].company_id no integer:int64 | null min: 1 7
data[].marking yes OrderMarking Marking data expected for products in the order.
data[].marking.required yes boolean Whether the order contains products that require marking data after picking. true
data[].marking.types yes array<string> Marking types required by products in the order. Currently chestny_znak; the list may gain values such as jewel_uin and imei.
data[].marking.types[] no string "chestny_znak"
data[].contact no object | null
data[].contact.first_name no string | null "Ivan"
data[].contact.middle_name no string | null "Ivanovich"
data[].contact.last_name no string | null "Petrov"
data[].contact.phone no string | null "+359888123456"
data[].contact.email no string:email | null "customer@example.com"
data[].contact.country_id no integer:int64 | null min: 1 100
data[].contact.city_id no integer:int64 | null min: 1 200
data[].contact.postcode no string | null "1000"
data[].contact.latitude no number:float | null min: -90
max: 90
42.6977
data[].contact.longitude no number:float | null min: -180
max: 180
23.3219
data[].contact.full_address no string | null "1 Vitosha Boulevard, Sofia"
data[].delivery no object | null
data[].delivery.service_id no integer:int64 | null min: 1 1
data[].delivery.delivery_type yes enum | null enum: door, pickup_point Normalized delivery channel derived from the configured delivery service. Null when the service type is unknown. "door"
data[].delivery.is_courier yes boolean True for door delivery; false for pickup-point delivery or an unknown service type. true
data[].delivery.status no string | null "created"
data[].delivery.track_number no string | null "CDEK-123456789"
data[].delivery.pickup_point_id no string | null "SOFIA-01"
data[].delivery.source_id no string | null "cdek-15"
data[].delivery.tariff_code no integer:int64 | null 136
data[].delivery.additional_services no object Values of additional CDEK services configured for the selected integration. Boolean true enables a code-only service; other values are sent as the CDEK parameter. {"TRYING_ON":true,"PART_DELIV":false,"PACKAGE_1":2}
data[].delivery.label no string:uri | null "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf"
data[].delivery.delivery_date no string:date | null "2026-07-16"
data[].delivery.delivery_time_start no string:time | null "09:00:00Z"
data[].delivery.delivery_time_end no string:time | null "18:00:00Z"
data[].comments no object | null
data[].comments.delivery_service_text no string | null "Call before delivery"
data[].comments.inner_text no string | null "VIP customer"
data[].offers no array<OrderLineEmbedded>
data[].offers[] no OrderLineEmbedded Scalar lot fields use the actual lot only when the full line is picked from one lot; partial/multiple actual lots leave scalars null. Before picking they retain the requested lot. Requested constraints are always available in requested_lot.
data[].offers[].id yes integer:int64 readOnly min: 1 7001
data[].offers[].product_id no integer:int64 | null min: 1 1201
data[].offers[].quantity no number:float | null min: 0 2
data[].offers[].estimated_price no number:float | null 19.5
data[].offers[].price no number:float | null 19.99
data[].offers[].expiration_date no string:date | null "2027-01-15"
data[].offers[].batch no string | null maxLength: 15 "LOT-2026"
data[].offers[].operation_user_id no integer:int64 | null min: 1 9
data[].offers[].product no object | null
data[].offers[].product.id yes integer:int64 readOnly min: 1 1201
data[].offers[].product.name yes string "Coffee 250g"
data[].offers[].product.external_id no string | null "EXT-10045"
data[].offers[].reservation no OrderReservationLine Reservation totals for one order line.
data[].offers[].reservation.required_qty yes number:float 3
data[].offers[].reservation.reserved_qty yes number:float 1
data[].offers[].reservation.unreserved_qty yes number:float 2
data[].offers[].reservation.missing_qty yes number:float 2
data[].offers[].reservation.status yes enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data[].offers[].reservation_items no array<OrderReservationItem>
data[].offers[].reservation_items[] no OrderReservationItem Physical product or expanded component used to explain a reservation shortage.
data[].offers[].reservation_items[].offer_id yes integer:int64 min: 1 1201
data[].offers[].reservation_items[].offer_name no string | null "Coffee 250g"
data[].offers[].reservation_items[].offer_article no string | null "ART-001245"
data[].offers[].reservation_items[].offer_sku no string | null "SKU-001245"
data[].offers[].reservation_items[].required_qty yes number:float 3
data[].offers[].reservation_items[].reserved_qty yes number:float 1
data[].offers[].reservation_items[].unreserved_qty yes number:float 2
data[].offers[].reservation_items[].missing_qty yes number:float 2
data[].offers[].reservation_items[].status yes enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data[].offers[].reservation_items[].source_order_offer_ids yes array<integer:int64>
data[].offers[].reservation_items[].source_order_offer_ids[] no integer:int64 min: 1 7001
data[].offers[].reservation_items[].source yes enum enum: order_offer, component, quant, composite_quant "order_offer"
data[].offers[].reservation_items[].expanded_from_composite yes boolean false
data[].offers[].reservation_items[].expanded_from_quant yes boolean false
data[].offers[].reservation_items[].quant_base_offer_id no integer:int64 | null min: 1 1201
data[].offers[].reservation_items[].quant_base_multiplicity no number:float | null 6
data[].offers[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].offers[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].offers[].production_date no string:date | null "2026-01-15"
data[].offers[].requested_lot no WarehouseLot
data[].offers[].requested_lot.batch yes string | null "LOT-2026"
data[].offers[].requested_lot.production_date yes string:date | null "2026-01-15"
data[].offers[].requested_lot.expiration_date yes string:date | null "2027-01-15"
data[].offers[].picked_quantity no number:float min: 0 2
data[].offers[].fulfillment_lots no array<OrderFulfillmentLot> Current active placed warehouse rows for this exact order line and product. Existing orders are included where these rows survive. This is a current picking snapshot, not a historical shipment event.
data[].offers[].fulfillment_lots[] no OrderFulfillmentLot
data[].offers[].fulfillment_lots[].batch yes string | null "LOT-2026"
data[].offers[].fulfillment_lots[].production_date yes string:date | null "2026-01-15"
data[].offers[].fulfillment_lots[].expiration_date yes string:date | null "2027-01-15"
data[].offers[].fulfillment_lots[].warehouse_id yes integer:int64 min: 1 734
data[].offers[].fulfillment_lots[].product_id yes integer:int64 min: 1 1201
data[].offers[].fulfillment_lots[].quantity yes number:float min: 0 2
data[].reservation no OrderReservation Reservation readiness and shortages calculated for the order.
data[].reservation.ready yes boolean false
data[].reservation.reason yes string | null "Not all order products are reserved."
data[].reservation.expected_total yes number:float 3
data[].reservation.reserved_total yes number:float 1
data[].reservation.unreserved_total yes number:float 2
data[].reservation.missing_total yes number:float 2
data[].reservation.missing_items yes array<OrderReservationItem>
data[].reservation.missing_items[] no OrderReservationItem Physical product or expanded component used to explain a reservation shortage.
data[].reservation.missing_items[].offer_id yes integer:int64 min: 1 1201
data[].reservation.missing_items[].offer_name no string | null "Coffee 250g"
data[].reservation.missing_items[].offer_article no string | null "ART-001245"
data[].reservation.missing_items[].offer_sku no string | null "SKU-001245"
data[].reservation.missing_items[].required_qty yes number:float 3
data[].reservation.missing_items[].reserved_qty yes number:float 1
data[].reservation.missing_items[].unreserved_qty yes number:float 2
data[].reservation.missing_items[].missing_qty yes number:float 2
data[].reservation.missing_items[].status yes enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data[].reservation.missing_items[].source_order_offer_ids yes array<integer:int64>
data[].reservation.missing_items[].source_order_offer_ids[] no integer:int64 min: 1 7001
data[].reservation.missing_items[].source yes enum enum: order_offer, component, quant, composite_quant "order_offer"
data[].reservation.missing_items[].expanded_from_composite yes boolean false
data[].reservation.missing_items[].expanded_from_quant yes boolean false
data[].reservation.missing_items[].quant_base_offer_id no integer:int64 | null min: 1 1201
data[].reservation.missing_items[].quant_base_multiplicity no number:float | null 6
data[].reservation.error yes boolean false
data[].consumables no array<OrderConsumable>
data[].consumables[] no OrderConsumable Current consumable line, not an append-only consumption event. Unplaced usage creates a commitment but does not decrease physical stockTotal; do not treat that stockTotal as remaining packaging inventory.
data[].consumables[].id yes integer:int64 min: 1 301
data[].consumables[].order_id yes integer:int64 min: 1 8101
data[].consumables[].product_id yes integer:int64 min: 1 1202
data[].consumables[].warehouse_id yes integer:int64 | null min: 1 734
data[].consumables[].place_id yes integer:int64 | null min: 1 501
data[].consumables[].quantity yes number:float 1
data[].consumables[].stock_location_mode yes enum enum: placed, unplaced "unplaced"
data[].consumables[].created_at yes string:date-time | null "2026-07-14T10:30:00Z"
data[].consumables[].updated_at yes string:date-time | null "2026-07-14T10:30:00Z"
data[].status_history no array<OrderStatusHistoryEvent> Present only on GET list/detail with include=status_history. Ordered chronologically, retains repeat status cycles and combines surviving audit and action-log entries. Missing history returns an empty array.
data[].status_history[] no OrderStatusHistoryEvent Recorded WMS status transition or explicitly inferred initial status. It does not independently confirm physical carrier handover.
data[].status_history[].status_id yes integer:int64 130
data[].status_history[].previous_status_id yes integer:int64 | null 110
data[].status_history[].changed_at yes string:date-time Time of the WMS status transition in ISO 8601 with an explicit timezone offset. "2026-07-14T12:00:00+03:00"
data[].status_history[].source yes enum enum: audit, action_log, inferred "action_log"
data[].status_history[].inferred yes boolean True only for a reconstructed initial status at order creation; this is not a separately recorded transition. false
data[].status_history_meta no OrderStatusHistoryMeta
data[].status_history_meta.available yes boolean At least one event is available. This does not guarantee complete historical coverage. true
data[].status_history_meta.current_status_matches_history yes boolean The last available event has the current order status. False also when history is empty. true
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "id": 8101,
      "external_id": "ORD-100245",
      "domain_id": 3,
      "type_id": 1,
      "shop_id": 12,
      "warehouse_id": 42,
      "status_id": 20,
      "status": {
        "id": 20,
        "name": "Created",
        "color": "#2457c5",
        "background_color": "#eaf0ff"
      },
      "order_date": "2026-07-14",
      "send_date": "2026-07-15",
      "source_id": 1,
      "customer_type": 1,
      "is_cod": true,
      "amounts": {
        "shipping_price": 8.6,
        "shipping_cost": 0,
        "sum": 39.98,
        "cod_sum": 48.58
      },
      "company_id": 7,
      "marking": {
        "required": true,
        "types": [
          "chestny_znak"
        ]
      },
      "contact": {
        "first_name": "Ivan",
        "middle_name": null,
        "last_name": "Petrov",
        "phone": "+359888123456",
        "email": "customer@example.com",
        "country_id": 100,
        "city_id": 200,
        "postcode": "1000",
        "latitude": 42.6977,
        "longitude": 23.3219,
        "full_address": "1 Vitosha Boulevard, Sofia"
      },
      "delivery": {
        "service_id": 1,
        "delivery_type": "door",
        "is_courier": true,
        "status": "created",
        "track_number": "CDEK-123456789",
        "source_id": "cdek-15",
        "tariff_code": 136,
        "label": "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf",
        "delivery_date": "2026-07-16",
        "delivery_time_start": "09:00:00Z",
        "delivery_time_end": "18:00:00Z"
      },
      "comments": {
        "delivery_service_text": "Call before delivery",
        "inner_text": "VIP customer"
      },
      "offers": [
        {
          "id": 7001,
          "product_id": 1201,
          "quantity": 2,
          "estimated_price": 19.5,
          "price": 19.99,
          "expiration_date": "2027-01-15",
          "batch": "LOT-2026",
          "operation_user_id": 9,
          "product": {
            "id": 1201,
            "name": "Coffee 250g",
            "external_id": "EXT-10045"
          },
          "created_at": "2026-07-14T09:00:00Z",
          "updated_at": "2026-07-14T09:30:00Z"
        }
      ],
      "created_at": "2026-07-14T09:00:00Z",
      "updated_at": "2026-07-14T09:30:00Z"
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/orders?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/orders?page=2",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/orders?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/orders",
    "per_page": 50,
    "to": 50,
    "total": 73
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
POST /api/v2/crossdock/cases/{case}/orders

Create cross-dock order and target

operationIdcrossDockCreateOrderAndTarget
TagCross-docking
SecuritybearerAuth

Creates an outbound order in immutable cross-dock fulfillment mode together with its target and demand rows.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/orders" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CrossDockCreateOrderRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.command_id yes string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.external_id no string | null maxLength: 50 "ORD-XD-001"
data.type_id yes integer:int64 min: 1 1
data.group_id no oneOf<string | integer>
data.group_id no string maxLength: 255 "2ФИС"
data.group_id no integer Legacy numeric identifiers are also accepted.
data.shop_id no integer:int64 | null min: 1 12
data.warehouse_id no integer:int64 | null min: 1 43
data.send_date no string:date | null "2026-07-14"
data.source_id no integer:int64 | null min: 1 1001
data.customer_type no integer:int64 | null
data.company_id no integer:int64 | null min: 1 1001
data.is_cod no boolean false
data.shipping_price no number:float | null 7.5
data.shipping_cost no number:float | null 5.0
data.crossdock_target no object
data.crossdock_target.type no enum | null enum: order, route, staging_lane, dispatch "order"
data.crossdock_target.name no string | null maxLength: 190 "Lane 7"
data.crossdock_target.destination_ref no string | null maxLength: 190 "SOF"
data.crossdock_target.carrier_ref no string | null maxLength: 190 "CDEK"
data.crossdock_target.route_code no string | null maxLength: 190 "BG-SOF"
data.crossdock_target.place_id no integer:int64 | null min: 1 900
data.crossdock_target.priority no integer:int64 | null 100
data.crossdock_target.cutoff_at no string:date-time | null "2026-07-14T10:30:00Z"
data.lines yes array<object> minItems: 1
data.lines[] no object
data.lines[].product_id no integer:int64 | null min: 1 1201
data.lines[].product_external_id no string | null maxLength: 190 "EXT-10045"
data.lines[].quantity yes number:float min: 0.0001 4
data.lines[].estimated_price no number:float | null min: 0 19.99
data.lines[].price no number:float | null min: 0 19.99
data.lines[].production_date no string:date | null "2026-07-14"
data.lines[].expiration_date no string:date | null "2027-01-15"
data.lines[].batch no string | null maxLength: 15 "LOT-2026"
data.lines[].source_policy no enum | null enum: crossdock_only, crossdock_then_stock, stock_allowed "crossdock_only"
data.lines[].external_line_id no string | null maxLength: 190 "LINE-1"

Request examples

default

{
  "data": {
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "type_id": 1,
    "is_cod": false,
    "lines": [
      {
        "quantity": 4
      }
    ]
  }
}

Responses

201 Created.

Created.

Field Required Type Flags Constraints Description Example
data yes CrossDockResource Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility.
data.id no integer:int64 | null min: 1 4101
data.public_id no string | null "01J2CROSSDOCKCASE000000001"
data.case_id no integer:int64 | null min: 1 4101
data.status no string | null "released"
data.state no string | null "open"
data.version no integer:int64 | null min: 1 3
data.command_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.correlation_id no string:uuid | null "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 4101,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "status": "released",
    "version": 3,
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

CrossDockBadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "BAD_REQUEST",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

409 Conflict

CrossDockConflict

The request conflicts with the current aggregate version or command state.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

CROSSDOCK_VERSION_CONFLICT

{
  "message": "The request conflicts with the current aggregate version or command state.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "CROSSDOCK_VERSION_CONFLICT",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

422 Validation error

CrossDockValidationError

The given data was invalid.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

VALIDATION_ERROR

{
  "message": "The given data was invalid.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "VALIDATION_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
POST /api/v2/crossdock/cases/{case}/plan

Plan cross-dock allocation

operationIdcrossDockPlanAllocation
TagCross-docking
SecuritybearerAuth

Calculates direct order allocations from eligible supply to demand using FIFO expiration, priority, and strategy version.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/plan" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CrossDockPlanRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.command_id yes string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.version yes integer:int64 min: 1 3
data.strategy_version yes string maxLength: 50 "fifo-v1"
data.expected_plan_hash no string | null minLength: 64
maxLength: 64
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"

Request examples

default

{
  "data": {
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "version": 3,
    "strategy_version": "fifo-v1"
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes CrossDockResource Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility.
data.id no integer:int64 | null min: 1 4101
data.public_id no string | null "01J2CROSSDOCKCASE000000001"
data.case_id no integer:int64 | null min: 1 4101
data.status no string | null "released"
data.state no string | null "open"
data.version no integer:int64 | null min: 1 3
data.command_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.correlation_id no string:uuid | null "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 4101,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "status": "released",
    "version": 3,
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

CrossDockBadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "BAD_REQUEST",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

409 Conflict

CrossDockConflict

The request conflicts with the current aggregate version or command state.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

CROSSDOCK_VERSION_CONFLICT

{
  "message": "The request conflicts with the current aggregate version or command state.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "CROSSDOCK_VERSION_CONFLICT",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

422 Validation error

CrossDockValidationError

The given data was invalid.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

VALIDATION_ERROR

{
  "message": "The given data was invalid.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "VALIDATION_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
GET /api/v2/crossdock/cases/{case}/print-jobs

List cross-dock print jobs

operationIdcrossDockListPrintJobs
TagCross-docking
SecuritybearerAuth

List cross-dock print jobs in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/print-jobs" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 500
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 100
sort query no string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, created_at, dispatched_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. "id"
id query no integer:int64 form true min: 1 Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. 1001
label_id query no integer:int64 form true min: 1 Filter by label_id using exact matching. The same filter may also be sent as filter[label_id] where supported by the Laravel query adapter. 1
target_id query no integer:int64 form true min: 1 Filter by target_id using exact matching. The same filter may also be sent as filter[target_id] where supported by the Laravel query adapter. 1
status query no string form true Filter by status using exact matching. The same filter may also be sent as filter[status] where supported by the Laravel query adapter. "waiting"
printer_id query no integer:int64 form true min: 1 Filter by printer_id using exact matching. The same filter may also be sent as filter[printer_id] where supported by the Laravel query adapter. 1

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<CrossDockPrintJob>
data[] no CrossDockPrintJob Versioned target-label print job with dispatch and device acknowledgement.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].public_id yes string "01J2CROSSDOCKPRINTJOB001"
data[].case_id yes integer:int64 min: 1 4101
data[].target_id yes integer:int64 min: 1 4301
data[].label_id yes integer:int64 min: 1 4401
data[].status yes string "ready"
data[].attempts yes integer:int64 0
data[].printer_id no integer:int64 | null min: 1 55
data[].device_id no string | null "gate-printer-1"
data[].artifact_ref no string | null "crossdock/labels/4401.pdf"
data[].artifact_hash no string | null "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
data[].last_error no string | null "printer_offline"
data[].dispatched_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].acknowledged_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].version yes integer:int64 1
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "id": 1001,
      "public_id": "01J2CROSSDOCKPRINTJOB001",
      "case_id": 4101,
      "target_id": 4301,
      "label_id": 4401,
      "status": "ready",
      "attempts": 0,
      "version": 1
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/print-jobs?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/print-jobs?page=2",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/print-jobs?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/print-jobs",
    "per_page": 100,
    "to": 100,
    "total": 123
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
GET /api/v2/crossdock/cases/{case}/readiness

Get crossdock

operationIdlistCrossdockCasesReadiness
TagCross-docking
SecuritybearerAuth

Get crossdock in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/readiness" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes CrossDockResource Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility.
data.id no integer:int64 | null min: 1 4101
data.public_id no string | null "01J2CROSSDOCKCASE000000001"
data.case_id no integer:int64 | null min: 1 4101
data.status no string | null "released"
data.state no string | null "open"
data.version no integer:int64 | null min: 1 3
data.command_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.correlation_id no string:uuid | null "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 4101,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "status": "released",
    "version": 3,
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
  },
  "meta": {
    "api_version": "v2"
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
POST /api/v2/crossdock/cases/{case}/release

Release cross-dock plan

operationIdcrossDockReleasePlan
TagCross-docking
SecuritybearerAuth

Freezes the current plan hash, activates allocations and targets, and creates executable tasks and current labels.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/release" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CrossDockReleaseRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.command_id yes string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.version yes integer:int64 min: 1 4
data.plan_hash yes string minLength: 64
maxLength: 64
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"

Request examples

default

{
  "data": {
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "version": 4,
    "plan_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes CrossDockResource Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility.
data.id no integer:int64 | null min: 1 4101
data.public_id no string | null "01J2CROSSDOCKCASE000000001"
data.case_id no integer:int64 | null min: 1 4101
data.status no string | null "released"
data.state no string | null "open"
data.version no integer:int64 | null min: 1 3
data.command_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.correlation_id no string:uuid | null "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 4101,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "status": "released",
    "version": 3,
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

CrossDockBadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "BAD_REQUEST",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

409 Conflict

CrossDockConflict

The request conflicts with the current aggregate version or command state.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

CROSSDOCK_VERSION_CONFLICT

{
  "message": "The request conflicts with the current aggregate version or command state.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "CROSSDOCK_VERSION_CONFLICT",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

422 Validation error

CrossDockValidationError

The given data was invalid.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

VALIDATION_ERROR

{
  "message": "The given data was invalid.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "VALIDATION_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
POST /api/v2/crossdock/cases/{case}/return-to-draft

Run crossdock action

operationIdcreateCrossdockCasesReturnToDraft
TagCross-docking
SecuritybearerAuth

Run crossdock action in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/return-to-draft" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CrossDockCommandRequest required

Field Required Type Flags Constraints Description Example
data yes object Operation-specific payload. Mutating commands require command_id; versioned aggregates also require the current version.
data.command_id no string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.version no integer:int64 | null min: 1 3
data.barcode no string | null "4601234567890"
data.quantity no number:float | null min: 0 5
data.reason no string | null "Supervisor-approved operational action"

Request examples

default

{
  "data": {
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4"
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes CrossDockResource Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility.
data.id no integer:int64 | null min: 1 4101
data.public_id no string | null "01J2CROSSDOCKCASE000000001"
data.case_id no integer:int64 | null min: 1 4101
data.status no string | null "released"
data.state no string | null "open"
data.version no integer:int64 | null min: 1 3
data.command_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.correlation_id no string:uuid | null "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 4101,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "status": "released",
    "version": 3,
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

CrossDockBadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "BAD_REQUEST",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

409 Conflict

CrossDockConflict

The request conflicts with the current aggregate version or command state.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

CROSSDOCK_VERSION_CONFLICT

{
  "message": "The request conflicts with the current aggregate version or command state.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "CROSSDOCK_VERSION_CONFLICT",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

422 Validation error

CrossDockValidationError

The given data was invalid.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

VALIDATION_ERROR

{
  "message": "The given data was invalid.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "VALIDATION_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
GET /api/v2/crossdock/cases/{case}/scan-sessions

Get crossdock

operationIdlistCrossdockCasesScanSessions
TagCross-docking
SecuritybearerAuth

Get crossdock in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/scan-sessions" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes CrossDockResource Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility.
data.id no integer:int64 | null min: 1 4101
data.public_id no string | null "01J2CROSSDOCKCASE000000001"
data.case_id no integer:int64 | null min: 1 4101
data.status no string | null "released"
data.state no string | null "open"
data.version no integer:int64 | null min: 1 3
data.command_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.correlation_id no string:uuid | null "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 4101,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "status": "released",
    "version": 3,
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
  },
  "meta": {
    "api_version": "v2"
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
POST /api/v2/crossdock/cases/{case}/scans/source

Scan cross-dock source

operationIdcrossDockScanSource
TagCross-docking
SecuritybearerAuth

Recognizes a product, quant, or SSCC at the source place and opens a versioned device-bound scan session with a temporary stock hold.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/scans/source" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CrossDockSourceScanRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.command_id yes string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.barcode yes string maxLength: 190 "4601234567890"
data.device_id yes string maxLength: 190 "tsd-01"
data.source_place_id yes integer:int64 min: 1 800

Request examples

default

{
  "data": {
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "barcode": "4601234567890",
    "device_id": "tsd-01",
    "source_place_id": 800
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes CrossDockResource Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility.
data.id no integer:int64 | null min: 1 4101
data.public_id no string | null "01J2CROSSDOCKCASE000000001"
data.case_id no integer:int64 | null min: 1 4101
data.status no string | null "released"
data.state no string | null "open"
data.version no integer:int64 | null min: 1 3
data.command_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.correlation_id no string:uuid | null "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 4101,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "status": "released",
    "version": 3,
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

CrossDockBadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "BAD_REQUEST",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

409 Conflict

CrossDockConflict

The request conflicts with the current aggregate version or command state.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

CROSSDOCK_VERSION_CONFLICT

{
  "message": "The request conflicts with the current aggregate version or command state.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "CROSSDOCK_VERSION_CONFLICT",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

422 Validation error

CrossDockValidationError

The given data was invalid.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

VALIDATION_ERROR

{
  "message": "The given data was invalid.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "VALIDATION_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
POST /api/v2/crossdock/cases/{case}/scans/target

Confirm cross-dock target scan

operationIdcrossDockConfirmTargetScan
TagCross-docking
SecuritybearerAuth

Validates the current target label, commits fulfillment and stock movements, consumes the hold, and advances the linked order.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/scans/target" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CrossDockTargetScanRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.command_id yes string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.scan_session_id yes string maxLength: 190 "01J2CROSSDOCKSESSION000001"
data.version yes integer:int64 min: 1 2
data.target_barcode yes string maxLength: 255 "XD1.4301.2.signature"
data.device_id yes string maxLength: 190 "tsd-01"

Request examples

default

{
  "data": {
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "scan_session_id": "01J2CROSSDOCKSESSION000001",
    "version": 2,
    "target_barcode": "XD1.4301.2.signature",
    "device_id": "tsd-01"
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes CrossDockResource Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility.
data.id no integer:int64 | null min: 1 4101
data.public_id no string | null "01J2CROSSDOCKCASE000000001"
data.case_id no integer:int64 | null min: 1 4101
data.status no string | null "released"
data.state no string | null "open"
data.version no integer:int64 | null min: 1 3
data.command_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.correlation_id no string:uuid | null "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 4101,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "status": "released",
    "version": 3,
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

CrossDockBadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "BAD_REQUEST",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

409 Conflict

CrossDockConflict

The request conflicts with the current aggregate version or command state.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

CROSSDOCK_VERSION_CONFLICT

{
  "message": "The request conflicts with the current aggregate version or command state.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "CROSSDOCK_VERSION_CONFLICT",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

422 Validation error

CrossDockValidationError

The given data was invalid.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

VALIDATION_ERROR

{
  "message": "The given data was invalid.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "VALIDATION_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
POST /api/v2/crossdock/cases/{case}/submit

Run crossdock action

operationIdcreateCrossdockCasesSubmit
TagCross-docking
SecuritybearerAuth

Run crossdock action in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/submit" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CrossDockCommandRequest required

Field Required Type Flags Constraints Description Example
data yes object Operation-specific payload. Mutating commands require command_id; versioned aggregates also require the current version.
data.command_id no string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.version no integer:int64 | null min: 1 3
data.barcode no string | null "4601234567890"
data.quantity no number:float | null min: 0 5
data.reason no string | null "Supervisor-approved operational action"

Request examples

default

{
  "data": {
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4"
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes CrossDockResource Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility.
data.id no integer:int64 | null min: 1 4101
data.public_id no string | null "01J2CROSSDOCKCASE000000001"
data.case_id no integer:int64 | null min: 1 4101
data.status no string | null "released"
data.state no string | null "open"
data.version no integer:int64 | null min: 1 3
data.command_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.correlation_id no string:uuid | null "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 4101,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "status": "released",
    "version": 3,
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

CrossDockBadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "BAD_REQUEST",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

409 Conflict

CrossDockConflict

The request conflicts with the current aggregate version or command state.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

CROSSDOCK_VERSION_CONFLICT

{
  "message": "The request conflicts with the current aggregate version or command state.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "CROSSDOCK_VERSION_CONFLICT",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

422 Validation error

CrossDockValidationError

The given data was invalid.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

VALIDATION_ERROR

{
  "message": "The given data was invalid.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "VALIDATION_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
GET /api/v2/crossdock/cases/{case}/supplies

List cross-dock supplies

operationIdcrossDockListSupplies
TagCross-docking
SecuritybearerAuth

List cross-dock supplies in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/supplies" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 500
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 100
sort query no string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, product_id, created_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. "id"
id query no integer:int64 form true min: 1 Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. 1001
product_id query no integer:int64 form true min: 1 Filter by product_id using exact matching. The same filter may also be sent as filter[product_id] where supported by the Laravel query adapter. 1201
base_product_id query no integer:int64 form true min: 1 Filter by base_product_id using exact matching. The same filter may also be sent as filter[base_product_id] where supported by the Laravel query adapter. 1200
acceptance_id query no integer:int64 form true min: 1 Filter by acceptance_id using exact matching. The same filter may also be sent as filter[acceptance_id] where supported by the Laravel query adapter. 1

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<CrossDockSupply>
data[] no CrossDockSupply Inbound quantity available to the cross-dock planner.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].case_id yes integer:int64 min: 1 4101
data[].acceptance_id yes integer:int64 min: 1 5101
data[].acceptance_line_id yes integer:int64 min: 1 5201
data[].lineage_id yes string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data[].parent_supply_id no integer:int64 | null min: 1 1001
data[].product_id yes integer:int64 min: 1 1201
data[].base_product_id yes integer:int64 min: 1 1201
data[].quantity yes number:float 10
data[].base_quantity yes number:float 10
data[].received_quantity no number:float 10
data[].received_base_quantity no number:float 10
data[].eligible_base_quantity no number:float 10
data[].allocated_base_quantity no number:float 8
data[].executed_base_quantity no number:float 5
data[].batch no string | null "LOT-2026"
data[].production_date no string:date | null "2026-07-14"
data[].expiration_date no string:date | null "2027-01-15"
data[].quality_state no string "accepted"
data[].external_line_id no string | null "ASN-LINE-1"
data[].version yes integer:int64 2
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "id": 1001,
      "case_id": 4101,
      "acceptance_id": 5101,
      "acceptance_line_id": 5201,
      "lineage_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
      "product_id": 1201,
      "base_product_id": 1201,
      "quantity": 10,
      "base_quantity": 10,
      "received_quantity": 10,
      "received_base_quantity": 10,
      "eligible_base_quantity": 10,
      "allocated_base_quantity": 8,
      "executed_base_quantity": 5,
      "quality_state": "accepted",
      "version": 2
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/supplies?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/supplies?page=2",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/supplies?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/supplies",
    "per_page": 100,
    "to": 100,
    "total": 123
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
GET /api/v2/crossdock/cases/{case}/targets

List cross-dock targets

operationIdcrossDockListTargets
TagCross-docking
SecuritybearerAuth

List cross-dock targets in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/targets" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 500
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 100
sort query no string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, short_number, created_at. Default: short_number. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. "short_number"
id query no integer:int64 form true min: 1 Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. 1001
status query no string form true Filter by status using exact matching. The same filter may also be sent as filter[status] where supported by the Laravel query adapter. "waiting"
order_id query no integer:int64 form true min: 1 Filter by order_id using exact matching. The same filter may also be sent as filter[order_id] where supported by the Laravel query adapter. 1

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<CrossDockTarget>
data[] no CrossDockTarget Physical sorting or dispatch destination for a cross-dock order.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].public_id yes string "01J2CROSSDOCKTARGET000001"
data[].case_id yes integer:int64 min: 1 4101
data[].order_id no integer:int64 | null min: 1 8101
data[].type yes enum enum: order, route, staging_lane, dispatch "order"
data[].short_number yes integer:int64 7
data[].name no string | null "Lane 7"
data[].destination_ref no string | null "SOF"
data[].carrier_ref no string | null "CDEK"
data[].route_ref no string | null "BG-SOF"
data[].place_id no integer:int64 | null min: 1 900
data[].barcode_token_version no integer:int64 2
data[].current_label_id no integer:int64 | null min: 1 4401
data[].status yes string "ready"
data[].version yes integer:int64 3
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "id": 1001,
      "public_id": "01J2CROSSDOCKTARGET000001",
      "case_id": 4101,
      "type": "order",
      "short_number": 7,
      "barcode_token_version": 2,
      "status": "ready",
      "version": 3
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/targets?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/targets?page=2",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/targets?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/targets",
    "per_page": 100,
    "to": 100,
    "total": 123
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
PUT /api/v2/crossdock/cases/{case}/targets/places

Assign cross-dock target places

operationIdcrossDockAssignTargetPlaces
TagCross-docking
SecuritybearerAuth

Assign cross-dock target places in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/targets/places" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CrossDockAssignTargetPlacesRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.command_id yes string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.version yes integer:int64 min: 1 3
data.targets yes array<object> minItems: 1
maxItems: 500
data.targets[] no object
data.targets[].target_id yes integer:int64 min: 1 4301
data.targets[].target_version yes integer:int64 min: 1 2
data.targets[].target_place_id yes integer:int64 min: 1 900

Request examples

default

{
  "data": {
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "version": 3,
    "targets": [
      {
        "target_id": 4301,
        "target_version": 2,
        "target_place_id": 900
      }
    ]
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes CrossDockResource Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility.
data.id no integer:int64 | null min: 1 4101
data.public_id no string | null "01J2CROSSDOCKCASE000000001"
data.case_id no integer:int64 | null min: 1 4101
data.status no string | null "released"
data.state no string | null "open"
data.version no integer:int64 | null min: 1 3
data.command_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.correlation_id no string:uuid | null "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 4101,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "status": "released",
    "version": 3,
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

CrossDockBadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "BAD_REQUEST",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

409 Conflict

CrossDockConflict

The request conflicts with the current aggregate version or command state.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

CROSSDOCK_VERSION_CONFLICT

{
  "message": "The request conflicts with the current aggregate version or command state.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "CROSSDOCK_VERSION_CONFLICT",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

422 Validation error

CrossDockValidationError

The given data was invalid.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

VALIDATION_ERROR

{
  "message": "The given data was invalid.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "VALIDATION_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
GET /api/v2/crossdock/cases/{case}/tasks

List cross-dock tasks

operationIdcrossDockListTasks
TagCross-docking
SecuritybearerAuth

List cross-dock tasks in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/tasks" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
case path yes string Cross-dock case numeric ID or public ULID. "01J2CROSSDOCKCASE000000001"
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 500
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 100
sort query no string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, created_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. "id"
id query no integer:int64 form true min: 1 Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. 1001
status query no string form true Filter by status using exact matching. The same filter may also be sent as filter[status] where supported by the Laravel query adapter. "waiting"
type query no string form true Filter by type using exact matching. The same filter may also be sent as filter[type] where supported by the Laravel query adapter. "inbound"
target_id query no integer:int64 form true min: 1 Filter by target_id using exact matching. The same filter may also be sent as filter[target_id] where supported by the Laravel query adapter. 1

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<CrossDockTask>
data[] no CrossDockTask Executable cross-dock warehouse task.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].public_id yes string "01J2CROSSDOCKTASK0000001"
data[].case_id yes integer:int64 min: 1 4101
data[].allocation_id no integer:int64 | null min: 1 4501
data[].fulfillment_id no integer:int64 | null min: 1 4801
data[].target_id no integer:int64 | null min: 1 4301
data[].type yes string "move"
data[].source_place_id no integer:int64 | null min: 1 800
data[].target_place_id no integer:int64 | null min: 1 900
data[].product_id no integer:int64 | null min: 1 1201
data[].base_product_id no integer:int64 | null min: 1 1201
data[].base_quantity no number:float | null 4
data[].status yes string "ready"
data[].lease_owner_id no integer:int64 | null min: 1 25
data[].lease_until no string:date-time | null "2026-07-14T10:30:00Z"
data[].active_scan_session_id no integer:int64 | null min: 1 4901
data[].version yes integer:int64 1
data[].completed_at no string:date-time | null "2026-07-14T10:30:00Z"
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "id": 1001,
      "public_id": "01J2CROSSDOCKTASK0000001",
      "case_id": 4101,
      "type": "move",
      "status": "ready",
      "version": 1
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/tasks?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/tasks?page=2",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/tasks?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/tasks",
    "per_page": 100,
    "to": 100,
    "total": 123
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
GET /api/v2/crossdock/commands/{commandId}

Get cross-dock command status

operationIdcrossDockGetCommandStatus
TagCross-docking
SecuritybearerAuth

Returns the persisted idempotent command state and original result for recovery after a timeout.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/commands/4fe557e8-70f7-4b36-a124-d3afad4041d4" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
commandId path yes string:uuid Idempotent cross-dock command UUID. "4fe557e8-70f7-4b36-a124-d3afad4041d4"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes CrossDockResource Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility.
data.id no integer:int64 | null min: 1 4101
data.public_id no string | null "01J2CROSSDOCKCASE000000001"
data.case_id no integer:int64 | null min: 1 4101
data.status no string | null "released"
data.state no string | null "open"
data.version no integer:int64 | null min: 1 3
data.command_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.correlation_id no string:uuid | null "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 4101,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "status": "released",
    "version": 3,
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
  },
  "meta": {
    "api_version": "v2"
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
POST /api/v2/crossdock/exceptions/{exception}/resolve

Resolve cross-dock exception

operationIdcrossDockResolveException
TagCross-docking
SecuritybearerAuth

Resolve cross-dock exception in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/exceptions/1001/resolve" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
exception path yes integer:int64 min: 1 Cross-dock exception ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CrossDockResolveExceptionRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.command_id yes string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.version yes integer:int64 min: 1 1
data.decision yes enum enum: resume, fallback_completed, manual_accept "resume"
data.reason no string | null maxLength: 5000 "Supervisor approved"

Request examples

default

{
  "data": {
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "version": 1,
    "decision": "resume"
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes CrossDockResource Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility.
data.id no integer:int64 | null min: 1 4101
data.public_id no string | null "01J2CROSSDOCKCASE000000001"
data.case_id no integer:int64 | null min: 1 4101
data.status no string | null "released"
data.state no string | null "open"
data.version no integer:int64 | null min: 1 3
data.command_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.correlation_id no string:uuid | null "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 4101,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "status": "released",
    "version": 3,
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

CrossDockBadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "BAD_REQUEST",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

409 Conflict

CrossDockConflict

The request conflicts with the current aggregate version or command state.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

CROSSDOCK_VERSION_CONFLICT

{
  "message": "The request conflicts with the current aggregate version or command state.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "CROSSDOCK_VERSION_CONFLICT",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

422 Validation error

CrossDockValidationError

The given data was invalid.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

VALIDATION_ERROR

{
  "message": "The given data was invalid.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "VALIDATION_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
GET /api/v2/crossdock/loading-visits/{visit}/documents

List cross-dock documents for loading visit

operationIdcrossDockListDocumentsForLoadingVisit
TagCross-docking
SecuritybearerAuth

List cross-dock documents for loading visit in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/loading-visits/1001/documents" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
visit path yes integer:int64 min: 1 Loading visit ID. 1001
page query no integer:int64 form true min: 1 Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. 1
per_page query no integer:int64 form true min: 1
max: 500
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. 100
sort query no string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. "id"
document_type query no string form true Filter by document_type using exact matching. The same filter may also be sent as filter[document_type] where supported by the Laravel query adapter. "acceptance"
document_id query no integer:int64 form true min: 1 Filter by document_id using exact matching. The same filter may also be sent as filter[document_id] where supported by the Laravel query adapter. 5101
role query no string form true Filter by role using exact matching. The same filter may also be sent as filter[role] where supported by the Laravel query adapter. "outbound"
status query no string form true Filter by status using exact matching. The same filter may also be sent as filter[status] where supported by the Laravel query adapter. "waiting"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes array<CrossDockLoadingAssociation>
data[] no CrossDockLoadingAssociation Association between a cross-dock document and a loading visit.
data[].id yes integer:int64 readOnly min: 1 1001
data[].created_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].case_id no integer:int64 | null min: 1 4101
data[].loading_visit_id yes integer:int64 min: 1 6101
data[].document_type yes string "order"
data[].document_id yes integer:int64 min: 1 8101
data[].role yes string "outbound"
data[].status yes string "attached"
data[].created_by no integer:int64 | null min: 1 25
data[].detached_by no integer:int64 | null min: 1 1001
data[].detached_at no string:date-time | null "2026-07-14T10:30:00Z"
data[].visit no object | null
data[].visit.id yes integer:int64 min: 1 6101
data[].visit.type yes string "outbound"
data[].visit.status yes string "approved"
data[].visit.physical_warehouse_id yes integer:int64 min: 1 42
data[].visit.gate_id no integer:int64 | null min: 1 3
data[].visit.planned_at no string:date-time | null "2026-07-14T10:30:00Z"
links yes PaginationLinks
links.first yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev yes string:uri | null
links.next yes string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta yes PaginationMeta
meta.api_version yes enum enum: v2 "v2"
meta.current_page yes integer:int32 min: 1 1
meta.from yes integer:int32 | null min: 1 1
meta.last_page yes integer:int32 min: 1 2
meta.path yes string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page yes integer:int32 min: 1 50
meta.to yes integer:int32 | null min: 1 50
meta.total yes integer:int32 min: 0 73

Response examples

success

{
  "data": [
    {
      "id": 1001,
      "loading_visit_id": 6101,
      "document_type": "order",
      "document_id": 8101,
      "role": "outbound",
      "status": "attached"
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/crossdock/loading-visits/6101/documents?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/crossdock/loading-visits/6101/documents?page=2",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/crossdock/loading-visits/6101/documents?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "https://betawms.ffcdek.ru/api/v2/crossdock/loading-visits/6101/documents",
    "per_page": 100,
    "to": 100,
    "total": 123
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
POST /api/v2/crossdock/print-jobs/{job}/acknowledge

Acknowledge cross-dock print job

operationIdcrossDockAcknowledgePrintJob
TagCross-docking
SecuritybearerAuth

Acknowledge cross-dock print job in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/print-jobs/1001/acknowledge" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
job path yes integer:int64 min: 1 Cross-dock print job ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CrossDockAcknowledgePrintJobRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.command_id yes string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.version yes integer:int64 min: 1 2
data.success yes boolean true
data.artifact_hash no string | null minLength: 64
maxLength: 64
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
data.error no string | null maxLength: 5000 "printer_offline"

Request examples

default

{
  "data": {
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "version": 2,
    "success": true
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes CrossDockResource Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility.
data.id no integer:int64 | null min: 1 4101
data.public_id no string | null "01J2CROSSDOCKCASE000000001"
data.case_id no integer:int64 | null min: 1 4101
data.status no string | null "released"
data.state no string | null "open"
data.version no integer:int64 | null min: 1 3
data.command_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.correlation_id no string:uuid | null "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 4101,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "status": "released",
    "version": 3,
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

CrossDockBadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "BAD_REQUEST",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

409 Conflict

CrossDockConflict

The request conflicts with the current aggregate version or command state.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

CROSSDOCK_VERSION_CONFLICT

{
  "message": "The request conflicts with the current aggregate version or command state.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "CROSSDOCK_VERSION_CONFLICT",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

422 Validation error

CrossDockValidationError

The given data was invalid.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

VALIDATION_ERROR

{
  "message": "The given data was invalid.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "VALIDATION_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
POST /api/v2/crossdock/print-jobs/{job}/dispatch

Dispatch cross-dock print job

operationIdcrossDockDispatchPrintJob
TagCross-docking
SecuritybearerAuth

Dispatch cross-dock print job in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/print-jobs/1001/dispatch" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
job path yes integer:int64 min: 1 Cross-dock print job ID. 1001
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CrossDockDispatchPrintJobRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.command_id yes string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.version yes integer:int64 min: 1 1
data.printer_id no integer:int64 | null min: 1 55
data.device_id no string | null maxLength: 190 "gate-printer-1"

Request examples

default

{
  "data": {
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "version": 1
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes CrossDockResource Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility.
data.id no integer:int64 | null min: 1 4101
data.public_id no string | null "01J2CROSSDOCKCASE000000001"
data.case_id no integer:int64 | null min: 1 4101
data.status no string | null "released"
data.state no string | null "open"
data.version no integer:int64 | null min: 1 3
data.command_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.correlation_id no string:uuid | null "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 4101,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "status": "released",
    "version": 3,
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

CrossDockBadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "BAD_REQUEST",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

409 Conflict

CrossDockConflict

The request conflicts with the current aggregate version or command state.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

CROSSDOCK_VERSION_CONFLICT

{
  "message": "The request conflicts with the current aggregate version or command state.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "CROSSDOCK_VERSION_CONFLICT",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

422 Validation error

CrossDockValidationError

The given data was invalid.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

VALIDATION_ERROR

{
  "message": "The given data was invalid.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "VALIDATION_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
GET /api/v2/crossdock/scan-sessions/{session}

Get cross-dock scan session

operationIdcrossDockGetScanSession
TagCross-docking
SecuritybearerAuth

Get cross-dock scan session in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/scan-sessions/01J2CROSSDOCKSESSION000001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Parameters

Name In Required Type Style Explode Constraints Description Example
session path yes string Cross-dock scan session numeric ID or public ULID. "01J2CROSSDOCKSESSION000001"

Request body

No request body.

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes CrossDockScanSession Device-bound source scan session waiting for quantity or target confirmation.
data.id yes integer:int64 readOnly min: 1 1001
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
data.public_id yes string "01J2CROSSDOCKSESSION000001"
data.case_id yes integer:int64 min: 1 4101
data.task_id yes integer:int64 min: 1 4551
data.allocation_id yes integer:int64 min: 1 4501
data.target_id yes integer:int64 min: 1 4301
data.device_id yes string "tsd-01"
data.source_place_id yes integer:int64 min: 1 800
data.recognized_type yes enum enum: product, quant, sscc "product"
data.handling_unit_id no integer:int64 | null min: 1 1001
data.product_id yes integer:int64 min: 1 1201
data.base_product_id yes integer:int64 min: 1 1201
data.quantity_mode no string "manual"
data.scanned_base_quantity no number:float 1
data.confirmed_base_quantity no number:float 4
data.status yes string "awaiting_target"
data.version yes integer:int64 2
data.expires_at no string:date-time | null "2026-07-14T10:30:00Z"
data.committed_at no string:date-time | null "2026-07-14T10:30:00Z"
data.cancelled_at no string:date-time | null "2026-07-14T10:30:00Z"
data.next_action no string | null "scan_target"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 1001,
    "public_id": "01J2CROSSDOCKSESSION000001",
    "case_id": 4101,
    "task_id": 4551,
    "allocation_id": 4501,
    "target_id": 4301,
    "device_id": "tsd-01",
    "source_place_id": 800,
    "recognized_type": "product",
    "product_id": 1201,
    "base_product_id": 1201,
    "quantity_mode": "manual",
    "scanned_base_quantity": 1,
    "confirmed_base_quantity": 4,
    "status": "awaiting_target",
    "version": 2
  },
  "meta": {
    "api_version": "v2"
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
POST /api/v2/crossdock/scan-sessions/{session}/cancel

Cancel cross-dock scan session

operationIdcrossDockCancelScanSession
TagCross-docking
SecuritybearerAuth

Cancel cross-dock scan session in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/scan-sessions/01J2CROSSDOCKSESSION000001/cancel" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
session path yes string Cross-dock scan session numeric ID or public ULID. "01J2CROSSDOCKSESSION000001"
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CrossDockCancelScanSessionRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.command_id yes string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.version yes integer:int64 min: 1 1
data.device_id yes string maxLength: 190 "tsd-01"

Request examples

default

{
  "data": {
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "version": 1,
    "device_id": "tsd-01"
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes CrossDockResource Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility.
data.id no integer:int64 | null min: 1 4101
data.public_id no string | null "01J2CROSSDOCKCASE000000001"
data.case_id no integer:int64 | null min: 1 4101
data.status no string | null "released"
data.state no string | null "open"
data.version no integer:int64 | null min: 1 3
data.command_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.correlation_id no string:uuid | null "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 4101,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "status": "released",
    "version": 3,
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

CrossDockBadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "BAD_REQUEST",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

409 Conflict

CrossDockConflict

The request conflicts with the current aggregate version or command state.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

CROSSDOCK_VERSION_CONFLICT

{
  "message": "The request conflicts with the current aggregate version or command state.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "CROSSDOCK_VERSION_CONFLICT",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

422 Validation error

CrossDockValidationError

The given data was invalid.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

VALIDATION_ERROR

{
  "message": "The given data was invalid.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "VALIDATION_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}
POST /api/v2/crossdock/scan-sessions/{session}/quantity

Set cross-dock scan quantity

operationIdcrossDockSetScanQuantity
TagCross-docking
SecuritybearerAuth

Set cross-dock scan quantity in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.

HTTP request example (cURL)

Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/scan-sessions/01J2CROSSDOCKSESSION000001/quantity" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Parameters

Name In Required Type Style Explode Constraints Description Example
session path yes string Cross-dock scan session numeric ID or public ULID. "01J2CROSSDOCKSESSION000001"
Idempotency-Key header no string maxLength: 191 Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. "ord-create-20260714-001"

Request body

CrossDockSetScanQuantityRequest required

Field Required Type Flags Constraints Description Example
data yes object
data.command_id yes string:uuid "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.version yes integer:int64 min: 1 1
data.device_id yes string maxLength: 190 "tsd-01"
data.quantity yes integer:int64 min: 1 4

Request examples

default

{
  "data": {
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "version": 1,
    "device_id": "tsd-01",
    "quantity": 4
  }
}

Responses

200 Successful response.

Successful response.

Field Required Type Flags Constraints Description Example
data yes CrossDockResource Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility.
data.id no integer:int64 | null min: 1 4101
data.public_id no string | null "01J2CROSSDOCKCASE000000001"
data.case_id no integer:int64 | null min: 1 4101
data.status no string | null "released"
data.state no string | null "open"
data.version no integer:int64 | null min: 1 3
data.command_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
data.correlation_id no string:uuid | null "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
data.created_at no string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at no string:date-time | null "2026-07-14T10:30:00Z"
meta yes ResponseMeta
meta.api_version yes enum enum: v2 "v2"
meta.deleted no boolean true
meta.id no integer:int64 | null min: 1 1001
meta.command_replayed no boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration no object | null
meta.crossdock_configuration.physical_warehouse_id yes integer:int64 min: 1 42
meta.crossdock_configuration.enabled yes boolean true
meta.crossdock_configuration.process_version yes string "direct_order_v1"

Response examples

success

{
  "data": {
    "id": 4101,
    "public_id": "01J2CROSSDOCKCASE000000001",
    "status": "released",
    "version": 3,
    "command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Bad request

CrossDockBadRequest

Bad request.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

BAD_REQUEST

{
  "message": "Bad request.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "BAD_REQUEST",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

401 Authentication required

CrossDockUnauthorized

Authentication is required.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "AUTH_REQUIRED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

403 Forbidden

CrossDockForbidden

The authenticated account is not allowed to perform this action.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "FORBIDDEN",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

404 Not found

CrossDockNotFound

The requested resource was not found or is outside the authenticated account scope.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "NOT_FOUND",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

409 Conflict

CrossDockConflict

The request conflicts with the current aggregate version or command state.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

CROSSDOCK_VERSION_CONFLICT

{
  "message": "The request conflicts with the current aggregate version or command state.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "CROSSDOCK_VERSION_CONFLICT",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

422 Validation error

CrossDockValidationError

The given data was invalid.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

VALIDATION_ERROR

{
  "message": "The given data was invalid.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "VALIDATION_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

429 Rate limit exceeded

CrossDockTooManyRequests

Rate limit exceeded.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

RATE_LIMITED

{
  "message": "Rate limit exceeded.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "RATE_LIMITED",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}

500 Internal server error

CrossDockInternalServerError

An unexpected server error occurred.

Field Required Type Flags Constraints Description Example
message yes string "Cross-docking is disabled for the selected client warehouse."
errors yes object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta yes CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version yes enum enum: v2 "v2"
meta.error_code yes string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id no string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details no object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Response examples

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "errors": {
  },
  "meta": {
    "api_version": "v2",
    "error_code": "INTERNAL_SERVER_ERROR",
    "correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
    "details": {
    }
  }
}