Шаблоны писем хранятся на сервере: их можно создавать, править, переносить между серверами и использовать при отправке. Серверный ключ работает только с шаблонами своего сервера — чужой шаблон для него не найден (код 1101); перенос между серверами доступен только ключу аккаунта.
Отправляет одно письмо по сохранённому шаблону. Шаблон должен принадлежать серверу ключа, иначе вернётся ошибка 1101. Остальное — как у отправки одного письма.
| Accept | обязательный application/json |
|---|---|
| Content-Type | обязательный application/json |
| X-Haskimail-Server-Token | обязательный Серверный API-ключ. Он есть в настройках сервера на вкладке «API-ключи». |
| TemplateId | integer |
ID шаблона. Нужен TemplateId или TemplateAlias. |
|---|---|---|
| TemplateAlias | string |
Название шаблона — вместо TemplateId. |
| TemplateModel | object |
Подстановки: ключ — фрагмент текста шаблона, значение — на что его заменить. Замена буквальная, поэтому разделители входят в ключ: |
| From | string | обязательный Адрес отправителя. Он должен быть на подтверждённом домене аккаунта. Имя отправителя указывается так: |
| To | string | обязательный Адреса получателей через запятую. Каждый получатель получает отдельное письмо со своим MessageID. |
| Cc | string |
Получатели копии через запятую. |
| Bcc | string |
Получатели скрытой копии через запятую. |
| Subject | string |
Тема письма. Если не указана, берётся тема шаблона. |
| Tag | string |
Тег письма. По нему фильтруют письма, открытия, клики и возвраты в API. |
| ReplyTo | string |
Адрес для ответа (заголовок Reply-To). |
| Headers | array |
Дополнительные заголовки письма: список объектов |
| TrackOpens | boolean |
Включить или выключить отслеживание открытий для этого письма. Без параметра действует настройка сервера. |
| TrackLinks | boolean |
Включить или выключить отслеживание кликов для этого письма. Без параметра действует настройка сервера. |
| Metadata | object |
Произвольные данные «ключ — значение», привязанные к письму. |
| Attachments | array |
Вложения: список объектов с полями |
| MessageStream | string |
ID канала, через который отправляется письмо, — из списка каналов. Канал должен принадлежать серверу ключа, не быть входящим и не находиться в архиве (иначе ошибка 1226). Если не указан, письмо уходит через транзакционный канал сервера по умолчанию; если исходящих каналов у сервера ещё нет, такой канал создаётся. Если активные исходящие каналы у сервера только массовые, вернётся ошибка 1226 — укажите канал явно. |
| To | string |
Получатели из запроса. |
|---|---|---|
| SubmittedAt | string |
Время приёма письма, |
| MessageID | string |
ID письма. Если получателей несколько, ID перечислены через запятую в том же порядке. По ID ищут письмо в API сообщений. |
| ErrorCode | integer |
0 — письмо принято в отправку. Иначе — код ошибки, HTTP-статус ответа при этом 422. |
| Message | string |
Описание результата. |
curl "https://api.haskimail.ru/email/withTemplate" \
-X POST \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Haskimail-Server-Token: server token" \
-d '{
"TemplateId": 4521,
"TemplateModel": {
"{{name}}": "Иван",
"{{order}}": "1042"
},
"From": "Магазин <shop@example.com>",
"To": "ivan@example.com",
"Tag": "orders",
"MessageStream": "2081"
}'
HTTP/1.1 200 OK
Content-Type: application/json
{
"To": "ivan@example.com",
"SubmittedAt": "2026-10-07 14:30:12",
"MessageID": "6f1c0b2d9e8a4f7b3c5d2e1a0b9c8d7e",
"ErrorCode": 0,
"Message": "OK"
}
Переносит все шаблоны одного сервера на другой. Шаблоны именно переезжают, а не копируются: на исходном сервере их не останется. С PerformChanges: false метод только показывает, какие шаблоны будут перенесены.
| Accept | обязательный application/json |
|---|---|
| Content-Type | обязательный application/json |
| X-Haskimail-Account-Token | обязательный API-ключ аккаунта. Он есть в настройках аккаунта на вкладке «API-ключи». |
| SourceServerID | integer | обязательный ID сервера, с которого переносятся шаблоны. |
|---|---|---|
| DestinationServerID | integer | обязательный ID сервера, на который переносятся шаблоны. |
| PerformChanges | boolean | обязательный
|
| TotalCount | integer |
Количество шаблонов исходного сервера. |
|---|---|---|
| Templates | array |
Шаблоны исходного сервера. |
| Templates[].TemplateId | integer |
ID шаблона. |
| Templates[].Name | string |
Название шаблона. |
curl "https://api.haskimail.ru/templates/push" \
-X PUT \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Haskimail-Account-Token: account token" \
-d '{
"SourceServerID": 11834,
"DestinationServerID": 11835,
"PerformChanges": true
}'
HTTP/1.1 200 OK
Content-Type: application/json
{
"TotalCount": 2,
"Templates": [
{
"TemplateId": 4521,
"Name": "Заказ оформлен"
},
{
"TemplateId": 4522,
"Name": "Восстановление пароля"
}
]
}
Возвращает шаблон по ID или по названию.
| Accept | обязательный application/json |
|---|---|
| X-Haskimail-Server-Token | обязательный Серверный API-ключ. Он есть в настройках сервера на вкладке «API-ключи». |
| templateIdOrAlias | обязательный ID шаблона или его название. |
|---|
| TemplateId | integer |
ID шаблона. |
|---|---|---|
| Name | string |
Название шаблона. |
| Subject | string |
Тема письма. |
| HtmlBody | string |
HTML-версия. |
| TextBody | string |
Текстовая версия. |
| AssociatedServerId | integer |
ID сервера, к которому относится шаблон. |
curl "https://api.haskimail.ru/templates/{templateIdOrAlias}" \
-X GET \
-H "Accept: application/json" \
-H "X-Haskimail-Server-Token: server token"
HTTP/1.1 200 OK
Content-Type: application/json
{
"TemplateId": 4521,
"Name": "Заказ оформлен",
"Subject": "Заказ №{{order}} оформлен",
"HtmlBody": "<html><body><p>Здравствуйте, {{name}}! Заказ №{{order}} оформлен.</p></body></html>",
"TextBody": "Здравствуйте, {{name}}! Заказ №{{order}} оформлен.",
"AssociatedServerId": 11834
}
Создаёт шаблон на указанном сервере.
| Accept | обязательный application/json |
|---|---|
| Content-Type | обязательный application/json |
| X-Haskimail-Server-Token | обязательный Серверный API-ключ. Он есть в настройках сервера на вкладке «API-ключи». |
| Name | string | обязательный Название шаблона. По нему шаблон можно выбрать вместо ID (TemplateAlias), поэтому лучше делать названия уникальными. |
|---|---|---|
| AssociatedServerId | integer |
ID сервера, на котором создаётся шаблон. С серверным ключом можно не указывать — шаблон создаётся на сервере ключа; другой сервер указать нельзя (код 510). С ключом аккаунта обязателен. |
| Subject | string |
Тема письма. |
| HtmlBody | string |
HTML-версия. |
| TextBody | string |
Текстовая версия. |
| TemplateId | integer |
ID нового шаблона. |
|---|---|---|
| Name | string |
Название шаблона. |
curl "https://api.haskimail.ru/templates" \
-X POST \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Haskimail-Server-Token: server token" \
-d '{
"Name": "Заказ оформлен",
"AssociatedServerId": 11834,
"Subject": "Заказ №{{order}} оформлен",
"HtmlBody": "<html><body><p>Здравствуйте, {{name}}! Заказ №{{order}} оформлен.</p></body></html>",
"TextBody": "Здравствуйте, {{name}}! Заказ №{{order}} оформлен."
}'
HTTP/1.1 200 OK
Content-Type: application/json
{
"TemplateId": 4521,
"Name": "Заказ оформлен"
}
Заменяет содержимое шаблона. Поля перезаписываются целиком: поле, которого нет в запросе, станет пустым, поэтому передавайте все четыре.
| Accept | обязательный application/json |
|---|---|
| Content-Type | обязательный application/json |
| X-Haskimail-Server-Token | обязательный Серверный API-ключ. Он есть в настройках сервера на вкладке «API-ключи». |
| templateIdOrAlias | обязательный ID шаблона или его название. |
|---|
| Name | string | обязательный Название шаблона. |
|---|---|---|
| Subject | string | обязательный Тема письма. |
| HtmlBody | string | обязательный HTML-версия. |
| TextBody | string | обязательный Текстовая версия. |
| TemplateId | integer |
ID шаблона. |
|---|---|---|
| Name | string |
Название шаблона. |
curl "https://api.haskimail.ru/templates/{templateIdOrAlias}" \
-X PUT \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Haskimail-Server-Token: server token" \
-d '{
"Name": "Заказ оформлен",
"Subject": "Заказ №{{order}} принят",
"HtmlBody": "<html><body><p>Здравствуйте, {{name}}! Заказ №{{order}} принят.</p></body></html>",
"TextBody": "Здравствуйте, {{name}}! Заказ №{{order}} принят."
}'
HTTP/1.1 200 OK
Content-Type: application/json
{
"TemplateId": 4521,
"Name": "Заказ оформлен"
}
Возвращает шаблоны сервера ключа; с ключом аккаунта — всех серверов.
| Accept | обязательный application/json |
|---|---|
| X-Haskimail-Server-Token | обязательный Серверный API-ключ. Он есть в настройках сервера на вкладке «API-ключи». |
| count |
Количество шаблонов в ответе. По умолчанию 500. |
|---|---|
| offset |
Сколько шаблонов пропустить. По умолчанию 0. |
| TotalCount | integer |
Общее количество шаблонов. |
|---|---|---|
| Templates | array |
Шаблоны. |
| Templates[].TemplateId | integer |
ID шаблона. |
| Templates[].Name | string |
Название шаблона. |
curl "https://api.haskimail.ru/templates?count=100&offset=0" \
-X GET \
-H "Accept: application/json" \
-H "X-Haskimail-Server-Token: server token"
HTTP/1.1 200 OK
Content-Type: application/json
{
"TotalCount": 2,
"Templates": [
{
"TemplateId": 4521,
"Name": "Заказ оформлен"
},
{
"TemplateId": 4522,
"Name": "Восстановление пароля"
}
]
}
Удаляет шаблон.
| Accept | обязательный application/json |
|---|---|
| X-Haskimail-Server-Token | обязательный Серверный API-ключ. Он есть в настройках сервера на вкладке «API-ключи». |
| templateIdOrAlias | обязательный ID шаблона или его название. |
|---|
| ErrorCode | integer |
0 — шаблон удалён. |
|---|---|---|
| Message | string |
Описание результата. |
curl "https://api.haskimail.ru/templates/{templateIdOrAlias}" \
-X DELETE \
-H "Accept: application/json" \
-H "X-Haskimail-Server-Token: server token"
HTTP/1.1 200 OK
Content-Type: application/json
{
"ErrorCode": 0,
"Message": "Template 4521 removed."
}