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

viewadmin, warehouse_manager, warehouse_worker, clients
create / updateadmin, warehouse_manager, clients
delete templateadmin, warehouse_manager
BindingsCreating, editing and deleting bindings requires notifications update permission.
Access V2Listed 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_idThe acceptance/order status that triggers a notification. It must exist for the selected document_type. Acceptance status 4 means closed.
status_idTemplate or binding enablement: 0 disabled, 1 enabled. Creation defaults to 1.
eventdocument.status_changed
delay_hours0–8760 hours, default 0. Delay is not a guarantee of exact delivery time.
start_document_idOptional lower document ID boundary, integer ≥1; null removes it.
attachment_print_template_idA current-domain print template matching order/acceptance. Recheck it when changing document type; null clears the attachment.
conditions.acceptance_has_discrepancyApplies 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

  1. 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
  }
}
  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
  }
}
  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.
  2. Verify matching document processing and actual delivery using notification monitoring. A 201 response confirms settings were saved, not email delivery.

Recipients and internal messages

recipientsUp to 100 email addresses, each up to 255 characters; email templates require at least one. Addresses are lowercased and deduplicated.
warehouse_usersRecipients are resolved from warehouse users.
domain_usersRecipients are resolved from domain users.
explicitInternal templates require nonempty internal_user_ids in explicit mode: up to 1000 IDs from the current domain. A foreign user ID produces 422.
warehouse_idA 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

GET /api/v2/notification-templates

List notification templates

operationIdlistNotificationTemplates
TagNotification Templates
SecuritybearerAuth

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"
}
POST /api/v2/notification-templates

Create notification template

operationIdcreateNotificationTemplate
TagNotification Templates
SecuritybearerAuth

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.json

Parameters

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 /api/v2/notification-templates/{id}

Get notification template

operationIdgetNotificationTemplate
TagNotification Templates
SecuritybearerAuth

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"
}
PUT /api/v2/notification-templates/{id}

Update notification template

operationIdreplaceNotificationTemplate
TagNotification Templates
SecuritybearerAuth

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.json

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

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"
}
PATCH /api/v2/notification-templates/{id}

Update notification template

operationIdpatchNotificationTemplate
TagNotification Templates
SecuritybearerAuth

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.json

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

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 /api/v2/notification-templates/{id}

Delete notification template

operationIddeleteNotificationTemplate
TagNotification Templates
SecuritybearerAuth

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"
}
GET /api/v2/notification-templates/{id}/bindings

List notification template bindings

operationIdlistNotificationTemplateBindings
TagNotification Templates
SecuritybearerAuth

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"
}
POST /api/v2/notification-templates/{id}/bindings

Create notification template binding

operationIdcreateNotificationTemplateBinding
TagNotification Templates
SecuritybearerAuth

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.json

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

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 /api/v2/notification-templates/{id}/bindings/{bindingId}

Get notification template binding

operationIdgetNotificationTemplateBinding
TagNotification Templates
SecuritybearerAuth

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"
}
PUT /api/v2/notification-templates/{id}/bindings/{bindingId}

Update notification template binding

operationIdreplaceNotificationTemplateBinding
TagNotification Templates
SecuritybearerAuth

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.json

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

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"
}
PATCH /api/v2/notification-templates/{id}/bindings/{bindingId}

Update notification template binding

operationIdpatchNotificationTemplateBinding
TagNotification Templates
SecuritybearerAuth

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.json

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

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 /api/v2/notification-templates/{id}/bindings/{bindingId}

Delete notification template binding

operationIddeleteNotificationTemplateBinding
TagNotification Templates
SecuritybearerAuth

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