Acceptances

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

Documents, lots and physical stock

stocks.physical / stocks.aggregateArrays of warehouse totals: warehouse_id, warehouse_name, stockTotal, stockReserved, stockAvailable. stocks.available_by_warehouse is an object keyed by warehouse ID; these are not identical shapes.
GET /api/v2/products/{id}/stock-lotsPhysically placed quantities by lot and dates. An unassigned reservation cannot be subtracted from an arbitrary lot. Check quantity units and warehouse in the response.
accepted_lotsActual receipt lots. Expected, accepted and placed quantities are distinct measures; a difference does not itself indicate an API error.
requested_lot / fulfillment_lotsOrder requested_lot expresses a requirement; fulfillment_lots records actual picking and picked_quantity the picked amount. Multiple actual lots cannot be reduced to one date.
movement_type / operationPicking can emit a reservation-release and physical-issue pair. Distinguish operation instead of counting two physical issues. Transfers correlate through movement_group_id; transfer_kind specifies the kind.
GET /api/v2/closed-boxesActual sealed boxes with a unique SSCC: balance=1 and balance_unit=box. A packaging-type barcode from products is not a unique SSCC. Opened, shipped and expected-only boxes are excluded.
acceptance_dateFor standard/return creation (type_id=1/2), the current handler assigns server now() even when acceptance_date is supplied. Updating an existing acceptance accepts the date. Type 3 uses a separate cross-dock service. created_at/updated_at are technical timestamps, not the document date.
LifecycleAcceptance cancellation is a separate cancel command with state checks, not deletion. Prefer /lines; deprecated /offers remain for compatibility. See operation-specific constraints.
Three acceptance types
type_id=1 is a standard acceptance, type_id=2 is a return, and type_id=3 is cross-dock. The type is selected at creation and is immutable. For type 3, POST /api/v2/acceptances atomically creates the draft case and supply rows; continue with the Cross-docking operations.

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"
}