Приемки

Каждая операция ниже сгенерирована из OpenAPI v2 и содержит параметры, поля запроса, поля ответа, ошибки и примеры.

Документы, партии и фактические остатки

stocks.physical / stocks.aggregateМассивы складских итогов: warehouse_id, warehouse_name, stockTotal, stockReserved, stockAvailable. stocks.available_by_warehouse — объект с ключами ID складов. Не воспринимайте эти три поля как одинаковую структуру.
GET /api/v2/products/{id}/stock-lotsФизически размещённый товар по партиям и датам. Резерв без конкретной партии нельзя вычитать из произвольно выбранной партии. Сверяйте единицы количества и склад в ответе.
accepted_lotsФактические партии приёмки. Ожидание, фактическая приёмка и размещение — разные показатели. Их расхождение само по себе не означает ошибку API.
requested_lot / fulfillment_lotsВ строке заказа requested_lot описывает требование, fulfillment_lots — фактический подбор; picked_quantity — подобранное количество. Несколько фактических партий нельзя сводить к одной дате.
movement_type / operationПодбор может давать пару снятия резерва и физического списания. Различайте operation; не считайте обе строки двумя списаниями. Перемещения объединяются через movement_group_id; transfer_kind уточняет вид.
GET /api/v2/closed-boxesРеальные закрытые короба с уникальным SSCC: balance=1, balance_unit=box. Штрихкод типа упаковки из products не является уникальным SSCC. Открытые, отгруженные и только ожидаемые короба не входят в текущий закрытый остаток.
acceptance_dateПри создании обычной/возвратной приёмки (type_id=1/2) текущий обработчик ставит серверное now(), даже если передана acceptance_date. Изменение существующей приёмки принимает дату. Создание type_id=3 использует отдельный cross-dock сервис. created_at/updated_at — технические метки, не дата документа.
LifecycleОтмена приёмки — отдельная команда cancel с проверкой состояния; она не равна удалению. Для строк используйте /lines, а устаревшие /offers сохраняются для совместимости. Подробные ограничения смотрите у операции.
Три типа приёмки
type_id=1 — обычная приёмка, type_id=2 — возврат, type_id=3 — кросс-докинг. Тип выбирается только при создании и затем не меняется. Для типа 3 операция POST /api/v2/acceptances атомарно создаёт также draft-кейс и supply; продолжение процесса описано в разделе Кросс-докинг.

Приемки

GET /api/v2/acceptances

Получить список приемок

operationIdlistAcceptances
РазделПриемки
БезопасностьbearerAuth

Возвращает приемки, видимые аутентифицированному аккаунту. Используйте описанные query parameters для фильтрации, сортировки и пагинации.
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-запроса (cURL)

Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.

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

Параметры

Имя Где Обязательное Тип Style Explode Ограничения Описание Пример
page query нет integer:int64 form true min: 1 Номер страницы. Этот фильтр также можно передать как filter[page], если это поддерживает Laravel query adapter. 1
per_page query нет integer:int64 form true min: 1
max: 250
Количество записей на странице. По умолчанию 50; максимум 250. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. 50
sort query нет string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, acceptance_date, external_id, created_at, updated_at. По умолчанию: -id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. "-id"
include query нет string form false Связанные сущности через запятую. Допустимые значения: offers. Этот фильтр также можно передать как filter[include], если это поддерживает Laravel query adapter. "offers"
id query нет integer:int64 form true min: 1 Фильтр по id с точным совпадением. Этот фильтр также можно передать как filter[id], если это поддерживает Laravel query adapter. 1001
external_id query нет string form true Фильтр по external_id с точным совпадением. Этот фильтр также можно передать как filter[external_id], если это поддерживает Laravel query adapter. "EXT-10045"
status_id query нет integer:int64 form true min: 1 Фильтр по status_id с точным совпадением. Этот фильтр также можно передать как filter[status_id], если это поддерживает Laravel query adapter. 1
warehouse_id query нет integer:int64 form true min: 1 Фильтр по warehouse_id с точным совпадением. Этот фильтр также можно передать как filter[warehouse_id], если это поддерживает Laravel query adapter. 42
shop_id query нет integer:int64 form true min: 1 Фильтр по shop_id с точным совпадением. Этот фильтр также можно передать как filter[shop_id], если это поддерживает Laravel query adapter. 12
type_id query нет integer:int64 form true min: 1 Фильтр по type_id с точным совпадением. Этот фильтр также можно передать как filter[type_id], если это поддерживает Laravel query adapter. 1
user_id query нет integer:int64 form true min: 1 Фильтр по user_id с точным совпадением. Этот фильтр также можно передать как filter[user_id], если это поддерживает Laravel query adapter. 15
document_barcode query нет string form true Фильтр по document_barcode с частичным текстовым совпадением. Этот фильтр также можно передать как filter[document_barcode], если это поддерживает Laravel query adapter. "ASN-100245-BARCODE"
comment query нет string form true Фильтр по comment с частичным текстовым совпадением. Этот фильтр также можно передать как filter[comment], если это поддерживает Laravel query adapter. "Priority"
acceptance_date_from query нет string:date form true Нижняя включительная граница даты для acceptance_date. Этот фильтр также можно передать как filter[acceptance_date_from], если это поддерживает Laravel query adapter. "2026-07-14"
acceptance_date_to query нет string:date form true Верхняя включительная граница даты для acceptance_date. Этот фильтр также можно передать как filter[acceptance_date_to], если это поддерживает Laravel query adapter. "2026-07-14"
created_at_from query нет string:date form true Нижняя включительная граница даты для created_at. Этот фильтр также можно передать как filter[created_at_from], если это поддерживает Laravel query adapter. "2026-07-14"
created_at_to query нет string:date form true Верхняя включительная граница даты для created_at. Этот фильтр также можно передать как filter[created_at_to], если это поддерживает Laravel query adapter. "2026-07-14"
updated_at_from query нет string:date form true Нижняя включительная граница даты для updated_at. Этот фильтр также можно передать как filter[updated_at_from], если это поддерживает Laravel query adapter. "2026-07-14"
updated_at_to query нет string:date form true Верхняя включительная граница даты для updated_at. Этот фильтр также можно передать как filter[updated_at_to], если это поддерживает Laravel query adapter. "2026-07-14"

Тело запроса

Тело запроса отсутствует.

Ответы

200 Successful response.

Successful response.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да array<Acceptance>
data[] нет Acceptance Входящий документ приемки. Связанные поля присутствуют, когда контроллер их загрузил или они запрошены через include.
data[].id да integer:int64 readOnly min: 1 1001
data[].created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data[].external_id нет string | null "ASN-100245"
data[].document_barcode нет string | null "ASN-100245-BARCODE"
data[].domain_id нет integer:int64 | null min: 1 3
data[].status_id нет 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 нет integer:int64 | null min: 1 9
data[].warehouse_id нет integer:int64 | null min: 1 42
data[].shop_id нет integer:int64 | null min: 1 12
data[].type_id нет enum:int64 | null enum: 1, 2, 3 1 — обычная приёмка; 2 — возврат; 3 — cross-dock-приёмка. После создания тип изменить нельзя. 1
data[].type_code нет enum | null enum: acceptance, return, crossdock "acceptance"
data[].comment нет string | null "Inbound from supplier"
data[].counts да AcceptanceCounts
data[].counts.expected да number:float 10
data[].counts.accepted да number:float 0
data[].counts.placed да number:float 0
data[].acceptance_date нет string:date | null "2026-07-14"
data[].offers нет array<AcceptanceLine>
data[].offers[] нет 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 да integer:int64 readOnly min: 1 1001
data[].offers[].created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data[].offers[].updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data[].offers[].acceptance_id да integer:int64 min: 1 5101
data[].offers[].product_id да integer:int64 min: 1 1201
data[].offers[].expected_quantity да number:float min: 0 10
data[].offers[].accepted_quantity да number:float min: 0 0
data[].offers[].placed_quantity да number:float min: 0 0
data[].offers[].price нет number:float | null 4.99
data[].offers[].batch нет string | null "LOT-2026"
data[].offers[].production_date нет string:date | null "2026-01-15"
data[].offers[].expiration_date нет string:date | null "2027-01-15"
data[].offers[].barcode нет string | null maxLength: 64 "4601234567890"
data[].offers[].product нет object | null
data[].offers[].product.id да integer:int64 readOnly min: 1 1201
data[].offers[].product.name да string "Coffee 250g"
data[].offers[].product.external_id нет string | null "EXT-10045"
data[].offers[].accepted_lots нет array<AcceptanceLot>
data[].offers[].accepted_lots[] нет AcceptanceLot
data[].offers[].accepted_lots[].batch да string | null "LOT-2026"
data[].offers[].accepted_lots[].production_date да string:date | null "2026-01-15"
data[].offers[].accepted_lots[].expiration_date да string:date | null "2027-01-15"
data[].offers[].accepted_lots[].accepted_quantity да number:float min: 0 5
data[].offers[].accepted_lots[].placed_quantity да number:float min: 0 3
data[].crossdock_case нет object | null Cross-dock case created atomically with an acceptance of type 3.
data[].crossdock_case.id да integer:int64 min: 1 1001
data[].crossdock_case.public_id да string "01J2CROSSDOCKCASE000000001"
data[].crossdock_case.status да enum enum: draft, planned, released, in_progress, exception, completed, cancelled "draft"
data[].crossdock_case.process_version да string "direct_order_v1"
data[].crossdock_case.version да integer:int64 min: 1 1
links да PaginationLinks
links.first да string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last да string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev да string:uri | null
links.next да string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta да PaginationMeta
meta.api_version да enum enum: v2 "v2"
meta.current_page да integer:int32 min: 1 1
meta.from да integer:int32 | null min: 1 1
meta.last_page да integer:int32 min: 1 2
meta.path да string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page да integer:int32 min: 1 50
meta.to да integer:int32 | null min: 1 50
meta.total да integer:int32 min: 0 73

Примеры ответа

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 Требуется аутентификация

Unauthorized

Требуется аутентификация.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

AUTH_REQUIRED

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

403 Доступ запрещен

Forbidden

Аутентифицированному аккаунту запрещено выполнять это действие.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

FORBIDDEN

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

429 Превышен лимит запросов

TooManyRequests

Превышен лимит запросов.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "Too Many Attempts."
error да string "RATE_LIMITED"

500 Внутренняя ошибка сервера

InternalServerError

Произошла непредвиденная ошибка сервера.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

INTERNAL_SERVER_ERROR

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

Создать обычную, возвратную или cross-dock-приёмку

operationIdcreateAcceptances
РазделПриемки
БезопасностьbearerAuth

Создаёт один из трёх видимых типов приёмки. type_id=1 создаёт обычную приёмку, type_id=2 — возврат, а type_id=3 запускает изолированный процесс cross-dock.
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.
Если кросс-докинг выключен на выбранном клиентском складе, запрос возвращает validation-envelope API v2 и не оставляет частично созданную приёмку. Ответ содержит type_code=crossdock, crossdock_case, meta.crossdock_configuration и meta.command_replayed.
Тип приёмки неизменяем. Дальше используйте операции Cross-docking: создайте заказы и направления, постройте и выпустите план, выполните сканирования источника и назначения, погрузку и закрытие.
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-запроса (cURL)

Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.

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

Параметры

Имя Где Обязательное Тип Style Explode Ограничения Описание Пример
Idempotency-Key header нет string maxLength: 191 Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. "ord-create-20260714-001"

Тело запроса

CreateAcceptanceRequest обязательно

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да CreateAcceptancePayload

Примеры запроса

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

Ответы

201 Created.

Created.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да Acceptance Входящий документ приемки. Связанные поля присутствуют, когда контроллер их загрузил или они запрошены через include.
data.id да integer:int64 readOnly min: 1 1001
data.created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.external_id нет string | null "ASN-100245"
data.document_barcode нет string | null "ASN-100245-BARCODE"
data.domain_id нет integer:int64 | null min: 1 3
data.status_id нет 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 нет integer:int64 | null min: 1 9
data.warehouse_id нет integer:int64 | null min: 1 42
data.shop_id нет integer:int64 | null min: 1 12
data.type_id нет enum:int64 | null enum: 1, 2, 3 1 — обычная приёмка; 2 — возврат; 3 — cross-dock-приёмка. После создания тип изменить нельзя. 1
data.type_code нет enum | null enum: acceptance, return, crossdock "acceptance"
data.comment нет string | null "Inbound from supplier"
data.counts да AcceptanceCounts
data.counts.expected да number:float 10
data.counts.accepted да number:float 0
data.counts.placed да number:float 0
data.acceptance_date нет string:date | null "2026-07-14"
data.offers нет array<AcceptanceLine>
data.offers[] нет 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 да integer:int64 readOnly min: 1 1001
data.offers[].created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].acceptance_id да integer:int64 min: 1 5101
data.offers[].product_id да integer:int64 min: 1 1201
data.offers[].expected_quantity да number:float min: 0 10
data.offers[].accepted_quantity да number:float min: 0 0
data.offers[].placed_quantity да number:float min: 0 0
data.offers[].price нет number:float | null 4.99
data.offers[].batch нет string | null "LOT-2026"
data.offers[].production_date нет string:date | null "2026-01-15"
data.offers[].expiration_date нет string:date | null "2027-01-15"
data.offers[].barcode нет string | null maxLength: 64 "4601234567890"
data.offers[].product нет object | null
data.offers[].product.id да integer:int64 readOnly min: 1 1201
data.offers[].product.name да string "Coffee 250g"
data.offers[].product.external_id нет string | null "EXT-10045"
data.offers[].accepted_lots нет array<AcceptanceLot>
data.offers[].accepted_lots[] нет AcceptanceLot
data.offers[].accepted_lots[].batch да string | null "LOT-2026"
data.offers[].accepted_lots[].production_date да string:date | null "2026-01-15"
data.offers[].accepted_lots[].expiration_date да string:date | null "2027-01-15"
data.offers[].accepted_lots[].accepted_quantity да number:float min: 0 5
data.offers[].accepted_lots[].placed_quantity да number:float min: 0 3
data.crossdock_case нет object | null Cross-dock case created atomically with an acceptance of type 3.
data.crossdock_case.id да integer:int64 min: 1 1001
data.crossdock_case.public_id да string "01J2CROSSDOCKCASE000000001"
data.crossdock_case.status да enum enum: draft, planned, released, in_progress, exception, completed, cancelled "draft"
data.crossdock_case.process_version да string "direct_order_v1"
data.crossdock_case.version да integer:int64 min: 1 1
meta да ResponseMeta
meta.api_version да enum enum: v2 "v2"
meta.deleted нет boolean true
meta.id нет integer:int64 | null min: 1 1001
meta.command_replayed нет boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration нет object | null
meta.crossdock_configuration.physical_warehouse_id да integer:int64 min: 1 42
meta.crossdock_configuration.enabled да boolean true
meta.crossdock_configuration.process_version да string "direct_order_v1"

Примеры ответа

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 Некорректный запрос

AcceptanceCreateBadRequest

Некорректный запрос.

Поле Обязательное Тип Флаги Ограничения Описание Пример
(root) нет 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 да string "Cross-docking is disabled for the selected client warehouse."
errors да object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta да CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version да enum enum: v2 "v2"
meta.error_code да string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id нет string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details нет object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Примеры ответа

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 Требуется аутентификация

Unauthorized

Требуется аутентификация.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

AUTH_REQUIRED

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

403 Доступ запрещен

Forbidden

Аутентифицированному аккаунту запрещено выполнять это действие.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

FORBIDDEN

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

409 Конфликт

AcceptanceCreateConflict

The request conflicts with the current resource or command state.

Поле Обязательное Тип Флаги Ограничения Описание Пример
(root) нет 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 да string "Cross-docking is disabled for the selected client warehouse."
errors да object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta да CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version да enum enum: v2 "v2"
meta.error_code да string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id нет string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details нет object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Примеры ответа

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 Ошибка валидации

AcceptanceCreateValidationError

The given data was invalid.

Поле Обязательное Тип Флаги Ограничения Описание Пример
(root) нет 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 да string "Cross-docking is disabled for the selected client warehouse."
errors да object {"warehouse_id":["Enable cross-docking in the client warehouse settings."]}
meta да CrossDockErrorMeta API v2 error metadata for the isolated cross-dock command contract.
meta.api_version да enum enum: v2 "v2"
meta.error_code да string "CROSSDOCK_WAREHOUSE_DISABLED"
meta.correlation_id нет string:uuid | null "4fe557e8-70f7-4b36-a124-d3afad4041d4"
meta.details нет object {"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12}

Примеры ответа

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 Превышен лимит запросов

TooManyRequests

Превышен лимит запросов.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "Too Many Attempts."
error да string "RATE_LIMITED"

500 Внутренняя ошибка сервера

InternalServerError

Произошла непредвиденная ошибка сервера.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

INTERNAL_SERVER_ERROR

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

Получить приемку

operationIdgetAcceptances
РазделПриемки
БезопасностьbearerAuth

Возвращает один ресурс: приемка, если он существует и видим аутентифицированному аккаунту.
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-запроса (cURL)

Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.

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

Параметры

Имя Где Обязательное Тип Style Explode Ограничения Описание Пример
id path да integer:int64 min: 1 ID приемки. 1001

Тело запроса

Тело запроса отсутствует.

Ответы

200 Successful response.

Successful response.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да Acceptance Входящий документ приемки. Связанные поля присутствуют, когда контроллер их загрузил или они запрошены через include.
data.id да integer:int64 readOnly min: 1 1001
data.created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.external_id нет string | null "ASN-100245"
data.document_barcode нет string | null "ASN-100245-BARCODE"
data.domain_id нет integer:int64 | null min: 1 3
data.status_id нет 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 нет integer:int64 | null min: 1 9
data.warehouse_id нет integer:int64 | null min: 1 42
data.shop_id нет integer:int64 | null min: 1 12
data.type_id нет enum:int64 | null enum: 1, 2, 3 1 — обычная приёмка; 2 — возврат; 3 — cross-dock-приёмка. После создания тип изменить нельзя. 1
data.type_code нет enum | null enum: acceptance, return, crossdock "acceptance"
data.comment нет string | null "Inbound from supplier"
data.counts да AcceptanceCounts
data.counts.expected да number:float 10
data.counts.accepted да number:float 0
data.counts.placed да number:float 0
data.acceptance_date нет string:date | null "2026-07-14"
data.offers нет array<AcceptanceLine>
data.offers[] нет 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 да integer:int64 readOnly min: 1 1001
data.offers[].created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].acceptance_id да integer:int64 min: 1 5101
data.offers[].product_id да integer:int64 min: 1 1201
data.offers[].expected_quantity да number:float min: 0 10
data.offers[].accepted_quantity да number:float min: 0 0
data.offers[].placed_quantity да number:float min: 0 0
data.offers[].price нет number:float | null 4.99
data.offers[].batch нет string | null "LOT-2026"
data.offers[].production_date нет string:date | null "2026-01-15"
data.offers[].expiration_date нет string:date | null "2027-01-15"
data.offers[].barcode нет string | null maxLength: 64 "4601234567890"
data.offers[].product нет object | null
data.offers[].product.id да integer:int64 readOnly min: 1 1201
data.offers[].product.name да string "Coffee 250g"
data.offers[].product.external_id нет string | null "EXT-10045"
data.offers[].accepted_lots нет array<AcceptanceLot>
data.offers[].accepted_lots[] нет AcceptanceLot
data.offers[].accepted_lots[].batch да string | null "LOT-2026"
data.offers[].accepted_lots[].production_date да string:date | null "2026-01-15"
data.offers[].accepted_lots[].expiration_date да string:date | null "2027-01-15"
data.offers[].accepted_lots[].accepted_quantity да number:float min: 0 5
data.offers[].accepted_lots[].placed_quantity да number:float min: 0 3
data.crossdock_case нет object | null Cross-dock case created atomically with an acceptance of type 3.
data.crossdock_case.id да integer:int64 min: 1 1001
data.crossdock_case.public_id да string "01J2CROSSDOCKCASE000000001"
data.crossdock_case.status да enum enum: draft, planned, released, in_progress, exception, completed, cancelled "draft"
data.crossdock_case.process_version да string "direct_order_v1"
data.crossdock_case.version да integer:int64 min: 1 1
meta да ResponseMeta
meta.api_version да enum enum: v2 "v2"
meta.deleted нет boolean true
meta.id нет integer:int64 | null min: 1 1001
meta.command_replayed нет boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration нет object | null
meta.crossdock_configuration.physical_warehouse_id да integer:int64 min: 1 42
meta.crossdock_configuration.enabled да boolean true
meta.crossdock_configuration.process_version да string "direct_order_v1"

Примеры ответа

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 Требуется аутентификация

Unauthorized

Требуется аутентификация.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

AUTH_REQUIRED

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

403 Доступ запрещен

Forbidden

Аутентифицированному аккаунту запрещено выполнять это действие.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

FORBIDDEN

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

404 Не найдено

NotFound

Запрошенный ресурс не найден или находится вне области доступа аккаунта.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

NOT_FOUND

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

429 Превышен лимит запросов

TooManyRequests

Превышен лимит запросов.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "Too Many Attempts."
error да string "RATE_LIMITED"

500 Внутренняя ошибка сервера

InternalServerError

Произошла непредвиденная ошибка сервера.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

INTERNAL_SERVER_ERROR

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

Обновить приемку

operationIdreplaceAcceptances
РазделПриемки
БезопасностьbearerAuth

Updates an editable acceptance header and may upsert or delete lines. Closed or already processed documents reject changes with validation or lifecycle errors.
Текущее поведение backend является legacy-семантикой частичного обновления: пропущенные поля не изменяются.
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-запроса (cURL)

Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.

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

Параметры

Имя Где Обязательное Тип Style Explode Ограничения Описание Пример
id path да integer:int64 min: 1 ID приемки. 1001
Idempotency-Key header нет string maxLength: 191 Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. "ord-create-20260714-001"

Тело запроса

ReplaceAcceptanceRequest обязательно

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да ReplaceAcceptancePayload Legacy PUT payload. Current backend applies partial-update semantics and may upsert or delete lines.
data.external_id нет string | null "ASN-100245"
data.document_barcode нет string | null "ASN-100245-BARCODE"
data.comment нет string | null "Inbound from supplier"
data.acceptance_date нет string:date | null "2026-07-14"
data.allow_add_offers_during_acceptance нет boolean false
data.lines нет array<AcceptanceLineUpsertPayload>
data.lines[] нет AcceptanceLineUpsertPayload Payload строки приемки. Товар определяется по product_id или product_external_id.
data.lines[] нет object
data.lines[] нет object
data.lines_delete нет array<integer:int64>
data.lines_delete[] нет integer:int64 min: 1 7101

Примеры запроса

default

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

Ответы

200 Successful response.

Successful response.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да Acceptance Входящий документ приемки. Связанные поля присутствуют, когда контроллер их загрузил или они запрошены через include.
data.id да integer:int64 readOnly min: 1 1001
data.created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.external_id нет string | null "ASN-100245"
data.document_barcode нет string | null "ASN-100245-BARCODE"
data.domain_id нет integer:int64 | null min: 1 3
data.status_id нет 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 нет integer:int64 | null min: 1 9
data.warehouse_id нет integer:int64 | null min: 1 42
data.shop_id нет integer:int64 | null min: 1 12
data.type_id нет enum:int64 | null enum: 1, 2, 3 1 — обычная приёмка; 2 — возврат; 3 — cross-dock-приёмка. После создания тип изменить нельзя. 1
data.type_code нет enum | null enum: acceptance, return, crossdock "acceptance"
data.comment нет string | null "Inbound from supplier"
data.counts да AcceptanceCounts
data.counts.expected да number:float 10
data.counts.accepted да number:float 0
data.counts.placed да number:float 0
data.acceptance_date нет string:date | null "2026-07-14"
data.offers нет array<AcceptanceLine>
data.offers[] нет 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 да integer:int64 readOnly min: 1 1001
data.offers[].created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].acceptance_id да integer:int64 min: 1 5101
data.offers[].product_id да integer:int64 min: 1 1201
data.offers[].expected_quantity да number:float min: 0 10
data.offers[].accepted_quantity да number:float min: 0 0
data.offers[].placed_quantity да number:float min: 0 0
data.offers[].price нет number:float | null 4.99
data.offers[].batch нет string | null "LOT-2026"
data.offers[].production_date нет string:date | null "2026-01-15"
data.offers[].expiration_date нет string:date | null "2027-01-15"
data.offers[].barcode нет string | null maxLength: 64 "4601234567890"
data.offers[].product нет object | null
data.offers[].product.id да integer:int64 readOnly min: 1 1201
data.offers[].product.name да string "Coffee 250g"
data.offers[].product.external_id нет string | null "EXT-10045"
data.offers[].accepted_lots нет array<AcceptanceLot>
data.offers[].accepted_lots[] нет AcceptanceLot
data.offers[].accepted_lots[].batch да string | null "LOT-2026"
data.offers[].accepted_lots[].production_date да string:date | null "2026-01-15"
data.offers[].accepted_lots[].expiration_date да string:date | null "2027-01-15"
data.offers[].accepted_lots[].accepted_quantity да number:float min: 0 5
data.offers[].accepted_lots[].placed_quantity да number:float min: 0 3
data.crossdock_case нет object | null Cross-dock case created atomically with an acceptance of type 3.
data.crossdock_case.id да integer:int64 min: 1 1001
data.crossdock_case.public_id да string "01J2CROSSDOCKCASE000000001"
data.crossdock_case.status да enum enum: draft, planned, released, in_progress, exception, completed, cancelled "draft"
data.crossdock_case.process_version да string "direct_order_v1"
data.crossdock_case.version да integer:int64 min: 1 1
meta да ResponseMeta
meta.api_version да enum enum: v2 "v2"
meta.deleted нет boolean true
meta.id нет integer:int64 | null min: 1 1001
meta.command_replayed нет boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration нет object | null
meta.crossdock_configuration.physical_warehouse_id да integer:int64 min: 1 42
meta.crossdock_configuration.enabled да boolean true
meta.crossdock_configuration.process_version да string "direct_order_v1"

Примеры ответа

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 Некорректный запрос

BadRequest

Некорректный запрос.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

BAD_REQUEST

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

401 Требуется аутентификация

Unauthorized

Требуется аутентификация.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

AUTH_REQUIRED

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

403 Доступ запрещен

Forbidden

Аутентифицированному аккаунту запрещено выполнять это действие.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

FORBIDDEN

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

404 Не найдено

NotFound

Запрошенный ресурс не найден или находится вне области доступа аккаунта.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

NOT_FOUND

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

409 Конфликт

Conflict

Запрос конфликтует с текущим состоянием ресурса или ключа идемпотентности.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

idempotencyConflict

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

422 Ошибка валидации

ValidationError

Ошибка валидации.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The given data was invalid."
error нет string "VALIDATION_ERROR"
errors да object {"warehouse_id":["The selected warehouse is invalid."]}

Примеры ответа

validationError

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

429 Превышен лимит запросов

TooManyRequests

Превышен лимит запросов.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "Too Many Attempts."
error да string "RATE_LIMITED"

500 Внутренняя ошибка сервера

InternalServerError

Произошла непредвиденная ошибка сервера.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

INTERNAL_SERVER_ERROR

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

Обновить приемку

operationIdpatchAcceptances
РазделПриемки
БезопасностьbearerAuth

Partially updates an editable acceptance. Omitted fields are not changed.
Текущее поведение backend является legacy-семантикой частичного обновления: пропущенные поля не изменяются.
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-запроса (cURL)

Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.

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

Параметры

Имя Где Обязательное Тип Style Explode Ограничения Описание Пример
id path да integer:int64 min: 1 ID приемки. 1001
Idempotency-Key header нет string maxLength: 191 Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. "ord-create-20260714-001"

Тело запроса

PatchAcceptanceRequest обязательно

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да PatchAcceptancePayload Payload частичного обновления приемки. Пропущенные поля не изменяются.
data.external_id нет string | null "ASN-100245"
data.document_barcode нет string | null "ASN-100245-BARCODE"
data.comment нет string | null "Inbound from supplier"
data.acceptance_date нет string:date | null "2026-07-14"
data.allow_add_offers_during_acceptance нет boolean false
data.lines нет array<AcceptanceLineUpsertPayload>
data.lines[] нет AcceptanceLineUpsertPayload Payload строки приемки. Товар определяется по product_id или product_external_id.
data.lines[] нет object
data.lines[] нет object
data.lines_delete нет array<integer:int64>
data.lines_delete[] нет integer:int64 min: 1 7101

Примеры запроса

default

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

Ответы

200 Successful response.

Successful response.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да Acceptance Входящий документ приемки. Связанные поля присутствуют, когда контроллер их загрузил или они запрошены через include.
data.id да integer:int64 readOnly min: 1 1001
data.created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.external_id нет string | null "ASN-100245"
data.document_barcode нет string | null "ASN-100245-BARCODE"
data.domain_id нет integer:int64 | null min: 1 3
data.status_id нет 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 нет integer:int64 | null min: 1 9
data.warehouse_id нет integer:int64 | null min: 1 42
data.shop_id нет integer:int64 | null min: 1 12
data.type_id нет enum:int64 | null enum: 1, 2, 3 1 — обычная приёмка; 2 — возврат; 3 — cross-dock-приёмка. После создания тип изменить нельзя. 1
data.type_code нет enum | null enum: acceptance, return, crossdock "acceptance"
data.comment нет string | null "Inbound from supplier"
data.counts да AcceptanceCounts
data.counts.expected да number:float 10
data.counts.accepted да number:float 0
data.counts.placed да number:float 0
data.acceptance_date нет string:date | null "2026-07-14"
data.offers нет array<AcceptanceLine>
data.offers[] нет 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 да integer:int64 readOnly min: 1 1001
data.offers[].created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].acceptance_id да integer:int64 min: 1 5101
data.offers[].product_id да integer:int64 min: 1 1201
data.offers[].expected_quantity да number:float min: 0 10
data.offers[].accepted_quantity да number:float min: 0 0
data.offers[].placed_quantity да number:float min: 0 0
data.offers[].price нет number:float | null 4.99
data.offers[].batch нет string | null "LOT-2026"
data.offers[].production_date нет string:date | null "2026-01-15"
data.offers[].expiration_date нет string:date | null "2027-01-15"
data.offers[].barcode нет string | null maxLength: 64 "4601234567890"
data.offers[].product нет object | null
data.offers[].product.id да integer:int64 readOnly min: 1 1201
data.offers[].product.name да string "Coffee 250g"
data.offers[].product.external_id нет string | null "EXT-10045"
data.offers[].accepted_lots нет array<AcceptanceLot>
data.offers[].accepted_lots[] нет AcceptanceLot
data.offers[].accepted_lots[].batch да string | null "LOT-2026"
data.offers[].accepted_lots[].production_date да string:date | null "2026-01-15"
data.offers[].accepted_lots[].expiration_date да string:date | null "2027-01-15"
data.offers[].accepted_lots[].accepted_quantity да number:float min: 0 5
data.offers[].accepted_lots[].placed_quantity да number:float min: 0 3
data.crossdock_case нет object | null Cross-dock case created atomically with an acceptance of type 3.
data.crossdock_case.id да integer:int64 min: 1 1001
data.crossdock_case.public_id да string "01J2CROSSDOCKCASE000000001"
data.crossdock_case.status да enum enum: draft, planned, released, in_progress, exception, completed, cancelled "draft"
data.crossdock_case.process_version да string "direct_order_v1"
data.crossdock_case.version да integer:int64 min: 1 1
meta да ResponseMeta
meta.api_version да enum enum: v2 "v2"
meta.deleted нет boolean true
meta.id нет integer:int64 | null min: 1 1001
meta.command_replayed нет boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration нет object | null
meta.crossdock_configuration.physical_warehouse_id да integer:int64 min: 1 42
meta.crossdock_configuration.enabled да boolean true
meta.crossdock_configuration.process_version да string "direct_order_v1"

Примеры ответа

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 Некорректный запрос

BadRequest

Некорректный запрос.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

BAD_REQUEST

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

401 Требуется аутентификация

Unauthorized

Требуется аутентификация.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

AUTH_REQUIRED

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

403 Доступ запрещен

Forbidden

Аутентифицированному аккаунту запрещено выполнять это действие.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

FORBIDDEN

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

404 Не найдено

NotFound

Запрошенный ресурс не найден или находится вне области доступа аккаунта.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

NOT_FOUND

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

409 Конфликт

Conflict

Запрос конфликтует с текущим состоянием ресурса или ключа идемпотентности.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

idempotencyConflict

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

422 Ошибка валидации

ValidationError

Ошибка валидации.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The given data was invalid."
error нет string "VALIDATION_ERROR"
errors да object {"warehouse_id":["The selected warehouse is invalid."]}

Примеры ответа

validationError

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

429 Превышен лимит запросов

TooManyRequests

Превышен лимит запросов.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "Too Many Attempts."
error да string "RATE_LIMITED"

500 Внутренняя ошибка сервера

InternalServerError

Произошла непредвиденная ошибка сервера.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

INTERNAL_SERVER_ERROR

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

Удалить приемку

operationIddeleteAcceptances
РазделПриемки
БезопасностьbearerAuth

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-запроса (cURL)

Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.

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

Параметры

Имя Где Обязательное Тип Style Explode Ограничения Описание Пример
id path да integer:int64 min: 1 ID приемки. 1001
Idempotency-Key header нет string maxLength: 191 Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. "ord-create-20260714-001"

Тело запроса

Тело запроса отсутствует.

Ответы

200 Successful response.

Successful response.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да object | null
meta да object
meta.api_version да enum enum: v2 "v2"
meta.deleted да boolean true
meta.id да integer:int64 min: 1 1001

Примеры ответа

success

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

400 Некорректный запрос

BadRequest

Некорректный запрос.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

BAD_REQUEST

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

401 Требуется аутентификация

Unauthorized

Требуется аутентификация.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

AUTH_REQUIRED

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

403 Доступ запрещен

Forbidden

Аутентифицированному аккаунту запрещено выполнять это действие.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

FORBIDDEN

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

404 Не найдено

NotFound

Запрошенный ресурс не найден или находится вне области доступа аккаунта.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

NOT_FOUND

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

409 Конфликт

Conflict

Запрос конфликтует с текущим состоянием ресурса или ключа идемпотентности.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

idempotencyConflict

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

422 Ошибка валидации

ValidationError

Ошибка валидации.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The given data was invalid."
error нет string "VALIDATION_ERROR"
errors да object {"warehouse_id":["The selected warehouse is invalid."]}

Примеры ответа

validationError

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

429 Превышен лимит запросов

TooManyRequests

Превышен лимит запросов.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "Too Many Attempts."
error да string "RATE_LIMITED"

500 Внутренняя ошибка сервера

InternalServerError

Произошла непредвиденная ошибка сервера.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

INTERNAL_SERVER_ERROR

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

Cancel acceptance

operationIdcancelAcceptance
РазделПриемки
БезопасностьbearerAuth

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-запроса (cURL)

Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.

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

Параметры

Имя Где Обязательное Тип Style Explode Ограничения Описание Пример
id path да integer:int64 min: 1 ID приемки. 1001
Idempotency-Key header нет string maxLength: 191 Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. "ord-create-20260714-001"

Тело запроса

Тело запроса отсутствует.

Ответы

200 Successful response.

Successful response.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да Acceptance Входящий документ приемки. Связанные поля присутствуют, когда контроллер их загрузил или они запрошены через include.
data.id да integer:int64 readOnly min: 1 1001
data.created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.external_id нет string | null "ASN-100245"
data.document_barcode нет string | null "ASN-100245-BARCODE"
data.domain_id нет integer:int64 | null min: 1 3
data.status_id нет 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 нет integer:int64 | null min: 1 9
data.warehouse_id нет integer:int64 | null min: 1 42
data.shop_id нет integer:int64 | null min: 1 12
data.type_id нет enum:int64 | null enum: 1, 2, 3 1 — обычная приёмка; 2 — возврат; 3 — cross-dock-приёмка. После создания тип изменить нельзя. 1
data.type_code нет enum | null enum: acceptance, return, crossdock "acceptance"
data.comment нет string | null "Inbound from supplier"
data.counts да AcceptanceCounts
data.counts.expected да number:float 10
data.counts.accepted да number:float 0
data.counts.placed да number:float 0
data.acceptance_date нет string:date | null "2026-07-14"
data.offers нет array<AcceptanceLine>
data.offers[] нет 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 да integer:int64 readOnly min: 1 1001
data.offers[].created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].acceptance_id да integer:int64 min: 1 5101
data.offers[].product_id да integer:int64 min: 1 1201
data.offers[].expected_quantity да number:float min: 0 10
data.offers[].accepted_quantity да number:float min: 0 0
data.offers[].placed_quantity да number:float min: 0 0
data.offers[].price нет number:float | null 4.99
data.offers[].batch нет string | null "LOT-2026"
data.offers[].production_date нет string:date | null "2026-01-15"
data.offers[].expiration_date нет string:date | null "2027-01-15"
data.offers[].barcode нет string | null maxLength: 64 "4601234567890"
data.offers[].product нет object | null
data.offers[].product.id да integer:int64 readOnly min: 1 1201
data.offers[].product.name да string "Coffee 250g"
data.offers[].product.external_id нет string | null "EXT-10045"
data.offers[].accepted_lots нет array<AcceptanceLot>
data.offers[].accepted_lots[] нет AcceptanceLot
data.offers[].accepted_lots[].batch да string | null "LOT-2026"
data.offers[].accepted_lots[].production_date да string:date | null "2026-01-15"
data.offers[].accepted_lots[].expiration_date да string:date | null "2027-01-15"
data.offers[].accepted_lots[].accepted_quantity да number:float min: 0 5
data.offers[].accepted_lots[].placed_quantity да number:float min: 0 3
data.crossdock_case нет object | null Cross-dock case created atomically with an acceptance of type 3.
data.crossdock_case.id да integer:int64 min: 1 1001
data.crossdock_case.public_id да string "01J2CROSSDOCKCASE000000001"
data.crossdock_case.status да enum enum: draft, planned, released, in_progress, exception, completed, cancelled "draft"
data.crossdock_case.process_version да string "direct_order_v1"
data.crossdock_case.version да integer:int64 min: 1 1
meta да ResponseMeta
meta.api_version да enum enum: v2 "v2"
meta.deleted нет boolean true
meta.id нет integer:int64 | null min: 1 1001
meta.command_replayed нет boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration нет object | null
meta.crossdock_configuration.physical_warehouse_id да integer:int64 min: 1 42
meta.crossdock_configuration.enabled да boolean true
meta.crossdock_configuration.process_version да string "direct_order_v1"

Примеры ответа

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 Некорректный запрос

BadRequest

Некорректный запрос.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

BAD_REQUEST

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

401 Требуется аутентификация

Unauthorized

Требуется аутентификация.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

AUTH_REQUIRED

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

403 Доступ запрещен

Forbidden

Аутентифицированному аккаунту запрещено выполнять это действие.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

FORBIDDEN

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

404 Не найдено

NotFound

Запрошенный ресурс не найден или находится вне области доступа аккаунта.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

NOT_FOUND

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

409 Конфликт

Conflict

Запрос конфликтует с текущим состоянием ресурса или ключа идемпотентности.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

idempotencyConflict

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

422 Ошибка валидации

ValidationError

Ошибка валидации.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The given data was invalid."
error нет string "VALIDATION_ERROR"
errors да object {"warehouse_id":["The selected warehouse is invalid."]}

Примеры ответа

validationError

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

429 Превышен лимит запросов

TooManyRequests

Превышен лимит запросов.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "Too Many Attempts."
error да string "RATE_LIMITED"

500 Внутренняя ошибка сервера

InternalServerError

Произошла непредвиденная ошибка сервера.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

INTERNAL_SERVER_ERROR

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

Получить список приемок

operationIdlistAcceptancesLines
РазделПриемки
БезопасностьbearerAuth

Возвращает приемки, видимые аутентифицированному аккаунту. Используйте описанные query parameters для фильтрации, сортировки и пагинации.
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-запроса (cURL)

Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.

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

Параметры

Имя Где Обязательное Тип Style Explode Ограничения Описание Пример
id path да integer:int64 min: 1 ID приемки. 1001
page query нет integer:int64 form true min: 1 Номер страницы. Этот фильтр также можно передать как filter[page], если это поддерживает Laravel query adapter. 1
per_page query нет integer:int64 form true min: 1
max: 500
Количество записей на странице. По умолчанию 100; максимум 500. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. 100
sort query нет string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, product_id, expected_quantity, price, expiration_date, created_at. По умолчанию: -id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. "-id"
id query нет integer:int64 form true min: 1 Фильтр по id с точным совпадением. Этот фильтр также можно передать как filter[id], если это поддерживает Laravel query adapter. 1001
product_id query нет integer:int64 form true min: 1 Фильтр по product_id с точным совпадением. Этот фильтр также можно передать как filter[product_id], если это поддерживает Laravel query adapter. 1201
barcode query нет string form true Фильтр по barcode с частичным текстовым совпадением. Этот фильтр также можно передать как filter[barcode], если это поддерживает Laravel query adapter. "4601234567890"
batch query нет string form true Фильтр по batch с частичным текстовым совпадением. Этот фильтр также можно передать как filter[batch], если это поддерживает Laravel query adapter. "LOT-2026"
expiration_date_from query нет string:date form true Нижняя включительная граница даты для expiration_date. Этот фильтр также можно передать как filter[expiration_date_from], если это поддерживает Laravel query adapter. "2026-07-14"
expiration_date_to query нет string:date form true Верхняя включительная граница даты для expiration_date. Этот фильтр также можно передать как filter[expiration_date_to], если это поддерживает Laravel query adapter. "2026-07-14"
created_at_from query нет string:date form true Нижняя включительная граница даты для created_at. Этот фильтр также можно передать как filter[created_at_from], если это поддерживает Laravel query adapter. "2026-07-14"
created_at_to query нет string:date form true Верхняя включительная граница даты для created_at. Этот фильтр также можно передать как filter[created_at_to], если это поддерживает Laravel query adapter. "2026-07-14"

Тело запроса

Тело запроса отсутствует.

Ответы

200 Successful response.

Successful response.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да array<AcceptanceLine>
data[] нет 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 да integer:int64 readOnly min: 1 1001
data[].created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data[].acceptance_id да integer:int64 min: 1 5101
data[].product_id да integer:int64 min: 1 1201
data[].expected_quantity да number:float min: 0 10
data[].accepted_quantity да number:float min: 0 0
data[].placed_quantity да number:float min: 0 0
data[].price нет number:float | null 4.99
data[].batch нет string | null "LOT-2026"
data[].production_date нет string:date | null "2026-01-15"
data[].expiration_date нет string:date | null "2027-01-15"
data[].barcode нет string | null maxLength: 64 "4601234567890"
data[].product нет object | null
data[].product.id да integer:int64 readOnly min: 1 1201
data[].product.name да string "Coffee 250g"
data[].product.external_id нет string | null "EXT-10045"
data[].accepted_lots нет array<AcceptanceLot>
data[].accepted_lots[] нет AcceptanceLot
data[].accepted_lots[].batch да string | null "LOT-2026"
data[].accepted_lots[].production_date да string:date | null "2026-01-15"
data[].accepted_lots[].expiration_date да string:date | null "2027-01-15"
data[].accepted_lots[].accepted_quantity да number:float min: 0 5
data[].accepted_lots[].placed_quantity да number:float min: 0 3
links да PaginationLinks
links.first да string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last да string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev да string:uri | null
links.next да string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta да PaginationMeta
meta.api_version да enum enum: v2 "v2"
meta.current_page да integer:int32 min: 1 1
meta.from да integer:int32 | null min: 1 1
meta.last_page да integer:int32 min: 1 2
meta.path да string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page да integer:int32 min: 1 50
meta.to да integer:int32 | null min: 1 50
meta.total да integer:int32 min: 0 73

Примеры ответа

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 Требуется аутентификация

Unauthorized

Требуется аутентификация.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

AUTH_REQUIRED

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

403 Доступ запрещен

Forbidden

Аутентифицированному аккаунту запрещено выполнять это действие.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

FORBIDDEN

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

404 Не найдено

NotFound

Запрошенный ресурс не найден или находится вне области доступа аккаунта.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

NOT_FOUND

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

429 Превышен лимит запросов

TooManyRequests

Превышен лимит запросов.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "Too Many Attempts."
error да string "RATE_LIMITED"

500 Внутренняя ошибка сервера

InternalServerError

Произошла непредвиденная ошибка сервера.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

INTERNAL_SERVER_ERROR

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

Создать приемку

operationIdcreateAcceptancesLines
РазделПриемки
БезопасностьbearerAuth

Create acceptance. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный 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-запроса (cURL)

Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.

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

Параметры

Имя Где Обязательное Тип Style Explode Ограничения Описание Пример
id path да integer:int64 min: 1 ID приемки. 1001
Idempotency-Key header нет string maxLength: 191 Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. "ord-create-20260714-001"

Тело запроса

AddAcceptanceLinesRequest обязательно

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да object
data.lines да array<AcceptanceLineCreatePayload> minItems: 1
data.lines[] нет AcceptanceLineCreatePayload Payload строки приемки. Товар определяется по product_id или product_external_id.
data.lines[] нет object
data.lines[] нет object

Примеры запроса

default

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

Ответы

201 Created.

Created.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да array<AcceptanceLine>
data[] нет 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 да integer:int64 readOnly min: 1 1001
data[].created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data[].acceptance_id да integer:int64 min: 1 5101
data[].product_id да integer:int64 min: 1 1201
data[].expected_quantity да number:float min: 0 10
data[].accepted_quantity да number:float min: 0 0
data[].placed_quantity да number:float min: 0 0
data[].price нет number:float | null 4.99
data[].batch нет string | null "LOT-2026"
data[].production_date нет string:date | null "2026-01-15"
data[].expiration_date нет string:date | null "2027-01-15"
data[].barcode нет string | null maxLength: 64 "4601234567890"
data[].product нет object | null
data[].product.id да integer:int64 readOnly min: 1 1201
data[].product.name да string "Coffee 250g"
data[].product.external_id нет string | null "EXT-10045"
data[].accepted_lots нет array<AcceptanceLot>
data[].accepted_lots[] нет AcceptanceLot
data[].accepted_lots[].batch да string | null "LOT-2026"
data[].accepted_lots[].production_date да string:date | null "2026-01-15"
data[].accepted_lots[].expiration_date да string:date | null "2027-01-15"
data[].accepted_lots[].accepted_quantity да number:float min: 0 5
data[].accepted_lots[].placed_quantity да number:float min: 0 3
meta да ResponseMeta
meta.api_version да enum enum: v2 "v2"
meta.deleted нет boolean true
meta.id нет integer:int64 | null min: 1 1001
meta.command_replayed нет boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration нет object | null
meta.crossdock_configuration.physical_warehouse_id да integer:int64 min: 1 42
meta.crossdock_configuration.enabled да boolean true
meta.crossdock_configuration.process_version да string "direct_order_v1"

Примеры ответа

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 Некорректный запрос

BadRequest

Некорректный запрос.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

BAD_REQUEST

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

401 Требуется аутентификация

Unauthorized

Требуется аутентификация.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

AUTH_REQUIRED

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

403 Доступ запрещен

Forbidden

Аутентифицированному аккаунту запрещено выполнять это действие.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

FORBIDDEN

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

404 Не найдено

NotFound

Запрошенный ресурс не найден или находится вне области доступа аккаунта.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

NOT_FOUND

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

409 Конфликт

Conflict

Запрос конфликтует с текущим состоянием ресурса или ключа идемпотентности.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

idempotencyConflict

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

422 Ошибка валидации

ValidationError

Ошибка валидации.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The given data was invalid."
error нет string "VALIDATION_ERROR"
errors да object {"warehouse_id":["The selected warehouse is invalid."]}

Примеры ответа

validationError

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

429 Превышен лимит запросов

TooManyRequests

Превышен лимит запросов.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "Too Many Attempts."
error да string "RATE_LIMITED"

500 Внутренняя ошибка сервера

InternalServerError

Произошла непредвиденная ошибка сервера.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

INTERNAL_SERVER_ERROR

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

Обновить приемку

operationIdreplaceAcceptancesLines
РазделПриемки
БезопасностьbearerAuth

Update acceptance. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.
Текущее поведение backend является legacy-семантикой частичного обновления: пропущенные поля не изменяются.
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-запроса (cURL)

Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.

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

Параметры

Имя Где Обязательное Тип Style Explode Ограничения Описание Пример
id path да integer:int64 min: 1 ID приемки. 1001
lineId path да integer:int64 min: 1 ID строки документа. 1001
Idempotency-Key header нет string maxLength: 191 Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. "ord-create-20260714-001"

Тело запроса

ReplaceAcceptanceLineRequest обязательно

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да AcceptanceLineReplacePayload Legacy PUT payload строки. Текущий backend обрабатывает PUT как частичное обновление.
data.expected_quantity нет number:float | null min: 0 10
data.price нет number:float | null 4.99
data.batch нет string | null "LOT-2026"
data.production_date нет string:date | null "2026-01-15"
data.expiration_date нет string:date | null "2027-01-15"
data.barcode нет string | null maxLength: 64 "4601234567890"

Примеры запроса

default

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

Ответы

200 Successful response.

Successful response.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да 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 да integer:int64 readOnly min: 1 1001
data.created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.acceptance_id да integer:int64 min: 1 5101
data.product_id да integer:int64 min: 1 1201
data.expected_quantity да number:float min: 0 10
data.accepted_quantity да number:float min: 0 0
data.placed_quantity да number:float min: 0 0
data.price нет number:float | null 4.99
data.batch нет string | null "LOT-2026"
data.production_date нет string:date | null "2026-01-15"
data.expiration_date нет string:date | null "2027-01-15"
data.barcode нет string | null maxLength: 64 "4601234567890"
data.product нет object | null
data.product.id да integer:int64 readOnly min: 1 1201
data.product.name да string "Coffee 250g"
data.product.external_id нет string | null "EXT-10045"
data.accepted_lots нет array<AcceptanceLot>
data.accepted_lots[] нет AcceptanceLot
data.accepted_lots[].batch да string | null "LOT-2026"
data.accepted_lots[].production_date да string:date | null "2026-01-15"
data.accepted_lots[].expiration_date да string:date | null "2027-01-15"
data.accepted_lots[].accepted_quantity да number:float min: 0 5
data.accepted_lots[].placed_quantity да number:float min: 0 3
meta да ResponseMeta
meta.api_version да enum enum: v2 "v2"
meta.deleted нет boolean true
meta.id нет integer:int64 | null min: 1 1001
meta.command_replayed нет boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration нет object | null
meta.crossdock_configuration.physical_warehouse_id да integer:int64 min: 1 42
meta.crossdock_configuration.enabled да boolean true
meta.crossdock_configuration.process_version да string "direct_order_v1"

Примеры ответа

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 Некорректный запрос

BadRequest

Некорректный запрос.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

BAD_REQUEST

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

401 Требуется аутентификация

Unauthorized

Требуется аутентификация.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

AUTH_REQUIRED

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

403 Доступ запрещен

Forbidden

Аутентифицированному аккаунту запрещено выполнять это действие.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

FORBIDDEN

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

404 Не найдено

NotFound

Запрошенный ресурс не найден или находится вне области доступа аккаунта.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

NOT_FOUND

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

409 Конфликт

Conflict

Запрос конфликтует с текущим состоянием ресурса или ключа идемпотентности.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

idempotencyConflict

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

422 Ошибка валидации

ValidationError

Ошибка валидации.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The given data was invalid."
error нет string "VALIDATION_ERROR"
errors да object {"warehouse_id":["The selected warehouse is invalid."]}

Примеры ответа

validationError

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

429 Превышен лимит запросов

TooManyRequests

Превышен лимит запросов.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "Too Many Attempts."
error да string "RATE_LIMITED"

500 Внутренняя ошибка сервера

InternalServerError

Произошла непредвиденная ошибка сервера.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

INTERNAL_SERVER_ERROR

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

Обновить приемку

operationIdpatchAcceptancesLines
РазделПриемки
БезопасностьbearerAuth

Update acceptance. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.
Текущее поведение backend является legacy-семантикой частичного обновления: пропущенные поля не изменяются.
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-запроса (cURL)

Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.

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

Параметры

Имя Где Обязательное Тип Style Explode Ограничения Описание Пример
id path да integer:int64 min: 1 ID приемки. 1001
lineId path да integer:int64 min: 1 ID строки документа. 1001
Idempotency-Key header нет string maxLength: 191 Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. "ord-create-20260714-001"

Тело запроса

PatchAcceptanceLineRequest обязательно

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да AcceptanceLinePatchPayload Редактируемые поля строки приемки. ID строки берется из path и не должен повторяться в body.
data.expected_quantity нет number:float | null min: 0 10
data.price нет number:float | null 4.99
data.batch нет string | null "LOT-2026"
data.production_date нет string:date | null "2026-01-15"
data.expiration_date нет string:date | null "2027-01-15"
data.barcode нет string | null maxLength: 64 "4601234567890"

Примеры запроса

default

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

Ответы

200 Successful response.

Successful response.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да 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 да integer:int64 readOnly min: 1 1001
data.created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.acceptance_id да integer:int64 min: 1 5101
data.product_id да integer:int64 min: 1 1201
data.expected_quantity да number:float min: 0 10
data.accepted_quantity да number:float min: 0 0
data.placed_quantity да number:float min: 0 0
data.price нет number:float | null 4.99
data.batch нет string | null "LOT-2026"
data.production_date нет string:date | null "2026-01-15"
data.expiration_date нет string:date | null "2027-01-15"
data.barcode нет string | null maxLength: 64 "4601234567890"
data.product нет object | null
data.product.id да integer:int64 readOnly min: 1 1201
data.product.name да string "Coffee 250g"
data.product.external_id нет string | null "EXT-10045"
data.accepted_lots нет array<AcceptanceLot>
data.accepted_lots[] нет AcceptanceLot
data.accepted_lots[].batch да string | null "LOT-2026"
data.accepted_lots[].production_date да string:date | null "2026-01-15"
data.accepted_lots[].expiration_date да string:date | null "2027-01-15"
data.accepted_lots[].accepted_quantity да number:float min: 0 5
data.accepted_lots[].placed_quantity да number:float min: 0 3
meta да ResponseMeta
meta.api_version да enum enum: v2 "v2"
meta.deleted нет boolean true
meta.id нет integer:int64 | null min: 1 1001
meta.command_replayed нет boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration нет object | null
meta.crossdock_configuration.physical_warehouse_id да integer:int64 min: 1 42
meta.crossdock_configuration.enabled да boolean true
meta.crossdock_configuration.process_version да string "direct_order_v1"

Примеры ответа

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 Некорректный запрос

BadRequest

Некорректный запрос.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

BAD_REQUEST

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

401 Требуется аутентификация

Unauthorized

Требуется аутентификация.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

AUTH_REQUIRED

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

403 Доступ запрещен

Forbidden

Аутентифицированному аккаунту запрещено выполнять это действие.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

FORBIDDEN

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

404 Не найдено

NotFound

Запрошенный ресурс не найден или находится вне области доступа аккаунта.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

NOT_FOUND

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

409 Конфликт

Conflict

Запрос конфликтует с текущим состоянием ресурса или ключа идемпотентности.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

idempotencyConflict

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

422 Ошибка валидации

ValidationError

Ошибка валидации.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The given data was invalid."
error нет string "VALIDATION_ERROR"
errors да object {"warehouse_id":["The selected warehouse is invalid."]}

Примеры ответа

validationError

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

429 Превышен лимит запросов

TooManyRequests

Превышен лимит запросов.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "Too Many Attempts."
error да string "RATE_LIMITED"

500 Внутренняя ошибка сервера

InternalServerError

Произошла непредвиденная ошибка сервера.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

INTERNAL_SERVER_ERROR

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

Удалить приемку

operationIddeleteAcceptancesLines
РазделПриемки
БезопасностьbearerAuth

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-запроса (cURL)

Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.

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

Параметры

Имя Где Обязательное Тип Style Explode Ограничения Описание Пример
id path да integer:int64 min: 1 ID приемки. 1001
lineId path да integer:int64 min: 1 ID строки документа. 1001
Idempotency-Key header нет string maxLength: 191 Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. "ord-create-20260714-001"

Тело запроса

Тело запроса отсутствует.

Ответы

200 Successful response.

Successful response.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да object | null
meta да object
meta.api_version да enum enum: v2 "v2"
meta.deleted да boolean true
meta.id да integer:int64 min: 1 1001

Примеры ответа

success

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

400 Некорректный запрос

BadRequest

Некорректный запрос.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

BAD_REQUEST

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

401 Требуется аутентификация

Unauthorized

Требуется аутентификация.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

AUTH_REQUIRED

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

403 Доступ запрещен

Forbidden

Аутентифицированному аккаунту запрещено выполнять это действие.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

FORBIDDEN

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

404 Не найдено

NotFound

Запрошенный ресурс не найден или находится вне области доступа аккаунта.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

NOT_FOUND

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

409 Конфликт

Conflict

Запрос конфликтует с текущим состоянием ресурса или ключа идемпотентности.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

idempotencyConflict

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

422 Ошибка валидации

ValidationError

Ошибка валидации.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The given data was invalid."
error нет string "VALIDATION_ERROR"
errors да object {"warehouse_id":["The selected warehouse is invalid."]}

Примеры ответа

validationError

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

429 Превышен лимит запросов

TooManyRequests

Превышен лимит запросов.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "Too Many Attempts."
error да string "RATE_LIMITED"

500 Внутренняя ошибка сервера

InternalServerError

Произошла непредвиденная ошибка сервера.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

INTERNAL_SERVER_ERROR

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

Создать приемку

operationIdcreateAcceptancesOffers
РазделПриемки
БезопасностьbearerAuth

Create acceptance. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.
Этот маршрут /offers является совместимым alias для /lines; в новых интеграциях используйте маршрут /lines.
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-запроса (cURL)

Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.

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

Параметры

Имя Где Обязательное Тип Style Explode Ограничения Описание Пример
id path да integer:int64 min: 1 ID приемки. 1001
Idempotency-Key header нет string maxLength: 191 Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. "ord-create-20260714-001"

Тело запроса

AddAcceptanceLinesRequest обязательно

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да object
data.lines да array<AcceptanceLineCreatePayload> minItems: 1
data.lines[] нет AcceptanceLineCreatePayload Payload строки приемки. Товар определяется по product_id или product_external_id.
data.lines[] нет object
data.lines[] нет object

Примеры запроса

default

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

Ответы

201 Created.

Created.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да array<AcceptanceLine>
data[] нет 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 да integer:int64 readOnly min: 1 1001
data[].created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data[].acceptance_id да integer:int64 min: 1 5101
data[].product_id да integer:int64 min: 1 1201
data[].expected_quantity да number:float min: 0 10
data[].accepted_quantity да number:float min: 0 0
data[].placed_quantity да number:float min: 0 0
data[].price нет number:float | null 4.99
data[].batch нет string | null "LOT-2026"
data[].production_date нет string:date | null "2026-01-15"
data[].expiration_date нет string:date | null "2027-01-15"
data[].barcode нет string | null maxLength: 64 "4601234567890"
data[].product нет object | null
data[].product.id да integer:int64 readOnly min: 1 1201
data[].product.name да string "Coffee 250g"
data[].product.external_id нет string | null "EXT-10045"
data[].accepted_lots нет array<AcceptanceLot>
data[].accepted_lots[] нет AcceptanceLot
data[].accepted_lots[].batch да string | null "LOT-2026"
data[].accepted_lots[].production_date да string:date | null "2026-01-15"
data[].accepted_lots[].expiration_date да string:date | null "2027-01-15"
data[].accepted_lots[].accepted_quantity да number:float min: 0 5
data[].accepted_lots[].placed_quantity да number:float min: 0 3
meta да ResponseMeta
meta.api_version да enum enum: v2 "v2"
meta.deleted нет boolean true
meta.id нет integer:int64 | null min: 1 1001
meta.command_replayed нет boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration нет object | null
meta.crossdock_configuration.physical_warehouse_id да integer:int64 min: 1 42
meta.crossdock_configuration.enabled да boolean true
meta.crossdock_configuration.process_version да string "direct_order_v1"

Примеры ответа

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 Некорректный запрос

BadRequest

Некорректный запрос.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

BAD_REQUEST

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

401 Требуется аутентификация

Unauthorized

Требуется аутентификация.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

AUTH_REQUIRED

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

403 Доступ запрещен

Forbidden

Аутентифицированному аккаунту запрещено выполнять это действие.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

FORBIDDEN

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

404 Не найдено

NotFound

Запрошенный ресурс не найден или находится вне области доступа аккаунта.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

NOT_FOUND

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

409 Конфликт

Conflict

Запрос конфликтует с текущим состоянием ресурса или ключа идемпотентности.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

idempotencyConflict

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

422 Ошибка валидации

ValidationError

Ошибка валидации.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The given data was invalid."
error нет string "VALIDATION_ERROR"
errors да object {"warehouse_id":["The selected warehouse is invalid."]}

Примеры ответа

validationError

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

429 Превышен лимит запросов

TooManyRequests

Превышен лимит запросов.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "Too Many Attempts."
error да string "RATE_LIMITED"

500 Внутренняя ошибка сервера

InternalServerError

Произошла непредвиденная ошибка сервера.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

INTERNAL_SERVER_ERROR

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

Обновить приемку

operationIdreplaceAcceptancesOffers
РазделПриемки
БезопасностьbearerAuth

Update acceptance. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.
Этот маршрут /offers является совместимым alias для /lines; в новых интеграциях используйте маршрут /lines.
Текущее поведение backend является legacy-семантикой частичного обновления: пропущенные поля не изменяются.
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-запроса (cURL)

Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.

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

Параметры

Имя Где Обязательное Тип Style Explode Ограничения Описание Пример
id path да integer:int64 min: 1 ID приемки. 1001
lineId path да integer:int64 min: 1 ID строки документа. 1001
Idempotency-Key header нет string maxLength: 191 Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. "ord-create-20260714-001"

Тело запроса

ReplaceAcceptanceLineRequest обязательно

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да AcceptanceLineReplacePayload Legacy PUT payload строки. Текущий backend обрабатывает PUT как частичное обновление.
data.expected_quantity нет number:float | null min: 0 10
data.price нет number:float | null 4.99
data.batch нет string | null "LOT-2026"
data.production_date нет string:date | null "2026-01-15"
data.expiration_date нет string:date | null "2027-01-15"
data.barcode нет string | null maxLength: 64 "4601234567890"

Примеры запроса

default

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

Ответы

200 Successful response.

Successful response.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да 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 да integer:int64 readOnly min: 1 1001
data.created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.acceptance_id да integer:int64 min: 1 5101
data.product_id да integer:int64 min: 1 1201
data.expected_quantity да number:float min: 0 10
data.accepted_quantity да number:float min: 0 0
data.placed_quantity да number:float min: 0 0
data.price нет number:float | null 4.99
data.batch нет string | null "LOT-2026"
data.production_date нет string:date | null "2026-01-15"
data.expiration_date нет string:date | null "2027-01-15"
data.barcode нет string | null maxLength: 64 "4601234567890"
data.product нет object | null
data.product.id да integer:int64 readOnly min: 1 1201
data.product.name да string "Coffee 250g"
data.product.external_id нет string | null "EXT-10045"
data.accepted_lots нет array<AcceptanceLot>
data.accepted_lots[] нет AcceptanceLot
data.accepted_lots[].batch да string | null "LOT-2026"
data.accepted_lots[].production_date да string:date | null "2026-01-15"
data.accepted_lots[].expiration_date да string:date | null "2027-01-15"
data.accepted_lots[].accepted_quantity да number:float min: 0 5
data.accepted_lots[].placed_quantity да number:float min: 0 3
meta да ResponseMeta
meta.api_version да enum enum: v2 "v2"
meta.deleted нет boolean true
meta.id нет integer:int64 | null min: 1 1001
meta.command_replayed нет boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration нет object | null
meta.crossdock_configuration.physical_warehouse_id да integer:int64 min: 1 42
meta.crossdock_configuration.enabled да boolean true
meta.crossdock_configuration.process_version да string "direct_order_v1"

Примеры ответа

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 Некорректный запрос

BadRequest

Некорректный запрос.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

BAD_REQUEST

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

401 Требуется аутентификация

Unauthorized

Требуется аутентификация.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

AUTH_REQUIRED

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

403 Доступ запрещен

Forbidden

Аутентифицированному аккаунту запрещено выполнять это действие.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

FORBIDDEN

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

404 Не найдено

NotFound

Запрошенный ресурс не найден или находится вне области доступа аккаунта.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

NOT_FOUND

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

409 Конфликт

Conflict

Запрос конфликтует с текущим состоянием ресурса или ключа идемпотентности.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

idempotencyConflict

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

422 Ошибка валидации

ValidationError

Ошибка валидации.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The given data was invalid."
error нет string "VALIDATION_ERROR"
errors да object {"warehouse_id":["The selected warehouse is invalid."]}

Примеры ответа

validationError

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

429 Превышен лимит запросов

TooManyRequests

Превышен лимит запросов.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "Too Many Attempts."
error да string "RATE_LIMITED"

500 Внутренняя ошибка сервера

InternalServerError

Произошла непредвиденная ошибка сервера.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

INTERNAL_SERVER_ERROR

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

Удалить приемку

operationIddeleteAcceptancesOffers
РазделПриемки
БезопасностьbearerAuth

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.
Этот маршрут /offers является совместимым alias для /lines; в новых интеграциях используйте маршрут /lines.

Пример HTTP-запроса (cURL)

Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.

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

Параметры

Имя Где Обязательное Тип Style Explode Ограничения Описание Пример
id path да integer:int64 min: 1 ID приемки. 1001
lineId path да integer:int64 min: 1 ID строки документа. 1001
Idempotency-Key header нет string maxLength: 191 Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. "ord-create-20260714-001"

Тело запроса

Тело запроса отсутствует.

Ответы

200 Successful response.

Successful response.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да object | null
meta да object
meta.api_version да enum enum: v2 "v2"
meta.deleted да boolean true
meta.id да integer:int64 min: 1 1001

Примеры ответа

success

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

400 Некорректный запрос

BadRequest

Некорректный запрос.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

BAD_REQUEST

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

401 Требуется аутентификация

Unauthorized

Требуется аутентификация.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

AUTH_REQUIRED

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

403 Доступ запрещен

Forbidden

Аутентифицированному аккаунту запрещено выполнять это действие.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

FORBIDDEN

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

404 Не найдено

NotFound

Запрошенный ресурс не найден или находится вне области доступа аккаунта.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

NOT_FOUND

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

409 Конфликт

Conflict

Запрос конфликтует с текущим состоянием ресурса или ключа идемпотентности.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

idempotencyConflict

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

422 Ошибка валидации

ValidationError

Ошибка валидации.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The given data was invalid."
error нет string "VALIDATION_ERROR"
errors да object {"warehouse_id":["The selected warehouse is invalid."]}

Примеры ответа

validationError

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

429 Превышен лимит запросов

TooManyRequests

Превышен лимит запросов.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "Too Many Attempts."
error да string "RATE_LIMITED"

500 Внутренняя ошибка сервера

InternalServerError

Произошла непредвиденная ошибка сервера.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

INTERNAL_SERVER_ERROR

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