Шаблоны уведомлений
Каждая операция ниже сгенерирована из OpenAPI v2 и содержит параметры, поля запроса, поля ответа, ошибки и примеры.
Как устроены уведомления
Шаблон задаёт канал, тип документа, целевой статус, задержку, условие, текст и печатное вложение. Привязка связывает его с клиентским складом и получателями. Это два отдельных ресурса: создание шаблона не создаёт привязку и не является командой немедленной отправки. Для рабочего сценария нужны активный шаблон, активная привязка и подходящее событие/документ. Настройки доставки и работа фоновой обработки проверяются отдельно от успешного CRUD-ответа.
Права и область данных
| view | admin, warehouse_manager, warehouse_worker, clients |
|---|---|
| create / update | admin, warehouse_manager, clients |
| delete template | admin, warehouse_manager |
| Привязки | Создание, изменение и удаление привязки требуют update для модуля notifications. |
| Access V2 | Указанные роли — резервные правила; явные решения Access V2 проверяются первыми. Все шаблоны ограничены доменом пользователя. domain_id, owner_user_id и event назначаются сервером; передать другой домен в теле нельзя. |
Не путайте два статуса
| document_status_id | Статус приёмки или заказа, при котором должно сработать уведомление. Должен существовать в справочнике выбранного document_type. Например, приёмка 4 — закрыта. |
|---|---|
| status_id | Включение самого шаблона или привязки: 0 — выключен, 1 — включен. По умолчанию при создании 1. |
| event | document.status_changed |
| delay_hours | 0–8760 часов; по умолчанию 0. Задержка не гарантирует точное время фактической доставки. |
| start_document_id | Необязательная нижняя граница ID документов, целое число ≥1; null снимает ограничение. |
| attachment_print_template_id | Печатный шаблон текущего домена и соответствующего модуля order/acceptance. При смене типа документа проверьте вложение; null удаляет привязку вложения. |
| conditions.acceptance_has_discrepancy | Применяется только к закрытой приёмке (document_type=acceptance, document_status_id=4): true — есть расхождения, false — нет. {} или null убирает условие. Неизвестные и неприменимые ключи нормализуются и не сохраняются; всегда проверяйте возвращённый conditions. |
Сценарий: письмо о закрытой приёмке
- Создайте шаблон POST /api/v2/notification-templates с телом ниже. Сохраните data.id из ответа 201.
{
"data": {
"name": "Приёмка закрыта с расхождениями",
"channel": "email",
"document_type": "acceptance",
"document_status_id": 4,
"delay_hours": 0,
"conditions": {
"acceptance_has_discrepancy": true
},
"subject": "Приёмка #{doc_id}: {doc_status_name}",
"body_html": "<p>Склад: {wh_name}. Принято: {total_accepted_qty}. Расхождение: {total_difference_qty}.</p>",
"status_id": 1
}
}- Для полученного ID вызовите POST /api/v2/notification-templates/{id}/bindings. warehouse_id замените ID доступного клиентского склада (тип 2); адрес — реальным согласованным получателем.
{
"data": {
"warehouse_id": 42,
"recipients": [
"warehouse@example.com"
],
"status_id": 1
}
}- Прочитайте GET /api/v2/notification-templates/{id}; проверьте оба status_id, conditions, bindings_count и bindings. Сохранённый текст может отличаться от входного: HTML очищается.
- Проверьте обработку подходящего документа и фактическую доставку штатными средствами уведомлений. Ответ 201 подтверждает сохранение настроек, а не доставку письма.
Получатели и внутренние сообщения
| recipients | До 100 email-адресов, каждый до 255 символов; для email-канала нужен хотя бы один. Адреса приводятся к нижнему регистру и очищаются от повторов. |
|---|---|
| warehouse_users | Получатели определяются по пользователям склада. |
| domain_users | Получатели определяются по пользователям домена. |
| explicit | Для internal-канала требуется непустой internal_user_ids: до 1000 ID пользователей текущего домена. Чужой ID приводит к 422. |
| warehouse_id | Один склад можно привязать к одному шаблону только один раз. Другой шаблон может иметь собственную привязку того же склада. Вложенный bindingId всегда проверяется в контексте родительского шаблона. |
{
"data": {
"warehouse_id": 42,
"internal_recipient_mode": "explicit",
"internal_user_ids": [
15,
16
],
"status_id": 1
}
}Этот пример привязки используйте для шаблона channel=internal. Если меняете канал существующего шаблона, отдельно проверьте и обновите его получателей: PATCH шаблона не перенастраивает привязки автоматически.
Частичное изменение, отключение и удаление
PUT и PATCH сохраняют пропущенные поля. Для временного отключения передайте {"data":{"status_id":0}} в шаблон или конкретную привязку. Для очистки массива пользователей передайте [], для nullable-поля — null. DELETE шаблона транзакционно удаляет шаблон и его привязки, но сохраняет историю сообщений. DELETE привязки удаляет только выбранную привязку; родитель остаётся.
{
"data": null,
"meta": {
"api_version": "v2",
"deleted": true
}
}Переменные приёмки
{doc_id} | ID накладной |
|---|---|
{doc_ext_id} | Внешний ID накладной |
{doc_barcode} | Штрихкод документа |
{doc_date} | Дата документа |
{doc_date_start} | Дата начала приемки |
{doc_date_finish} | Дата закрытия приемки |
{doc_status_id} | ID статуса документа |
{doc_status_name} | Название статуса документа |
{current_date} | Текущая дата |
{current_datetime} | Текущие дата и время |
{shop_id} | ID магазина |
{shop_name} | Название магазина |
{wh_id} | ID склада |
{wh_name} | Название склада |
{total_expected_qty} | Ожидаемое количество |
{total_accepted_qty} | Принятое количество |
{total_difference_qty} | Расхождение по количеству |
{executor_name} | Название хранителя |
{executor_phone} | Телефон хранителя |
{executor_email} | Электронная почта хранителя |
{executor_address} | Адрес хранителя |
{executor_contact_person} | Контакт хранителя |
{customer_name} | Название клиента |
{customer_phone} | Телефон клиента |
{customer_email} | Электронная почта клиента |
{customer_address} | Адрес клиента |
{customer_contact_person} | Контакт клиента |
{dog_id} | Номер договора |
{dog_date} | Дата договора |
Переменные заказа
{doc_id} | ID заказа |
|---|---|
{order_id} | ID заказа |
{doc_ext_id} | Внешний ID заказа |
{order_ext_id} | Внешний ID заказа |
{doc_status_id} | ID статуса заказа |
{doc_status_name} | Название статуса заказа |
{order_status_id} | ID статуса заказа |
{order_status_name} | Название статуса заказа |
{doc_date} | Дата заказа |
{order_date} | Дата заказа |
{order_date_send} | Плановая дата отправки |
{current_date} | Текущая дата |
{current_datetime} | Текущие дата и время |
{shop_id} | ID магазина |
{shop_name} | Название магазина |
{wh_id} | ID склада |
{wh_name} | Название склада |
{order_count} | Количество товаров в заказе |
{order_sum} | Сумма заказа |
{order_cod_sum} | Сумма наложенного платежа |
{order_shipping_price} | Стоимость доставки для клиента |
{order_shipping_cost} | Себестоимость доставки |
{ds_name} | Служба доставки |
{track_number} | Трек-номер |
{buyer_first_name} | Имя покупателя |
{buyer_second_name} | Отчество покупателя |
{buyer_last_name} | Фамилия покупателя |
{buyer_phone} | Телефон покупателя |
{buyer_email} | Электронная почта покупателя |
{buyer_zip} | Индекс покупателя |
{buyer_address} | Адрес покупателя |
{executor_name} | Название хранителя |
{executor_phone} | Телефон хранителя |
{executor_email} | Электронная почта хранителя |
{executor_address} | Адрес хранителя |
{executor_contact_person} | Контакт хранителя |
{customer_name} | Название клиента |
{customer_phone} | Телефон клиента |
{customer_email} | Электронная почта клиента |
{customer_address} | Адрес клиента |
{customer_contact_person} | Контакт клиента |
{dog_id} | Номер договора |
{dog_date} | Дата договора |
Типовые причины 422
Статус относится к другому типу документа; склад недоступен или не клиентский; склад уже привязан; пустой recipients для email; пустой internal_user_ids при explicit; пользователь другого домена; печатный шаблон другого домена/модуля; превышены длина имени (150), темы (255), задержка (8760) или размеры массивов. Поля ответа ошибки находятся в errors; исправляйте указанные поля и перечитывайте сохранённый ресурс.
Шаблоны уведомлений
Получить список шаблонов уведомлений
| operationId | listNotificationTemplates |
|---|---|
| Раздел | Шаблоны уведомлений |
| Безопасность | bearerAuth |
Returns a tenant-scoped, paginated list of document-status notification templates.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/notification-templates" \
--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 |
Number of templates per page. Default 50; maximum 250. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
50 |
sort |
query | нет | string |
form | false | Comma-separated sort fields: id, name, channel, document_type, document_status_id, delay_hours, status_id, created_at, updated_at. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"-id" |
|
include |
query | нет | enum |
form | false | enum: bindings | Set to bindings to include warehouse bindings in every list item. The same filter may also be sent as filter[include] where supported by the Laravel query adapter. |
"bindings" |
filter[id] |
query | нет | integer:int64 |
min: 0 | Exact template ID. | 41 |
||
filter[name] |
query | нет | string |
Case-insensitive partial template name. | "Acceptance closed" |
|||
filter[channel] |
query | нет | enum |
enum: email, internal | Exact delivery channel. | "email" |
||
filter[document_type] |
query | нет | enum |
enum: acceptance, order | Exact document type. | "acceptance" |
||
filter[document_status_id] |
query | нет | integer:int64 |
min: 0 | Exact target document status ID. | 4 |
||
filter[status_id] |
query | нет | integer:int64 |
min: 0 | Exact template status: 0 or 1. | 1 |
||
filter[owner_user_id] |
query | нет | integer:int64 |
min: 0 | Exact owner user ID. | 15 |
||
created_at_from |
query | нет | string:date-time |
form | true | Created-at lower boundary. The same filter may also be sent as filter[created_at_from] where supported by the Laravel query adapter. |
"2026-07-01T00:00:00Z" |
|
created_at_to |
query | нет | string:date-time |
form | true | Created-at upper boundary. The same filter may also be sent as filter[created_at_to] where supported by the Laravel query adapter. |
"2026-07-31T23:59:59Z" |
|
updated_at_from |
query | нет | string:date-time |
form | true | Updated-at lower boundary. The same filter may also be sent as filter[updated_at_from] where supported by the Laravel query adapter. |
"2026-07-01T00:00:00Z" |
|
updated_at_to |
query | нет | string:date-time |
form | true | Updated-at upper boundary. The same filter may also be sent as filter[updated_at_to] where supported by the Laravel query adapter. |
"2026-07-31T23:59:59Z" |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<NotificationTemplate> |
|
|||
data[] |
нет | NotificationTemplate |
Template used when an acceptance or order enters the configured status. The bindings field is returned by the item endpoint and by list requests with include=bindings. |
|
||
data[].id |
да | 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[].domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data[].owner_user_id |
да | integer:int64 | null |
min: 1 | 15 |
||
data[].name |
да | string |
"Acceptance closed" |
|||
data[].event |
да | enum |
enum: document.status_changed | "document.status_changed" |
||
data[].channel |
да | enum |
enum: email, internal | "email" |
||
data[].document_type |
да | enum |
enum: acceptance, order | "acceptance" |
||
data[].document_status_id |
да | integer:int64 |
min: 0 | 4 |
||
data[].delay_hours |
да | integer:int64 |
min: 0 max: 8760 |
0 |
||
data[].start_document_id |
да | integer:int64 | null |
min: 1 | 1000 |
||
data[].conditions |
да | object |
{"acceptance_has_discrepancy":true} |
|||
data[].subject |
да | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data[].body_html |
да | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data[].body_text |
да | string | null |
"Document \#{doc_id} is closed." |
|||
data[].attachment_print_template_id |
да | integer:int64 | null |
min: 1 | 12 |
||
data[].status_id |
да | enum:int64 |
enum: 0, 1 | 1 |
||
data[].bindings_count |
да | integer:int64 |
min: 0 | 1 |
||
data[].bindings |
нет | array<NotificationTemplateBinding> |
|
|||
data[].bindings[] |
нет | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data[].bindings[].id |
да | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].bindings[].created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].bindings[].updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].bindings[].template_id |
да | integer:int64 |
min: 1 | 41 |
||
data[].bindings[].domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data[].bindings[].warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data[].bindings[].warehouse |
нет | object | null |
|
|||
data[].bindings[].warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data[].bindings[].warehouse.name |
да | string |
"Client Warehouse Sofia" |
|||
data[].bindings[].recipients |
да | array<string:email> |
maxItems: 100 | |
||
data[].bindings[].recipients[] |
нет | string:email |
"client@example.com" |
|||
data[].bindings[].internal_recipient_mode |
да | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data[].bindings[].internal_user_ids |
да | array<integer:int64> |
maxItems: 1000 | |
||
data[].bindings[].internal_user_ids[] |
нет | integer:int64 |
min: 1 | 15 |
||
data[].bindings[].status_id |
да | enum:int64 |
enum: 0, 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": 41,
"domain_id": 3,
"owner_user_id": 15,
"name": "Acceptance closed",
"event": "document.status_changed",
"channel": "email",
"document_type": "acceptance",
"document_status_id": 4,
"delay_hours": 0,
"start_document_id": null,
"conditions": {
"acceptance_has_discrepancy": true
},
"subject": "Document #{doc_id}: {doc_status_name}",
"body_html": "<p>Document #{doc_id} is closed.</p>",
"body_text": null,
"attachment_print_template_id": 12,
"status_id": 1,
"bindings_count": 1,
"bindings": [
{
"id": 7,
"template_id": 41,
"domain_id": 3,
"warehouse_id": 42,
"warehouse": {
"id": 42,
"name": "Client Warehouse Sofia"
},
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1,
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00:00Z"
}
],
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00:00Z"
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/notification-templates?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/notification-templates?page=1",
"prev": null,
"next": null
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 1,
"path": "https://betawms.ffcdek.ru/api/v2/notification-templates",
"per_page": 50,
"to": 1,
"total": 1
}
}
401 Требуется аутентификация
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"
}
Создать шаблон уведомления
| operationId | createNotificationTemplate |
|---|---|
| Раздел | Шаблоны уведомлений |
| Безопасность | bearerAuth |
Creates a notification template in the authenticated user domain. Domain, owner and event are assigned server-side.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/notification-templates" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}" \
--header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
--header "Content-Type: application/json" \
--data-binary @request.jsonПараметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
CreateNotificationTemplateRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CreateNotificationTemplatePayload |
|
|||
data.name |
да | string |
maxLength: 150 | "Acceptance closed" |
||
data.channel |
да | enum |
enum: email, internal | "email" |
||
data.document_type |
да | enum |
enum: acceptance, order | "acceptance" |
||
data.document_status_id |
да | integer:int64 |
min: 0 | 4 |
||
data.delay_hours |
нет | integer:int64 | null |
min: 0 max: 8760 |
0 |
||
data.start_document_id |
нет | integer:int64 | null |
min: 1 | 1000 |
||
data.conditions |
нет | object |
{"acceptance_has_discrepancy":true} |
|||
data.subject |
нет | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data.body_html |
нет | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data.body_text |
нет | string | null |
"Document \#{doc_id} is closed." |
|||
data.attachment_print_template_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.status_id |
нет | enum:int64 |
enum: 0, 1 | 1 |
Примеры запроса
Пример
{
"data": {
"name": "Acceptance closed",
"channel": "email",
"document_type": "acceptance",
"document_status_id": 4,
"delay_hours": 0,
"conditions": {
"acceptance_has_discrepancy": true
},
"subject": "Document #{doc_id}: {doc_status_name}",
"body_html": "<p>Document #{doc_id} is closed.</p>",
"status_id": 1
}
}
Ответы
201 Created.
Created.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | NotificationTemplate |
Template used when an acceptance or order enters the configured status. The bindings field is returned by the item endpoint and by list requests with include=bindings. |
|
||
data.id |
да | 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.domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data.owner_user_id |
да | integer:int64 | null |
min: 1 | 15 |
||
data.name |
да | string |
"Acceptance closed" |
|||
data.event |
да | enum |
enum: document.status_changed | "document.status_changed" |
||
data.channel |
да | enum |
enum: email, internal | "email" |
||
data.document_type |
да | enum |
enum: acceptance, order | "acceptance" |
||
data.document_status_id |
да | integer:int64 |
min: 0 | 4 |
||
data.delay_hours |
да | integer:int64 |
min: 0 max: 8760 |
0 |
||
data.start_document_id |
да | integer:int64 | null |
min: 1 | 1000 |
||
data.conditions |
да | object |
{"acceptance_has_discrepancy":true} |
|||
data.subject |
да | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data.body_html |
да | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data.body_text |
да | string | null |
"Document \#{doc_id} is closed." |
|||
data.attachment_print_template_id |
да | integer:int64 | null |
min: 1 | 12 |
||
data.status_id |
да | enum:int64 |
enum: 0, 1 | 1 |
||
data.bindings_count |
да | integer:int64 |
min: 0 | 1 |
||
data.bindings |
нет | array<NotificationTemplateBinding> |
|
|||
data.bindings[] |
нет | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data.bindings[].id |
да | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.bindings[].created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].template_id |
да | integer:int64 |
min: 1 | 41 |
||
data.bindings[].domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data.bindings[].warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse |
нет | object | null |
|
|||
data.bindings[].warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse.name |
да | string |
"Client Warehouse Sofia" |
|||
data.bindings[].recipients |
да | array<string:email> |
maxItems: 100 | |
||
data.bindings[].recipients[] |
нет | string:email |
"client@example.com" |
|||
data.bindings[].internal_recipient_mode |
да | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.bindings[].internal_user_ids |
да | array<integer:int64> |
maxItems: 1000 | |
||
data.bindings[].internal_user_ids[] |
нет | integer:int64 |
min: 1 | 15 |
||
data.bindings[].status_id |
да | enum:int64 |
enum: 0, 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": 41,
"domain_id": 3,
"owner_user_id": 15,
"name": "Acceptance closed",
"event": "document.status_changed",
"channel": "email",
"document_type": "acceptance",
"document_status_id": 4,
"delay_hours": 0,
"start_document_id": null,
"conditions": {
"acceptance_has_discrepancy": true
},
"subject": "Document #{doc_id}: {doc_status_name}",
"body_html": "<p>Document #{doc_id} is closed.</p>",
"body_text": null,
"attachment_print_template_id": 12,
"status_id": 1,
"bindings_count": 1,
"bindings": [
{
"id": 7,
"template_id": 41,
"domain_id": 3,
"warehouse_id": 42,
"warehouse": {
"id": 42,
"name": "Client Warehouse Sofia"
},
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1,
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00:00Z"
}
],
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00:00Z"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
BadRequest
Некорректный запрос.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"The request could not be processed." |
|||
error |
да | string |
"BAD_REQUEST" |
Примеры ответа
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Требуется аутентификация
Unauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"The request could not be processed." |
|||
error |
да | string |
"BAD_REQUEST" |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Доступ запрещен
Forbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"The request could not be processed." |
|||
error |
да | string |
"BAD_REQUEST" |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
409 Конфликт
Conflict
Запрос конфликтует с текущим состоянием ресурса или ключа идемпотентности.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"The request could not be processed." |
|||
error |
да | string |
"BAD_REQUEST" |
Примеры ответа
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Ошибка валидации
ValidationError
Ошибка валидации.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"The given data was invalid." |
|||
error |
нет | string |
"VALIDATION_ERROR" |
|||
errors |
да | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Примеры ответа
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Превышен лимит запросов
TooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Too Many Attempts." |
|||
error |
да | string |
"RATE_LIMITED" |
500 Внутренняя ошибка сервера
InternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"The request could not be processed." |
|||
error |
да | string |
"BAD_REQUEST" |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Получить шаблон с привязками
| operationId | getNotificationTemplate |
|---|---|
| Раздел | Шаблоны уведомлений |
| Безопасность | bearerAuth |
Returns one visible template with its current warehouse bindings.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/notification-templates/41" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
id |
path | да | integer:int64 |
min: 1 | Notification template ID. | 41 |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | NotificationTemplate |
Template used when an acceptance or order enters the configured status. The bindings field is returned by the item endpoint and by list requests with include=bindings. |
|
||
data.id |
да | 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.domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data.owner_user_id |
да | integer:int64 | null |
min: 1 | 15 |
||
data.name |
да | string |
"Acceptance closed" |
|||
data.event |
да | enum |
enum: document.status_changed | "document.status_changed" |
||
data.channel |
да | enum |
enum: email, internal | "email" |
||
data.document_type |
да | enum |
enum: acceptance, order | "acceptance" |
||
data.document_status_id |
да | integer:int64 |
min: 0 | 4 |
||
data.delay_hours |
да | integer:int64 |
min: 0 max: 8760 |
0 |
||
data.start_document_id |
да | integer:int64 | null |
min: 1 | 1000 |
||
data.conditions |
да | object |
{"acceptance_has_discrepancy":true} |
|||
data.subject |
да | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data.body_html |
да | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data.body_text |
да | string | null |
"Document \#{doc_id} is closed." |
|||
data.attachment_print_template_id |
да | integer:int64 | null |
min: 1 | 12 |
||
data.status_id |
да | enum:int64 |
enum: 0, 1 | 1 |
||
data.bindings_count |
да | integer:int64 |
min: 0 | 1 |
||
data.bindings |
нет | array<NotificationTemplateBinding> |
|
|||
data.bindings[] |
нет | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data.bindings[].id |
да | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.bindings[].created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].template_id |
да | integer:int64 |
min: 1 | 41 |
||
data.bindings[].domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data.bindings[].warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse |
нет | object | null |
|
|||
data.bindings[].warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse.name |
да | string |
"Client Warehouse Sofia" |
|||
data.bindings[].recipients |
да | array<string:email> |
maxItems: 100 | |
||
data.bindings[].recipients[] |
нет | string:email |
"client@example.com" |
|||
data.bindings[].internal_recipient_mode |
да | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.bindings[].internal_user_ids |
да | array<integer:int64> |
maxItems: 1000 | |
||
data.bindings[].internal_user_ids[] |
нет | integer:int64 |
min: 1 | 15 |
||
data.bindings[].status_id |
да | enum:int64 |
enum: 0, 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": 41,
"domain_id": 3,
"owner_user_id": 15,
"name": "Acceptance closed",
"event": "document.status_changed",
"channel": "email",
"document_type": "acceptance",
"document_status_id": 4,
"delay_hours": 0,
"start_document_id": null,
"conditions": {
"acceptance_has_discrepancy": true
},
"subject": "Document #{doc_id}: {doc_status_name}",
"body_html": "<p>Document #{doc_id} is closed.</p>",
"body_text": null,
"attachment_print_template_id": 12,
"status_id": 1,
"bindings_count": 1,
"bindings": [
{
"id": 7,
"template_id": 41,
"domain_id": 3,
"warehouse_id": 42,
"warehouse": {
"id": 42,
"name": "Client Warehouse Sofia"
},
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1,
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00:00Z"
}
],
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00:00Z"
},
"meta": {
"api_version": "v2"
}
}
401 Требуется аутентификация
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 | replaceNotificationTemplate |
|---|---|
| Раздел | Шаблоны уведомлений |
| Безопасность | bearerAuth |
Updates the supplied template fields. Omitted fields remain unchanged.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/notification-templates/41" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}" \
--header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
--header "Content-Type: application/json" \
--data-binary @request.jsonПараметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
id |
path | да | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
UpdateNotificationTemplateRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | UpdateNotificationTemplatePayload |
|
|||
data.name |
нет | string |
maxLength: 150 | "Acceptance closed" |
||
data.channel |
нет | enum |
enum: email, internal | "email" |
||
data.document_type |
нет | enum |
enum: acceptance, order | "acceptance" |
||
data.document_status_id |
нет | integer:int64 |
min: 0 | 4 |
||
data.delay_hours |
нет | integer:int64 | null |
min: 0 max: 8760 |
0 |
||
data.start_document_id |
нет | integer:int64 | null |
min: 1 | 1000 |
||
data.conditions |
нет | object |
{"acceptance_has_discrepancy":true} |
|||
data.subject |
нет | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data.body_html |
нет | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data.body_text |
нет | string | null |
"Document \#{doc_id} is closed." |
|||
data.attachment_print_template_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.status_id |
нет | enum:int64 |
enum: 0, 1 | 1 |
Примеры запроса
Пример
{
"data": {
"name": "Acceptance closed",
"channel": "email",
"document_type": "acceptance",
"document_status_id": 4,
"delay_hours": 0,
"conditions": {
"acceptance_has_discrepancy": true
},
"subject": "Document #{doc_id}: {doc_status_name}",
"body_html": "<p>Document #{doc_id} is closed.</p>",
"status_id": 1
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | NotificationTemplate |
Template used when an acceptance or order enters the configured status. The bindings field is returned by the item endpoint and by list requests with include=bindings. |
|
||
data.id |
да | 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.domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data.owner_user_id |
да | integer:int64 | null |
min: 1 | 15 |
||
data.name |
да | string |
"Acceptance closed" |
|||
data.event |
да | enum |
enum: document.status_changed | "document.status_changed" |
||
data.channel |
да | enum |
enum: email, internal | "email" |
||
data.document_type |
да | enum |
enum: acceptance, order | "acceptance" |
||
data.document_status_id |
да | integer:int64 |
min: 0 | 4 |
||
data.delay_hours |
да | integer:int64 |
min: 0 max: 8760 |
0 |
||
data.start_document_id |
да | integer:int64 | null |
min: 1 | 1000 |
||
data.conditions |
да | object |
{"acceptance_has_discrepancy":true} |
|||
data.subject |
да | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data.body_html |
да | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data.body_text |
да | string | null |
"Document \#{doc_id} is closed." |
|||
data.attachment_print_template_id |
да | integer:int64 | null |
min: 1 | 12 |
||
data.status_id |
да | enum:int64 |
enum: 0, 1 | 1 |
||
data.bindings_count |
да | integer:int64 |
min: 0 | 1 |
||
data.bindings |
нет | array<NotificationTemplateBinding> |
|
|||
data.bindings[] |
нет | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data.bindings[].id |
да | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.bindings[].created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].template_id |
да | integer:int64 |
min: 1 | 41 |
||
data.bindings[].domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data.bindings[].warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse |
нет | object | null |
|
|||
data.bindings[].warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse.name |
да | string |
"Client Warehouse Sofia" |
|||
data.bindings[].recipients |
да | array<string:email> |
maxItems: 100 | |
||
data.bindings[].recipients[] |
нет | string:email |
"client@example.com" |
|||
data.bindings[].internal_recipient_mode |
да | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.bindings[].internal_user_ids |
да | array<integer:int64> |
maxItems: 1000 | |
||
data.bindings[].internal_user_ids[] |
нет | integer:int64 |
min: 1 | 15 |
||
data.bindings[].status_id |
да | enum:int64 |
enum: 0, 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": 41,
"domain_id": 3,
"owner_user_id": 15,
"name": "Acceptance closed",
"event": "document.status_changed",
"channel": "email",
"document_type": "acceptance",
"document_status_id": 4,
"delay_hours": 0,
"start_document_id": null,
"conditions": {
"acceptance_has_discrepancy": true
},
"subject": "Document #{doc_id}: {doc_status_name}",
"body_html": "<p>Document #{doc_id} is closed.</p>",
"body_text": null,
"attachment_print_template_id": 12,
"status_id": 1,
"bindings_count": 1,
"bindings": [
{
"id": 7,
"template_id": 41,
"domain_id": 3,
"warehouse_id": 42,
"warehouse": {
"id": 42,
"name": "Client Warehouse Sofia"
},
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1,
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00:00Z"
}
],
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00:00Z"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
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 | patchNotificationTemplate |
|---|---|
| Раздел | Шаблоны уведомлений |
| Безопасность | bearerAuth |
Updates the supplied template fields. Omitted fields remain unchanged.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request PATCH "${NWMS_BASE_URL}/api/v2/notification-templates/41" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}" \
--header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
--header "Content-Type: application/json" \
--data-binary @request.jsonПараметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
id |
path | да | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
UpdateNotificationTemplateRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | UpdateNotificationTemplatePayload |
|
|||
data.name |
нет | string |
maxLength: 150 | "Acceptance closed" |
||
data.channel |
нет | enum |
enum: email, internal | "email" |
||
data.document_type |
нет | enum |
enum: acceptance, order | "acceptance" |
||
data.document_status_id |
нет | integer:int64 |
min: 0 | 4 |
||
data.delay_hours |
нет | integer:int64 | null |
min: 0 max: 8760 |
0 |
||
data.start_document_id |
нет | integer:int64 | null |
min: 1 | 1000 |
||
data.conditions |
нет | object |
{"acceptance_has_discrepancy":true} |
|||
data.subject |
нет | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data.body_html |
нет | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data.body_text |
нет | string | null |
"Document \#{doc_id} is closed." |
|||
data.attachment_print_template_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.status_id |
нет | enum:int64 |
enum: 0, 1 | 1 |
Примеры запроса
Пример
{
"data": {
"name": "Acceptance closed",
"channel": "email",
"document_type": "acceptance",
"document_status_id": 4,
"delay_hours": 0,
"conditions": {
"acceptance_has_discrepancy": true
},
"subject": "Document #{doc_id}: {doc_status_name}",
"body_html": "<p>Document #{doc_id} is closed.</p>",
"status_id": 1
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | NotificationTemplate |
Template used when an acceptance or order enters the configured status. The bindings field is returned by the item endpoint and by list requests with include=bindings. |
|
||
data.id |
да | 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.domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data.owner_user_id |
да | integer:int64 | null |
min: 1 | 15 |
||
data.name |
да | string |
"Acceptance closed" |
|||
data.event |
да | enum |
enum: document.status_changed | "document.status_changed" |
||
data.channel |
да | enum |
enum: email, internal | "email" |
||
data.document_type |
да | enum |
enum: acceptance, order | "acceptance" |
||
data.document_status_id |
да | integer:int64 |
min: 0 | 4 |
||
data.delay_hours |
да | integer:int64 |
min: 0 max: 8760 |
0 |
||
data.start_document_id |
да | integer:int64 | null |
min: 1 | 1000 |
||
data.conditions |
да | object |
{"acceptance_has_discrepancy":true} |
|||
data.subject |
да | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data.body_html |
да | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data.body_text |
да | string | null |
"Document \#{doc_id} is closed." |
|||
data.attachment_print_template_id |
да | integer:int64 | null |
min: 1 | 12 |
||
data.status_id |
да | enum:int64 |
enum: 0, 1 | 1 |
||
data.bindings_count |
да | integer:int64 |
min: 0 | 1 |
||
data.bindings |
нет | array<NotificationTemplateBinding> |
|
|||
data.bindings[] |
нет | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data.bindings[].id |
да | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.bindings[].created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].template_id |
да | integer:int64 |
min: 1 | 41 |
||
data.bindings[].domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data.bindings[].warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse |
нет | object | null |
|
|||
data.bindings[].warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse.name |
да | string |
"Client Warehouse Sofia" |
|||
data.bindings[].recipients |
да | array<string:email> |
maxItems: 100 | |
||
data.bindings[].recipients[] |
нет | string:email |
"client@example.com" |
|||
data.bindings[].internal_recipient_mode |
да | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.bindings[].internal_user_ids |
да | array<integer:int64> |
maxItems: 1000 | |
||
data.bindings[].internal_user_ids[] |
нет | integer:int64 |
min: 1 | 15 |
||
data.bindings[].status_id |
да | enum:int64 |
enum: 0, 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": 41,
"domain_id": 3,
"owner_user_id": 15,
"name": "Acceptance closed",
"event": "document.status_changed",
"channel": "email",
"document_type": "acceptance",
"document_status_id": 4,
"delay_hours": 0,
"start_document_id": null,
"conditions": {
"acceptance_has_discrepancy": true
},
"subject": "Document #{doc_id}: {doc_status_name}",
"body_html": "<p>Document #{doc_id} is closed.</p>",
"body_text": null,
"attachment_print_template_id": 12,
"status_id": 1,
"bindings_count": 1,
"bindings": [
{
"id": 7,
"template_id": 41,
"domain_id": 3,
"warehouse_id": 42,
"warehouse": {
"id": 42,
"name": "Client Warehouse Sofia"
},
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1,
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00:00Z"
}
],
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00:00Z"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
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 | deleteNotificationTemplate |
|---|---|
| Раздел | Шаблоны уведомлений |
| Безопасность | bearerAuth |
Deletes the template and its warehouse bindings in one transaction. Existing notification-message history is preserved.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request DELETE "${NWMS_BASE_URL}/api/v2/notification-templates/41" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}" \
--header "Idempotency-Key: ${NWMS_REQUEST_KEY}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
id |
path | да | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
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 |
Примеры ответа
success
{
"data": null,
"meta": {
"api_version": "v2",
"deleted": true
}
}
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 | listNotificationTemplateBindings |
|---|---|
| Раздел | Шаблоны уведомлений |
| Безопасность | bearerAuth |
Returns the paginated warehouse and recipient bindings of one visible template.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/notification-templates/41/bindings" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
id |
path | да | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
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 |
Number of bindings per page. Default 50; maximum 250. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
50 |
sort |
query | нет | string |
form | false | Comma-separated sort fields: id, warehouse_id, status_id, created_at, updated_at. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"id" |
|
filter[id] |
query | нет | integer:int64 |
min: 0 | Exact binding ID. | 7 |
||
filter[warehouse_id] |
query | нет | integer:int64 |
min: 0 | Exact warehouse ID. | 42 |
||
filter[status_id] |
query | нет | integer:int64 |
min: 0 | Exact binding status: 0 or 1. | 1 |
||
filter[internal_recipient_mode] |
query | нет | enum |
enum: warehouse_users, domain_users, explicit | Exact internal recipient mode. | "warehouse_users" |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<NotificationTemplateBinding> |
|
|||
data[] |
нет | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
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[].template_id |
да | integer:int64 |
min: 1 | 41 |
||
data[].domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data[].warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data[].warehouse |
нет | object | null |
|
|||
data[].warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data[].warehouse.name |
да | string |
"Client Warehouse Sofia" |
|||
data[].recipients |
да | array<string:email> |
maxItems: 100 | |
||
data[].recipients[] |
нет | string:email |
"client@example.com" |
|||
data[].internal_recipient_mode |
да | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data[].internal_user_ids |
да | array<integer:int64> |
maxItems: 1000 | |
||
data[].internal_user_ids[] |
нет | integer:int64 |
min: 1 | 15 |
||
data[].status_id |
да | enum:int64 |
enum: 0, 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": 7,
"template_id": 41,
"domain_id": 3,
"warehouse_id": 42,
"warehouse": {
"id": 42,
"name": "Client Warehouse Sofia"
},
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1,
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00:00Z"
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/notification-templates/41/bindings?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/notification-templates/41/bindings?page=1",
"prev": null,
"next": null
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 1,
"path": "https://betawms.ffcdek.ru/api/v2/notification-templates/41/bindings",
"per_page": 50,
"to": 1,
"total": 1
}
}
401 Требуется аутентификация
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 | createNotificationTemplateBinding |
|---|---|
| Раздел | Шаблоны уведомлений |
| Безопасность | bearerAuth |
Binds one visible client warehouse to the template. A warehouse can be bound only once per template.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/notification-templates/41/bindings" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}" \
--header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
--header "Content-Type: application/json" \
--data-binary @request.jsonПараметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
id |
path | да | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
CreateNotificationTemplateBindingRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CreateNotificationTemplateBindingPayload |
|
|||
data.warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.recipients |
нет | array<string:email> |
maxItems: 100 | |
||
data.recipients[] |
нет | string:email |
"client@example.com" |
|||
data.internal_recipient_mode |
нет | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.internal_user_ids |
нет | array<integer:int64> |
maxItems: 1000 | |
||
data.internal_user_ids[] |
нет | integer:int64 |
min: 1 | 15 |
||
data.status_id |
нет | enum:int64 |
enum: 0, 1 | 1 |
Примеры запроса
Пример
{
"data": {
"warehouse_id": 42,
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1
}
}
Ответы
201 Created.
Created.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
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.template_id |
да | integer:int64 |
min: 1 | 41 |
||
data.domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data.warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.warehouse |
нет | object | null |
|
|||
data.warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
да | string |
"Client Warehouse Sofia" |
|||
data.recipients |
да | array<string:email> |
maxItems: 100 | |
||
data.recipients[] |
нет | string:email |
"client@example.com" |
|||
data.internal_recipient_mode |
да | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.internal_user_ids |
да | array<integer:int64> |
maxItems: 1000 | |
||
data.internal_user_ids[] |
нет | integer:int64 |
min: 1 | 15 |
||
data.status_id |
да | enum:int64 |
enum: 0, 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": 7,
"template_id": 41,
"domain_id": 3,
"warehouse_id": 42,
"warehouse": {
"id": 42,
"name": "Client Warehouse Sofia"
},
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1,
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00:00Z"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
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 | getNotificationTemplateBinding |
|---|---|
| Раздел | Шаблоны уведомлений |
| Безопасность | bearerAuth |
Returns one warehouse and recipient binding of a visible template.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/notification-templates/41/bindings/7" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
id |
path | да | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
bindingId |
path | да | integer:int64 |
min: 1 | Notification template binding ID. | 7 |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
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.template_id |
да | integer:int64 |
min: 1 | 41 |
||
data.domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data.warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.warehouse |
нет | object | null |
|
|||
data.warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
да | string |
"Client Warehouse Sofia" |
|||
data.recipients |
да | array<string:email> |
maxItems: 100 | |
||
data.recipients[] |
нет | string:email |
"client@example.com" |
|||
data.internal_recipient_mode |
да | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.internal_user_ids |
да | array<integer:int64> |
maxItems: 1000 | |
||
data.internal_user_ids[] |
нет | integer:int64 |
min: 1 | 15 |
||
data.status_id |
да | enum:int64 |
enum: 0, 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": 7,
"template_id": 41,
"domain_id": 3,
"warehouse_id": 42,
"warehouse": {
"id": 42,
"name": "Client Warehouse Sofia"
},
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1,
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00:00Z"
},
"meta": {
"api_version": "v2"
}
}
401 Требуется аутентификация
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 | replaceNotificationTemplateBinding |
|---|---|
| Раздел | Шаблоны уведомлений |
| Безопасность | bearerAuth |
Updates the supplied warehouse-binding fields. Omitted fields remain unchanged.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/notification-templates/41/bindings/7" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}" \
--header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
--header "Content-Type: application/json" \
--data-binary @request.jsonПараметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
id |
path | да | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
bindingId |
path | да | integer:int64 |
min: 1 | Notification template binding ID. | 7 |
||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
UpdateNotificationTemplateBindingRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | UpdateNotificationTemplateBindingPayload |
|
|||
data.warehouse_id |
нет | integer:int64 |
min: 1 | 42 |
||
data.recipients |
нет | array<string:email> |
maxItems: 100 | |
||
data.recipients[] |
нет | string:email |
"client@example.com" |
|||
data.internal_recipient_mode |
нет | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.internal_user_ids |
нет | array<integer:int64> |
maxItems: 1000 | |
||
data.internal_user_ids[] |
нет | integer:int64 |
min: 1 | 15 |
||
data.status_id |
нет | enum:int64 |
enum: 0, 1 | 1 |
Примеры запроса
Пример
{
"data": {
"warehouse_id": 42,
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
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.template_id |
да | integer:int64 |
min: 1 | 41 |
||
data.domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data.warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.warehouse |
нет | object | null |
|
|||
data.warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
да | string |
"Client Warehouse Sofia" |
|||
data.recipients |
да | array<string:email> |
maxItems: 100 | |
||
data.recipients[] |
нет | string:email |
"client@example.com" |
|||
data.internal_recipient_mode |
да | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.internal_user_ids |
да | array<integer:int64> |
maxItems: 1000 | |
||
data.internal_user_ids[] |
нет | integer:int64 |
min: 1 | 15 |
||
data.status_id |
да | enum:int64 |
enum: 0, 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": 7,
"template_id": 41,
"domain_id": 3,
"warehouse_id": 42,
"warehouse": {
"id": 42,
"name": "Client Warehouse Sofia"
},
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1,
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00:00Z"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
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 | patchNotificationTemplateBinding |
|---|---|
| Раздел | Шаблоны уведомлений |
| Безопасность | bearerAuth |
Updates the supplied warehouse-binding fields. Omitted fields remain unchanged.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request PATCH "${NWMS_BASE_URL}/api/v2/notification-templates/41/bindings/7" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}" \
--header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
--header "Content-Type: application/json" \
--data-binary @request.jsonПараметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
id |
path | да | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
bindingId |
path | да | integer:int64 |
min: 1 | Notification template binding ID. | 7 |
||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
UpdateNotificationTemplateBindingRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | UpdateNotificationTemplateBindingPayload |
|
|||
data.warehouse_id |
нет | integer:int64 |
min: 1 | 42 |
||
data.recipients |
нет | array<string:email> |
maxItems: 100 | |
||
data.recipients[] |
нет | string:email |
"client@example.com" |
|||
data.internal_recipient_mode |
нет | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.internal_user_ids |
нет | array<integer:int64> |
maxItems: 1000 | |
||
data.internal_user_ids[] |
нет | integer:int64 |
min: 1 | 15 |
||
data.status_id |
нет | enum:int64 |
enum: 0, 1 | 1 |
Примеры запроса
Пример
{
"data": {
"warehouse_id": 42,
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
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.template_id |
да | integer:int64 |
min: 1 | 41 |
||
data.domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data.warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.warehouse |
нет | object | null |
|
|||
data.warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
да | string |
"Client Warehouse Sofia" |
|||
data.recipients |
да | array<string:email> |
maxItems: 100 | |
||
data.recipients[] |
нет | string:email |
"client@example.com" |
|||
data.internal_recipient_mode |
да | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.internal_user_ids |
да | array<integer:int64> |
maxItems: 1000 | |
||
data.internal_user_ids[] |
нет | integer:int64 |
min: 1 | 15 |
||
data.status_id |
да | enum:int64 |
enum: 0, 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": 7,
"template_id": 41,
"domain_id": 3,
"warehouse_id": 42,
"warehouse": {
"id": 42,
"name": "Client Warehouse Sofia"
},
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1,
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00:00Z"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
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 | deleteNotificationTemplateBinding |
|---|---|
| Раздел | Шаблоны уведомлений |
| Безопасность | bearerAuth |
Removes one warehouse and recipient binding from the template.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request DELETE "${NWMS_BASE_URL}/api/v2/notification-templates/41/bindings/7" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}" \
--header "Idempotency-Key: ${NWMS_REQUEST_KEY}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
id |
path | да | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
bindingId |
path | да | integer:int64 |
min: 1 | Notification template binding ID. | 7 |
||
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 |
Примеры ответа
success
{
"data": null,
"meta": {
"api_version": "v2",
"deleted": true
}
}
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"
}