Приемки
Каждая операция ниже сгенерирована из 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; продолжение процесса описано в разделе Кросс-докинг.Приемки
Получить список приемок
| operationId | listAcceptances |
|---|---|
| Раздел | Приемки |
| Безопасность | 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"
}
Создать обычную, возвратную или cross-dock-приёмку
| operationId | createAcceptances |
|---|---|
| Раздел | Приемки |
| Безопасность | 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"
}
Получить приемку
| operationId | getAcceptances |
|---|---|
| Раздел | Приемки |
| Безопасность | 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"
}
Обновить приемку
| operationId | replaceAcceptances |
|---|---|
| Раздел | Приемки |
| Безопасность | 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"
}
Обновить приемку
| operationId | patchAcceptances |
|---|---|
| Раздел | Приемки |
| Безопасность | 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"
}
Удалить приемку
| operationId | deleteAcceptances |
|---|---|
| Раздел | Приемки |
| Безопасность | 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"
}
Cancel acceptance
| operationId | cancelAcceptance |
|---|---|
| Раздел | Приемки |
| Безопасность | 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"
}
Получить список приемок
| operationId | listAcceptancesLines |
|---|---|
| Раздел | Приемки |
| Безопасность | 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"
}
Создать приемку
| operationId | createAcceptancesLines |
|---|---|
| Раздел | Приемки |
| Безопасность | 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"
}
Обновить приемку
| operationId | replaceAcceptancesLines |
|---|---|
| Раздел | Приемки |
| Безопасность | 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"
}
Обновить приемку
| operationId | patchAcceptancesLines |
|---|---|
| Раздел | Приемки |
| Безопасность | 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"
}
Удалить приемку
| operationId | deleteAcceptancesLines |
|---|---|
| Раздел | Приемки |
| Безопасность | 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"
}
Создать приемку
| operationId | createAcceptancesOffers |
|---|---|
| Раздел | Приемки |
| Безопасность | 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"
}
Обновить приемку
| operationId | replaceAcceptancesOffers |
|---|---|
| Раздел | Приемки |
| Безопасность | 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"
}
Удалить приемку
| operationId | deleteAcceptancesOffers |
|---|---|
| Раздел | Приемки |
| Безопасность | 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"
}