Notification Templates
Every operation below is generated from the OpenAPI v2 specification and includes parameters, request fields, response fields, errors, and examples.
How notifications work
A template defines channel, document type, target status, delay, condition, content and print attachment. A binding links it to a client warehouse and recipients. These are separate resources: creating a template neither creates a binding nor immediately sends a message. An operational setup needs an active template, active binding and matching document/event. Delivery configuration and background processing are separate from CRUD success.
Permissions and data scope
| view | admin, warehouse_manager, warehouse_worker, clients |
|---|---|
| create / update | admin, warehouse_manager, clients |
| delete template | admin, warehouse_manager |
| Bindings | Creating, editing and deleting bindings requires notifications update permission. |
| Access V2 | Listed roles are fallback rules; explicit Access V2 decisions take precedence. Templates are restricted to the user domain. domain_id, owner_user_id and event are server-assigned. |
Two different statuses
| document_status_id | The acceptance/order status that triggers a notification. It must exist for the selected document_type. Acceptance status 4 means closed. |
|---|---|
| status_id | Template or binding enablement: 0 disabled, 1 enabled. Creation defaults to 1. |
| event | document.status_changed |
| delay_hours | 0–8760 hours, default 0. Delay is not a guarantee of exact delivery time. |
| start_document_id | Optional lower document ID boundary, integer ≥1; null removes it. |
| attachment_print_template_id | A current-domain print template matching order/acceptance. Recheck it when changing document type; null clears the attachment. |
| conditions.acceptance_has_discrepancy | Applies only to closed acceptances (document_type=acceptance, document_status_id=4): true for discrepancies, false for none. {} or null clears conditions. Unknown or inapplicable keys are normalized away; inspect returned conditions. |
Workflow: acceptance closure email
- Create the template using POST /api/v2/notification-templates and the body below. Save data.id from the 201 response.
{
"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
}
}- Call POST /api/v2/notification-templates/{id}/bindings. Replace warehouse_id with an accessible client warehouse (type 2) and email with your intended recipient.
{
"data": {
"warehouse_id": 42,
"recipients": [
"warehouse@example.com"
],
"status_id": 1
}
}- Read GET /api/v2/notification-templates/{id}; verify both status_id values, conditions, bindings_count and bindings. Stored HTML may differ from submitted HTML because it is sanitized.
- Verify matching document processing and actual delivery using notification monitoring. A 201 response confirms settings were saved, not email delivery.
Recipients and internal messages
| recipients | Up to 100 email addresses, each up to 255 characters; email templates require at least one. Addresses are lowercased and deduplicated. |
|---|---|
| warehouse_users | Recipients are resolved from warehouse users. |
| domain_users | Recipients are resolved from domain users. |
| explicit | Internal templates require nonempty internal_user_ids in explicit mode: up to 1000 IDs from the current domain. A foreign user ID produces 422. |
| warehouse_id | A warehouse can be bound once per template. Another template may bind the same warehouse. bindingId is always resolved within its parent template. |
{
"data": {
"warehouse_id": 42,
"internal_recipient_mode": "explicit",
"internal_user_ids": [
15,
16
],
"status_id": 1
}
}Use this binding with a channel=internal template. When changing an existing template channel, inspect and update its recipients separately; template PATCH does not automatically reconfigure bindings.
Partial updates, disabling and deletion
PUT and PATCH preserve omitted fields. To disable temporarily, send {"data":{"status_id":0}} to the template or binding. Clear user arrays with [] and nullable fields with null. Template DELETE transactionally removes the template and bindings while retaining message history. Binding DELETE leaves its parent intact.
{
"data": null,
"meta": {
"api_version": "v2",
"deleted": true
}
}Acceptance placeholders
{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} | Дата договора |
Order placeholders
{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} | Дата договора |
Common 422 causes
Status belongs to another document type; warehouse is inaccessible or not client-type; duplicate warehouse binding; empty email recipients; empty explicit internal users; foreign-domain users; wrong-domain/module print template; name (150), subject (255), delay (8760) or array limits exceeded. Inspect errors, correct the fields and refetch the saved resource.
Notification Templates
List notification templates
| operationId | listNotificationTemplates |
|---|---|
| Tag | Notification Templates |
| Security | bearerAuth |
Returns a tenant-scoped, paginated list of document-status notification templates.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/notification-templates" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 250 |
Number of 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 | no | 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 | no | 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 | no | integer:int64 |
min: 0 | Exact template ID. | 41 |
||
filter[name] |
query | no | string |
Case-insensitive partial template name. | "Acceptance closed" |
|||
filter[channel] |
query | no | enum |
enum: email, internal | Exact delivery channel. | "email" |
||
filter[document_type] |
query | no | enum |
enum: acceptance, order | Exact document type. | "acceptance" |
||
filter[document_status_id] |
query | no | integer:int64 |
min: 0 | Exact target document status ID. | 4 |
||
filter[status_id] |
query | no | integer:int64 |
min: 0 | Exact template status: 0 or 1. | 1 |
||
filter[owner_user_id] |
query | no | integer:int64 |
min: 0 | Exact owner user ID. | 15 |
||
created_at_from |
query | no | 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 | no | 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 | no | 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 | no | 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" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<NotificationTemplate> |
|
|||
data[] |
no | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data[].owner_user_id |
yes | integer:int64 | null |
min: 1 | 15 |
||
data[].name |
yes | string |
"Acceptance closed" |
|||
data[].event |
yes | enum |
enum: document.status_changed | "document.status_changed" |
||
data[].channel |
yes | enum |
enum: email, internal | "email" |
||
data[].document_type |
yes | enum |
enum: acceptance, order | "acceptance" |
||
data[].document_status_id |
yes | integer:int64 |
min: 0 | 4 |
||
data[].delay_hours |
yes | integer:int64 |
min: 0 max: 8760 |
0 |
||
data[].start_document_id |
yes | integer:int64 | null |
min: 1 | 1000 |
||
data[].conditions |
yes | object |
{"acceptance_has_discrepancy":true} |
|||
data[].subject |
yes | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data[].body_html |
yes | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data[].body_text |
yes | string | null |
"Document \#{doc_id} is closed." |
|||
data[].attachment_print_template_id |
yes | integer:int64 | null |
min: 1 | 12 |
||
data[].status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
data[].bindings_count |
yes | integer:int64 |
min: 0 | 1 |
||
data[].bindings |
no | array<NotificationTemplateBinding> |
|
|||
data[].bindings[] |
no | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data[].bindings[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].bindings[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].bindings[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].bindings[].template_id |
yes | integer:int64 |
min: 1 | 41 |
||
data[].bindings[].domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data[].bindings[].warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data[].bindings[].warehouse |
no | object | null |
|
|||
data[].bindings[].warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data[].bindings[].warehouse.name |
yes | string |
"Client Warehouse Sofia" |
|||
data[].bindings[].recipients |
yes | array<string:email> |
maxItems: 100 | |
||
data[].bindings[].recipients[] |
no | string:email |
"client@example.com" |
|||
data[].bindings[].internal_recipient_mode |
yes | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data[].bindings[].internal_user_ids |
yes | array<integer:int64> |
maxItems: 1000 | |
||
data[].bindings[].internal_user_ids[] |
no | integer:int64 |
min: 1 | 15 |
||
data[].bindings[].status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
success
{
"data": [
{
"id": 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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Create notification template
| operationId | createNotificationTemplate |
|---|---|
| Tag | Notification Templates |
| Security | bearerAuth |
Creates a notification template in the authenticated user domain. Domain, owner and event are assigned server-side.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CreateNotificationTemplateRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CreateNotificationTemplatePayload |
|
|||
data.name |
yes | string |
maxLength: 150 | "Acceptance closed" |
||
data.channel |
yes | enum |
enum: email, internal | "email" |
||
data.document_type |
yes | enum |
enum: acceptance, order | "acceptance" |
||
data.document_status_id |
yes | integer:int64 |
min: 0 | 4 |
||
data.delay_hours |
no | integer:int64 | null |
min: 0 max: 8760 |
0 |
||
data.start_document_id |
no | integer:int64 | null |
min: 1 | 1000 |
||
data.conditions |
no | object |
{"acceptance_has_discrepancy":true} |
|||
data.subject |
no | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data.body_html |
no | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data.body_text |
no | string | null |
"Document \#{doc_id} is closed." |
|||
data.attachment_print_template_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.status_id |
no | enum:int64 |
enum: 0, 1 | 1 |
Request examples
Example
{
"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
}
}
Responses
201 Created.
Created.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data.owner_user_id |
yes | integer:int64 | null |
min: 1 | 15 |
||
data.name |
yes | string |
"Acceptance closed" |
|||
data.event |
yes | enum |
enum: document.status_changed | "document.status_changed" |
||
data.channel |
yes | enum |
enum: email, internal | "email" |
||
data.document_type |
yes | enum |
enum: acceptance, order | "acceptance" |
||
data.document_status_id |
yes | integer:int64 |
min: 0 | 4 |
||
data.delay_hours |
yes | integer:int64 |
min: 0 max: 8760 |
0 |
||
data.start_document_id |
yes | integer:int64 | null |
min: 1 | 1000 |
||
data.conditions |
yes | object |
{"acceptance_has_discrepancy":true} |
|||
data.subject |
yes | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data.body_html |
yes | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data.body_text |
yes | string | null |
"Document \#{doc_id} is closed." |
|||
data.attachment_print_template_id |
yes | integer:int64 | null |
min: 1 | 12 |
||
data.status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
data.bindings_count |
yes | integer:int64 |
min: 0 | 1 |
||
data.bindings |
no | array<NotificationTemplateBinding> |
|
|||
data.bindings[] |
no | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data.bindings[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.bindings[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].template_id |
yes | integer:int64 |
min: 1 | 41 |
||
data.bindings[].domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data.bindings[].warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse |
no | object | null |
|
|||
data.bindings[].warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse.name |
yes | string |
"Client Warehouse Sofia" |
|||
data.bindings[].recipients |
yes | array<string:email> |
maxItems: 100 | |
||
data.bindings[].recipients[] |
no | string:email |
"client@example.com" |
|||
data.bindings[].internal_recipient_mode |
yes | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.bindings[].internal_user_ids |
yes | array<integer:int64> |
maxItems: 1000 | |
||
data.bindings[].internal_user_ids[] |
no | integer:int64 |
min: 1 | 15 |
||
data.bindings[].status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
success
{
"data": {
"id": 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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Get notification template
| operationId | getNotificationTemplate |
|---|---|
| Tag | Notification Templates |
| Security | bearerAuth |
Returns one visible template with its current warehouse bindings.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/notification-templates/41" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Notification template ID. | 41 |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data.owner_user_id |
yes | integer:int64 | null |
min: 1 | 15 |
||
data.name |
yes | string |
"Acceptance closed" |
|||
data.event |
yes | enum |
enum: document.status_changed | "document.status_changed" |
||
data.channel |
yes | enum |
enum: email, internal | "email" |
||
data.document_type |
yes | enum |
enum: acceptance, order | "acceptance" |
||
data.document_status_id |
yes | integer:int64 |
min: 0 | 4 |
||
data.delay_hours |
yes | integer:int64 |
min: 0 max: 8760 |
0 |
||
data.start_document_id |
yes | integer:int64 | null |
min: 1 | 1000 |
||
data.conditions |
yes | object |
{"acceptance_has_discrepancy":true} |
|||
data.subject |
yes | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data.body_html |
yes | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data.body_text |
yes | string | null |
"Document \#{doc_id} is closed." |
|||
data.attachment_print_template_id |
yes | integer:int64 | null |
min: 1 | 12 |
||
data.status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
data.bindings_count |
yes | integer:int64 |
min: 0 | 1 |
||
data.bindings |
no | array<NotificationTemplateBinding> |
|
|||
data.bindings[] |
no | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data.bindings[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.bindings[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].template_id |
yes | integer:int64 |
min: 1 | 41 |
||
data.bindings[].domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data.bindings[].warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse |
no | object | null |
|
|||
data.bindings[].warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse.name |
yes | string |
"Client Warehouse Sofia" |
|||
data.bindings[].recipients |
yes | array<string:email> |
maxItems: 100 | |
||
data.bindings[].recipients[] |
no | string:email |
"client@example.com" |
|||
data.bindings[].internal_recipient_mode |
yes | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.bindings[].internal_user_ids |
yes | array<integer:int64> |
maxItems: 1000 | |
||
data.bindings[].internal_user_ids[] |
no | integer:int64 |
min: 1 | 15 |
||
data.bindings[].status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
success
{
"data": {
"id": 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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update notification template
| operationId | replaceNotificationTemplate |
|---|---|
| Tag | Notification Templates |
| Security | bearerAuth |
Updates the supplied template fields. Omitted fields remain unchanged.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
UpdateNotificationTemplateRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | UpdateNotificationTemplatePayload |
|
|||
data.name |
no | string |
maxLength: 150 | "Acceptance closed" |
||
data.channel |
no | enum |
enum: email, internal | "email" |
||
data.document_type |
no | enum |
enum: acceptance, order | "acceptance" |
||
data.document_status_id |
no | integer:int64 |
min: 0 | 4 |
||
data.delay_hours |
no | integer:int64 | null |
min: 0 max: 8760 |
0 |
||
data.start_document_id |
no | integer:int64 | null |
min: 1 | 1000 |
||
data.conditions |
no | object |
{"acceptance_has_discrepancy":true} |
|||
data.subject |
no | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data.body_html |
no | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data.body_text |
no | string | null |
"Document \#{doc_id} is closed." |
|||
data.attachment_print_template_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.status_id |
no | enum:int64 |
enum: 0, 1 | 1 |
Request examples
Example
{
"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
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data.owner_user_id |
yes | integer:int64 | null |
min: 1 | 15 |
||
data.name |
yes | string |
"Acceptance closed" |
|||
data.event |
yes | enum |
enum: document.status_changed | "document.status_changed" |
||
data.channel |
yes | enum |
enum: email, internal | "email" |
||
data.document_type |
yes | enum |
enum: acceptance, order | "acceptance" |
||
data.document_status_id |
yes | integer:int64 |
min: 0 | 4 |
||
data.delay_hours |
yes | integer:int64 |
min: 0 max: 8760 |
0 |
||
data.start_document_id |
yes | integer:int64 | null |
min: 1 | 1000 |
||
data.conditions |
yes | object |
{"acceptance_has_discrepancy":true} |
|||
data.subject |
yes | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data.body_html |
yes | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data.body_text |
yes | string | null |
"Document \#{doc_id} is closed." |
|||
data.attachment_print_template_id |
yes | integer:int64 | null |
min: 1 | 12 |
||
data.status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
data.bindings_count |
yes | integer:int64 |
min: 0 | 1 |
||
data.bindings |
no | array<NotificationTemplateBinding> |
|
|||
data.bindings[] |
no | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data.bindings[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.bindings[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].template_id |
yes | integer:int64 |
min: 1 | 41 |
||
data.bindings[].domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data.bindings[].warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse |
no | object | null |
|
|||
data.bindings[].warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse.name |
yes | string |
"Client Warehouse Sofia" |
|||
data.bindings[].recipients |
yes | array<string:email> |
maxItems: 100 | |
||
data.bindings[].recipients[] |
no | string:email |
"client@example.com" |
|||
data.bindings[].internal_recipient_mode |
yes | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.bindings[].internal_user_ids |
yes | array<integer:int64> |
maxItems: 1000 | |
||
data.bindings[].internal_user_ids[] |
no | integer:int64 |
min: 1 | 15 |
||
data.bindings[].status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
success
{
"data": {
"id": 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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update notification template
| operationId | patchNotificationTemplate |
|---|---|
| Tag | Notification Templates |
| Security | bearerAuth |
Updates the supplied template fields. Omitted fields remain unchanged.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request PATCH "${NWMS_BASE_URL}/api/v2/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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
UpdateNotificationTemplateRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | UpdateNotificationTemplatePayload |
|
|||
data.name |
no | string |
maxLength: 150 | "Acceptance closed" |
||
data.channel |
no | enum |
enum: email, internal | "email" |
||
data.document_type |
no | enum |
enum: acceptance, order | "acceptance" |
||
data.document_status_id |
no | integer:int64 |
min: 0 | 4 |
||
data.delay_hours |
no | integer:int64 | null |
min: 0 max: 8760 |
0 |
||
data.start_document_id |
no | integer:int64 | null |
min: 1 | 1000 |
||
data.conditions |
no | object |
{"acceptance_has_discrepancy":true} |
|||
data.subject |
no | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data.body_html |
no | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data.body_text |
no | string | null |
"Document \#{doc_id} is closed." |
|||
data.attachment_print_template_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.status_id |
no | enum:int64 |
enum: 0, 1 | 1 |
Request examples
Example
{
"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
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data.owner_user_id |
yes | integer:int64 | null |
min: 1 | 15 |
||
data.name |
yes | string |
"Acceptance closed" |
|||
data.event |
yes | enum |
enum: document.status_changed | "document.status_changed" |
||
data.channel |
yes | enum |
enum: email, internal | "email" |
||
data.document_type |
yes | enum |
enum: acceptance, order | "acceptance" |
||
data.document_status_id |
yes | integer:int64 |
min: 0 | 4 |
||
data.delay_hours |
yes | integer:int64 |
min: 0 max: 8760 |
0 |
||
data.start_document_id |
yes | integer:int64 | null |
min: 1 | 1000 |
||
data.conditions |
yes | object |
{"acceptance_has_discrepancy":true} |
|||
data.subject |
yes | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data.body_html |
yes | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data.body_text |
yes | string | null |
"Document \#{doc_id} is closed." |
|||
data.attachment_print_template_id |
yes | integer:int64 | null |
min: 1 | 12 |
||
data.status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
data.bindings_count |
yes | integer:int64 |
min: 0 | 1 |
||
data.bindings |
no | array<NotificationTemplateBinding> |
|
|||
data.bindings[] |
no | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data.bindings[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.bindings[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].template_id |
yes | integer:int64 |
min: 1 | 41 |
||
data.bindings[].domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data.bindings[].warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse |
no | object | null |
|
|||
data.bindings[].warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse.name |
yes | string |
"Client Warehouse Sofia" |
|||
data.bindings[].recipients |
yes | array<string:email> |
maxItems: 100 | |
||
data.bindings[].recipients[] |
no | string:email |
"client@example.com" |
|||
data.bindings[].internal_recipient_mode |
yes | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.bindings[].internal_user_ids |
yes | array<integer:int64> |
maxItems: 1000 | |
||
data.bindings[].internal_user_ids[] |
no | integer:int64 |
min: 1 | 15 |
||
data.bindings[].status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
success
{
"data": {
"id": 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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Delete notification template
| operationId | deleteNotificationTemplate |
|---|---|
| Tag | Notification Templates |
| Security | bearerAuth |
Deletes the template and its warehouse bindings in one transaction. Existing notification-message history is preserved.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request DELETE "${NWMS_BASE_URL}/api/v2/notification-templates/41" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}" \
--header "Idempotency-Key: ${NWMS_REQUEST_KEY}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object | null |
|
|||
meta |
yes | object |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
yes | boolean |
true |
Response examples
success
{
"data": null,
"meta": {
"api_version": "v2",
"deleted": true
}
}
400 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
List notification template bindings
| operationId | listNotificationTemplateBindings |
|---|---|
| Tag | Notification Templates |
| Security | bearerAuth |
Returns the paginated warehouse and recipient bindings of one visible template.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/notification-templates/41/bindings" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 250 |
Number of 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 | no | 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 | no | integer:int64 |
min: 0 | Exact binding ID. | 7 |
||
filter[warehouse_id] |
query | no | integer:int64 |
min: 0 | Exact warehouse ID. | 42 |
||
filter[status_id] |
query | no | integer:int64 |
min: 0 | Exact binding status: 0 or 1. | 1 |
||
filter[internal_recipient_mode] |
query | no | enum |
enum: warehouse_users, domain_users, explicit | Exact internal recipient mode. | "warehouse_users" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<NotificationTemplateBinding> |
|
|||
data[] |
no | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].template_id |
yes | integer:int64 |
min: 1 | 41 |
||
data[].domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data[].warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data[].warehouse |
no | object | null |
|
|||
data[].warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data[].warehouse.name |
yes | string |
"Client Warehouse Sofia" |
|||
data[].recipients |
yes | array<string:email> |
maxItems: 100 | |
||
data[].recipients[] |
no | string:email |
"client@example.com" |
|||
data[].internal_recipient_mode |
yes | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data[].internal_user_ids |
yes | array<integer:int64> |
maxItems: 1000 | |
||
data[].internal_user_ids[] |
no | integer:int64 |
min: 1 | 15 |
||
data[].status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
success
{
"data": [
{
"id": 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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Create notification template binding
| operationId | createNotificationTemplateBinding |
|---|---|
| Tag | Notification Templates |
| Security | bearerAuth |
Binds one visible client warehouse to the template. A warehouse can be bound only once per template.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CreateNotificationTemplateBindingRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CreateNotificationTemplateBindingPayload |
|
|||
data.warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.recipients |
no | array<string:email> |
maxItems: 100 | |
||
data.recipients[] |
no | string:email |
"client@example.com" |
|||
data.internal_recipient_mode |
no | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.internal_user_ids |
no | array<integer:int64> |
maxItems: 1000 | |
||
data.internal_user_ids[] |
no | integer:int64 |
min: 1 | 15 |
||
data.status_id |
no | enum:int64 |
enum: 0, 1 | 1 |
Request examples
Example
{
"data": {
"warehouse_id": 42,
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1
}
}
Responses
201 Created.
Created.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.template_id |
yes | integer:int64 |
min: 1 | 41 |
||
data.domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data.warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.warehouse |
no | object | null |
|
|||
data.warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
yes | string |
"Client Warehouse Sofia" |
|||
data.recipients |
yes | array<string:email> |
maxItems: 100 | |
||
data.recipients[] |
no | string:email |
"client@example.com" |
|||
data.internal_recipient_mode |
yes | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.internal_user_ids |
yes | array<integer:int64> |
maxItems: 1000 | |
||
data.internal_user_ids[] |
no | integer:int64 |
min: 1 | 15 |
||
data.status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
success
{
"data": {
"id": 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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Get notification template binding
| operationId | getNotificationTemplateBinding |
|---|---|
| Tag | Notification Templates |
| Security | bearerAuth |
Returns one warehouse and recipient binding of a visible template.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/notification-templates/41/bindings/7" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
bindingId |
path | yes | integer:int64 |
min: 1 | Notification template binding ID. | 7 |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.template_id |
yes | integer:int64 |
min: 1 | 41 |
||
data.domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data.warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.warehouse |
no | object | null |
|
|||
data.warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
yes | string |
"Client Warehouse Sofia" |
|||
data.recipients |
yes | array<string:email> |
maxItems: 100 | |
||
data.recipients[] |
no | string:email |
"client@example.com" |
|||
data.internal_recipient_mode |
yes | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.internal_user_ids |
yes | array<integer:int64> |
maxItems: 1000 | |
||
data.internal_user_ids[] |
no | integer:int64 |
min: 1 | 15 |
||
data.status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
success
{
"data": {
"id": 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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update notification template binding
| operationId | replaceNotificationTemplateBinding |
|---|---|
| Tag | Notification Templates |
| Security | bearerAuth |
Updates the supplied warehouse-binding fields. Omitted fields remain unchanged.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
bindingId |
path | yes | integer:int64 |
min: 1 | Notification template binding ID. | 7 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
UpdateNotificationTemplateBindingRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | UpdateNotificationTemplateBindingPayload |
|
|||
data.warehouse_id |
no | integer:int64 |
min: 1 | 42 |
||
data.recipients |
no | array<string:email> |
maxItems: 100 | |
||
data.recipients[] |
no | string:email |
"client@example.com" |
|||
data.internal_recipient_mode |
no | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.internal_user_ids |
no | array<integer:int64> |
maxItems: 1000 | |
||
data.internal_user_ids[] |
no | integer:int64 |
min: 1 | 15 |
||
data.status_id |
no | enum:int64 |
enum: 0, 1 | 1 |
Request examples
Example
{
"data": {
"warehouse_id": 42,
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.template_id |
yes | integer:int64 |
min: 1 | 41 |
||
data.domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data.warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.warehouse |
no | object | null |
|
|||
data.warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
yes | string |
"Client Warehouse Sofia" |
|||
data.recipients |
yes | array<string:email> |
maxItems: 100 | |
||
data.recipients[] |
no | string:email |
"client@example.com" |
|||
data.internal_recipient_mode |
yes | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.internal_user_ids |
yes | array<integer:int64> |
maxItems: 1000 | |
||
data.internal_user_ids[] |
no | integer:int64 |
min: 1 | 15 |
||
data.status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
success
{
"data": {
"id": 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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update notification template binding
| operationId | patchNotificationTemplateBinding |
|---|---|
| Tag | Notification Templates |
| Security | bearerAuth |
Updates the supplied warehouse-binding fields. Omitted fields remain unchanged.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request PATCH "${NWMS_BASE_URL}/api/v2/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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
bindingId |
path | yes | integer:int64 |
min: 1 | Notification template binding ID. | 7 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
UpdateNotificationTemplateBindingRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | UpdateNotificationTemplateBindingPayload |
|
|||
data.warehouse_id |
no | integer:int64 |
min: 1 | 42 |
||
data.recipients |
no | array<string:email> |
maxItems: 100 | |
||
data.recipients[] |
no | string:email |
"client@example.com" |
|||
data.internal_recipient_mode |
no | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.internal_user_ids |
no | array<integer:int64> |
maxItems: 1000 | |
||
data.internal_user_ids[] |
no | integer:int64 |
min: 1 | 15 |
||
data.status_id |
no | enum:int64 |
enum: 0, 1 | 1 |
Request examples
Example
{
"data": {
"warehouse_id": 42,
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.template_id |
yes | integer:int64 |
min: 1 | 41 |
||
data.domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data.warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.warehouse |
no | object | null |
|
|||
data.warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
yes | string |
"Client Warehouse Sofia" |
|||
data.recipients |
yes | array<string:email> |
maxItems: 100 | |
||
data.recipients[] |
no | string:email |
"client@example.com" |
|||
data.internal_recipient_mode |
yes | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.internal_user_ids |
yes | array<integer:int64> |
maxItems: 1000 | |
||
data.internal_user_ids[] |
no | integer:int64 |
min: 1 | 15 |
||
data.status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
success
{
"data": {
"id": 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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Delete notification template binding
| operationId | deleteNotificationTemplateBinding |
|---|---|
| Tag | Notification Templates |
| Security | bearerAuth |
Removes one warehouse and recipient binding from the template.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request DELETE "${NWMS_BASE_URL}/api/v2/notification-templates/41/bindings/7" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}" \
--header "Idempotency-Key: ${NWMS_REQUEST_KEY}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
bindingId |
path | yes | integer:int64 |
min: 1 | Notification template binding ID. | 7 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object | null |
|
|||
meta |
yes | object |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
yes | boolean |
true |
Response examples
success
{
"data": null,
"meta": {
"api_version": "v2",
"deleted": true
}
}
400 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}