Разукомплектация квантов

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

Разукомплектация квантов

GET /api/v2/quant-unpackings

Получить список разукомплектаций квантов

operationIdlistQuantUnpackings
РазделРазукомплектация квантов
БезопасностьbearerAuth

Возвращает разукомплектации квантов, видимые аутентифицированному аккаунту. Используйте описанные query parameters для фильтрации, сортировки и пагинации.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.

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

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

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/quant-unpackings" \
  --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: 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, document_date, conducted_at, created_at, updated_at. По умолчанию: -id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. "-id"
after_id query нет integer:int64 form true min: 0 Вернуть строки с ID больше указанного значения. Граница исключающая. Этот фильтр также можно передать как filter[after_id], если это поддерживает Laravel query adapter. 1000
include query нет string form false Связанные сущности через запятую. Допустимые значения: items. Этот фильтр также можно передать как filter[include], если это поддерживает Laravel query adapter. "items"
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
user_id query нет integer:int64 form true min: 1 Фильтр по user_id с точным совпадением. Этот фильтр также можно передать как filter[user_id], если это поддерживает Laravel query adapter. 15
comment query нет string form true Фильтр по comment с частичным текстовым совпадением. Этот фильтр также можно передать как filter[comment], если это поддерживает Laravel query adapter. "Priority"
document_date_from query нет string:date form true Нижняя включительная граница даты для document_date. Этот фильтр также можно передать как filter[document_date_from], если это поддерживает Laravel query adapter. "2026-07-14"
document_date_to query нет string:date form true Верхняя включительная граница даты для document_date. Этот фильтр также можно передать как filter[document_date_to], если это поддерживает Laravel query adapter. "2026-07-14"
conducted_at_from query нет string:date form true Нижняя включительная граница даты для conducted_at. Этот фильтр также можно передать как filter[conducted_at_from], если это поддерживает Laravel query adapter. "2026-07-14"
conducted_at_to query нет string:date form true Верхняя включительная граница даты для conducted_at. Этот фильтр также можно передать как filter[conducted_at_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<QuantUnpacking>
data[] нет QuantUnpacking Документ разукомплектации кванта.
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 "QU-100245"
data[].domain_id нет integer:int64 | null min: 1 3
data[].warehouse_id нет integer:int64 | null min: 1 42
data[].user_id нет integer:int64 | null min: 1 9
data[].status_id нет enum:int64 | null enum: 1, 4 1 - draft/new document. 4 - conducted document. 1
data[].document_date нет string:date | null "2026-07-14"
data[].counts да object
data[].counts.source да number:float 1
data[].counts.target да number:float 6
data[].counts.source_moved да number:float 0
data[].counts.target_moved да number:float 0
data[].conducted_at нет string:date-time | null "2026-07-14T10:30:00Z"
data[].comment нет string | null "Unpack coffee box"
data[].items нет array<QuantUnpackingItem>
data[].items[] нет QuantUnpackingItem Строка разукомплектации кванта.
data[].items[].id да integer:int64 readOnly min: 1 9001
data[].items[].source_product_id да integer:int64 min: 1 1200
data[].items[].target_product_id нет integer:int64 | null min: 1 1201
data[].items[].source_place_id нет integer:int64 | null min: 1 501
data[].items[].target_place_id нет integer:int64 | null min: 1 502
data[].items[].source_quantity да number:float min: 0 1
data[].items[].target_quantity нет number:float | null min: 0 6
data[].items[].available_quantity нет number:float | null min: 0 10
data[].items[].batch нет string | null "LOT-2026"
data[].items[].production_date нет string:date | null "2026-01-15"
data[].items[].expiration_date нет string:date | null "2027-01-15"
data[].items[].comment нет string | null "Box unpacked"
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": 9201,
      "external_id": "QU-100245",
      "domain_id": 3,
      "warehouse_id": 42,
      "user_id": 9,
      "status_id": 1,
      "document_date": "2026-07-14",
      "counts": {
        "source": 1,
        "target": 6,
        "source_moved": 0,
        "target_moved": 0
      },
      "conducted_at": null,
      "comment": "Unpack coffee box",
      "items": [
        {
          "id": 9001,
          "source_product_id": 1200,
          "target_product_id": 1201,
          "source_place_id": 501,
          "target_place_id": 502,
          "source_quantity": 1,
          "target_quantity": 6,
          "available_quantity": 10,
          "batch": "LOT-2026",
          "production_date": "2026-01-15",
          "expiration_date": "2027-01-15",
          "comment": "Box unpacked"
        }
      ],
      "created_at": "2026-07-14T09:00:00Z",
      "updated_at": "2026-07-14T09:30:00Z"
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/quant-unpackings?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/quant-unpackings?page=2",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/quant-unpackings?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "https://betawms.ffcdek.ru/api/v2/quant-unpackings",
    "per_page": 100,
    "to": 100,
    "total": 123
  }
}

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

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/quant-unpackings

Создать разукомплектацию кванта

operationIdcreateQuantUnpackings
РазделРазукомплектация квантов
БезопасностьbearerAuth

Create quant unpacking. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.

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

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

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

Параметры

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

Тело запроса

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

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да CreateQuantUnpackingPayload
data.warehouse_id да integer:int64 min: 1 42
data.document_date нет string:date | null "2026-07-14"
data.external_id нет string | null "QU-100245"
data.comment нет string | null "Unpack coffee box"
data.conduct нет boolean false
data.items да array<QuantUnpackingItemCreatePayload> minItems: 1
data.items[] нет QuantUnpackingItemCreatePayload Исходная строка разукомплектации кванта. Целевой товар и целевое количество определяются сервисом упаковок.
data.items[].source_product_id да integer:int64 min: 1 1200
data.items[].source_quantity да number:float min: 0.001 1
data.items[].source_place_id нет integer:int64 | null min: 1 501
data.items[].target_place_id нет integer:int64 | null min: 1 502
data.items[].batch нет string | null "LOT-2026"
data.items[].production_date нет string:date | null "2026-01-15"
data.items[].expiration_date нет string:date | null "2027-01-15"
data.items[].comment нет string | null "Box unpacked"

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

default

{
  "data": {
    "warehouse_id": 42,
    "external_id": "QU-100245",
    "items": [
      {
        "source_product_id": 1200,
        "source_quantity": 1,
        "source_place_id": 501
      }
    ]
  }
}

Ответы

201 Created.

Created.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да QuantUnpacking Документ разукомплектации кванта.
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 "QU-100245"
data.domain_id нет integer:int64 | null min: 1 3
data.warehouse_id нет integer:int64 | null min: 1 42
data.user_id нет integer:int64 | null min: 1 9
data.status_id нет enum:int64 | null enum: 1, 4 1 - draft/new document. 4 - conducted document. 1
data.document_date нет string:date | null "2026-07-14"
data.counts да object
data.counts.source да number:float 1
data.counts.target да number:float 6
data.counts.source_moved да number:float 0
data.counts.target_moved да number:float 0
data.conducted_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.comment нет string | null "Unpack coffee box"
data.items нет array<QuantUnpackingItem>
data.items[] нет QuantUnpackingItem Строка разукомплектации кванта.
data.items[].id да integer:int64 readOnly min: 1 9001
data.items[].source_product_id да integer:int64 min: 1 1200
data.items[].target_product_id нет integer:int64 | null min: 1 1201
data.items[].source_place_id нет integer:int64 | null min: 1 501
data.items[].target_place_id нет integer:int64 | null min: 1 502
data.items[].source_quantity да number:float min: 0 1
data.items[].target_quantity нет number:float | null min: 0 6
data.items[].available_quantity нет number:float | null min: 0 10
data.items[].batch нет string | null "LOT-2026"
data.items[].production_date нет string:date | null "2026-01-15"
data.items[].expiration_date нет string:date | null "2027-01-15"
data.items[].comment нет string | null "Box unpacked"
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": 9201,
    "external_id": "QU-100245",
    "domain_id": 3,
    "warehouse_id": 42,
    "user_id": 9,
    "status_id": 1,
    "document_date": "2026-07-14",
    "counts": {
      "source": 1,
      "target": 6,
      "source_moved": 0,
      "target_moved": 0
    },
    "conducted_at": null,
    "comment": "Unpack coffee box",
    "items": [
      {
        "id": 9001,
        "source_product_id": 1200,
        "target_product_id": 1201,
        "source_place_id": 501,
        "target_place_id": 502,
        "source_quantity": 1,
        "target_quantity": 6,
        "available_quantity": 10,
        "batch": "LOT-2026",
        "production_date": "2026-01-15",
        "expiration_date": "2027-01-15",
        "comment": "Box unpacked"
      }
    ],
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

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

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

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/quant-unpackings/{id}

Получить разукомплектацию кванта

operationIdgetQuantUnpackings
РазделРазукомплектация квантов
БезопасностьbearerAuth

Возвращает один ресурс: разукомплектация кванта, если он существует и видим аутентифицированному аккаунту.

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

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

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/quant-unpackings/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 да QuantUnpacking Документ разукомплектации кванта.
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 "QU-100245"
data.domain_id нет integer:int64 | null min: 1 3
data.warehouse_id нет integer:int64 | null min: 1 42
data.user_id нет integer:int64 | null min: 1 9
data.status_id нет enum:int64 | null enum: 1, 4 1 - draft/new document. 4 - conducted document. 1
data.document_date нет string:date | null "2026-07-14"
data.counts да object
data.counts.source да number:float 1
data.counts.target да number:float 6
data.counts.source_moved да number:float 0
data.counts.target_moved да number:float 0
data.conducted_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.comment нет string | null "Unpack coffee box"
data.items нет array<QuantUnpackingItem>
data.items[] нет QuantUnpackingItem Строка разукомплектации кванта.
data.items[].id да integer:int64 readOnly min: 1 9001
data.items[].source_product_id да integer:int64 min: 1 1200
data.items[].target_product_id нет integer:int64 | null min: 1 1201
data.items[].source_place_id нет integer:int64 | null min: 1 501
data.items[].target_place_id нет integer:int64 | null min: 1 502
data.items[].source_quantity да number:float min: 0 1
data.items[].target_quantity нет number:float | null min: 0 6
data.items[].available_quantity нет number:float | null min: 0 10
data.items[].batch нет string | null "LOT-2026"
data.items[].production_date нет string:date | null "2026-01-15"
data.items[].expiration_date нет string:date | null "2027-01-15"
data.items[].comment нет string | null "Box unpacked"
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": 9201,
    "external_id": "QU-100245",
    "domain_id": 3,
    "warehouse_id": 42,
    "user_id": 9,
    "status_id": 1,
    "document_date": "2026-07-14",
    "counts": {
      "source": 1,
      "target": 6,
      "source_moved": 0,
      "target_moved": 0
    },
    "conducted_at": null,
    "comment": "Unpack coffee box",
    "items": [
      {
        "id": 9001,
        "source_product_id": 1200,
        "target_product_id": 1201,
        "source_place_id": 501,
        "target_place_id": 502,
        "source_quantity": 1,
        "target_quantity": 6,
        "available_quantity": 10,
        "batch": "LOT-2026",
        "production_date": "2026-01-15",
        "expiration_date": "2027-01-15",
        "comment": "Box unpacked"
      }
    ],
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

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

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/quant-unpackings/{id}/conduct

Провести разукомплектацию кванта

operationIdconductQuantUnpacking
РазделРазукомплектация квантов
БезопасностьbearerAuth

Conduct quant unpacking. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.

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

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

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

Параметры

Имя Где Обязательное Тип 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 да QuantUnpacking Документ разукомплектации кванта.
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 "QU-100245"
data.domain_id нет integer:int64 | null min: 1 3
data.warehouse_id нет integer:int64 | null min: 1 42
data.user_id нет integer:int64 | null min: 1 9
data.status_id нет enum:int64 | null enum: 1, 4 1 - draft/new document. 4 - conducted document. 1
data.document_date нет string:date | null "2026-07-14"
data.counts да object
data.counts.source да number:float 1
data.counts.target да number:float 6
data.counts.source_moved да number:float 0
data.counts.target_moved да number:float 0
data.conducted_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.comment нет string | null "Unpack coffee box"
data.items нет array<QuantUnpackingItem>
data.items[] нет QuantUnpackingItem Строка разукомплектации кванта.
data.items[].id да integer:int64 readOnly min: 1 9001
data.items[].source_product_id да integer:int64 min: 1 1200
data.items[].target_product_id нет integer:int64 | null min: 1 1201
data.items[].source_place_id нет integer:int64 | null min: 1 501
data.items[].target_place_id нет integer:int64 | null min: 1 502
data.items[].source_quantity да number:float min: 0 1
data.items[].target_quantity нет number:float | null min: 0 6
data.items[].available_quantity нет number:float | null min: 0 10
data.items[].batch нет string | null "LOT-2026"
data.items[].production_date нет string:date | null "2026-01-15"
data.items[].expiration_date нет string:date | null "2027-01-15"
data.items[].comment нет string | null "Box unpacked"
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": 9201,
    "external_id": "QU-100245",
    "domain_id": 3,
    "warehouse_id": 42,
    "user_id": 9,
    "status_id": 1,
    "document_date": "2026-07-14",
    "counts": {
      "source": 1,
      "target": 6,
      "source_moved": 0,
      "target_moved": 0
    },
    "conducted_at": null,
    "comment": "Unpack coffee box",
    "items": [
      {
        "id": 9001,
        "source_product_id": 1200,
        "target_product_id": 1201,
        "source_place_id": 501,
        "target_place_id": 502,
        "source_quantity": 1,
        "target_quantity": 6,
        "available_quantity": 10,
        "batch": "LOT-2026",
        "production_date": "2026-01-15",
        "expiration_date": "2027-01-15",
        "comment": "Box unpacked"
      }
    ],
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

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

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/quant-unpackings/{id}/items

Добавить строку разукомплектации

operationIdaddQuantUnpackingsItems
РазделРазукомплектация квантов
БезопасностьbearerAuth

Add quant unpacking. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.

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

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

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

Параметры

Имя Где Обязательное Тип 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"

Тело запроса

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

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да QuantUnpackingItemCreatePayload Исходная строка разукомплектации кванта. Целевой товар и целевое количество определяются сервисом упаковок.
data.source_product_id да integer:int64 min: 1 1200
data.source_quantity да number:float min: 0.001 1
data.source_place_id нет integer:int64 | null min: 1 501
data.target_place_id нет integer:int64 | null min: 1 502
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.comment нет string | null "Box unpacked"

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

default

{
  "data": {
    "source_product_id": 1200,
    "source_quantity": 1,
    "source_place_id": 501
  }
}

Ответы

200 Successful response.

Successful response.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да QuantUnpacking Документ разукомплектации кванта.
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 "QU-100245"
data.domain_id нет integer:int64 | null min: 1 3
data.warehouse_id нет integer:int64 | null min: 1 42
data.user_id нет integer:int64 | null min: 1 9
data.status_id нет enum:int64 | null enum: 1, 4 1 - draft/new document. 4 - conducted document. 1
data.document_date нет string:date | null "2026-07-14"
data.counts да object
data.counts.source да number:float 1
data.counts.target да number:float 6
data.counts.source_moved да number:float 0
data.counts.target_moved да number:float 0
data.conducted_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.comment нет string | null "Unpack coffee box"
data.items нет array<QuantUnpackingItem>
data.items[] нет QuantUnpackingItem Строка разукомплектации кванта.
data.items[].id да integer:int64 readOnly min: 1 9001
data.items[].source_product_id да integer:int64 min: 1 1200
data.items[].target_product_id нет integer:int64 | null min: 1 1201
data.items[].source_place_id нет integer:int64 | null min: 1 501
data.items[].target_place_id нет integer:int64 | null min: 1 502
data.items[].source_quantity да number:float min: 0 1
data.items[].target_quantity нет number:float | null min: 0 6
data.items[].available_quantity нет number:float | null min: 0 10
data.items[].batch нет string | null "LOT-2026"
data.items[].production_date нет string:date | null "2026-01-15"
data.items[].expiration_date нет string:date | null "2027-01-15"
data.items[].comment нет string | null "Box unpacked"
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": 9201,
    "external_id": "QU-100245",
    "domain_id": 3,
    "warehouse_id": 42,
    "user_id": 9,
    "status_id": 1,
    "document_date": "2026-07-14",
    "counts": {
      "source": 1,
      "target": 6,
      "source_moved": 0,
      "target_moved": 0
    },
    "conducted_at": null,
    "comment": "Unpack coffee box",
    "items": [
      {
        "id": 9001,
        "source_product_id": 1200,
        "target_product_id": 1201,
        "source_place_id": 501,
        "target_place_id": 502,
        "source_quantity": 1,
        "target_quantity": 6,
        "available_quantity": 10,
        "batch": "LOT-2026",
        "production_date": "2026-01-15",
        "expiration_date": "2027-01-15",
        "comment": "Box unpacked"
      }
    ],
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

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

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