Методы отправки одного письма POST /email и POST /email/withTemplate всегда возвращают один и тот же набор полей. По HTTP-статусу и полю ErrorCode ваше приложение понимает, принято ли письмо в отправку, а если нет — по какой причине.
| Результат | HTTP-статус | ErrorCode |
|---|---|---|
| Письмо принято в отправку | 200 | 0 |
| Письмо не удалось принять | 422 | код причины |
Ответы пакетной отправки устроены иначе — они описаны в статье «Пакетная отправка писем через API».
Поля ответа
-
To — получатели из запроса.
-
SubmittedAt — время приёма письма по Москве в формате
ГГГГ-ММ-ДД ЧЧ:ММ:СС. -
MessageID — идентификатор письма. Если получателей несколько, идентификаторы перечислены через запятую в том же порядке. Если письмо не принято — null. По MessageID письмо ищут в API сообщений и в вебхуках.
-
ErrorCode — 0, если письмо принято. Иначе — код ошибки.
-
Message — описание результата или причина ошибки.
Пример ответа, когда письмо принято (HTTP 200):
{
"To": "ivan@example.com",
"SubmittedAt": "2026-10-20 14:30:12",
"MessageID": "6f1c0b2d9e8a4f7b3c5d2e1a0b9c8d7e",
"ErrorCode": 0,
"Message": "OK"
}
Пример ответа, когда письмо не удалось принять (HTTP 422):
{
"To": "ivan.example.com",
"SubmittedAt": "2026-10-20 14:30:12",
"MessageID": null,
"ErrorCode": 6,
"Message": "Некорректный email-адрес получателя"
}
Частые коды ошибок
| ErrorCode | Что случилось | Что делать |
|---|---|---|
| 3 | не все обязательные параметры, например нет ни HtmlBody, ни TextBody | дополнить запрос |
| 4 | аккаунт не может отправлять: заблокирован, удалён или ещё на модерации | проверить статус аккаунта |
| 6 | некорректный email-адрес в From, To, Cc или Bcc | исправить адрес |
| 35 | отправка недоступна: недостаточно средств, блокировка за спам или отправка отключена | проверить баланс и статус аккаунта |
| 36 | временная ошибка отправки | повторить запрос позже |
| 52 | адрес отправителя не подтверждён | подтвердить адрес или домен |
| 400 | отправитель не подтверждён, пока аккаунт на модерации | отправлять с подтверждённых адресов и доменов |
| 412 | получатель не подтверждён, пока аккаунт на модерации | отправлять на подтверждённые адреса и домены |
| 1101 | шаблон не найден или принадлежит другому серверу | проверить TemplateId или TemplateAlias |
| 1226 | канал не найден, принадлежит другому серверу или в архиве; если MessageStream не указан — у сервера нет активного транзакционного канала | проверить MessageStream |
Полный список — в разделе «Коды ошибок API» документации.
Если аккаунт на модерации, ошибка 412 может прийти раньше остальных: пока получатель не подтверждён, письмо без тела или с неверным адресом тоже получит код 412. Подтвердите адреса получателей и отправьте запрос ещё раз — тогда API покажет остальные ошибки, если они есть. Подробнее — в статье «Модерация аккаунта».
Как обрабатывать ответ в приложении
-
Считайте письмо отправленным, только если пришли HTTP 200 и ErrorCode 0. Сохраните MessageID — по нему вы свяжете письмо с событиями доставки, открытиями и кликами.
-
При HTTP 422 запишите в лог ErrorCode и Message: по ним проще найти причину.
-
Повторяйте отправку только при коде 36 и с паузой. Остальные ошибки повтором не исправить: нужно поправить запрос или настройки аккаунта.
-
Убедитесь, что ответ 422 не приводит к падению приложения или к повторной отправке в бесконечном цикле.
Как проверить обработку ошибок
Передайте тестовый ключ HASKIMAIL_API_TEST в заголовке X-Haskimail-Server-Token и отправьте заведомо некорректное письмо, например с адресом без «@». Письма с тестовым ключом никуда не уходят.
curl "https://api.haskimail.ru/email" \
-X POST \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Haskimail-Server-Token: HASKIMAIL_API_TEST" \
-d '{
"From": "Магазин <shop@example.com>",
"To": "ivan.example.com",
"Subject": "Проверка",
"TextBody": "Тестовое письмо"
}'
Учтите особенности тестового режима:
-
ошибки в данных приходят со своими кодами: 300 — неверное значение поля, 403 — неверное поле запроса, 411 — запрещённый тип вложения;
-
проверяется только сам запрос: обязательные поля, адреса и вложения. Канал отправки и другие настройки сервера не проверяются, поэтому ошибку 1226 на тестовом ключе не увидеть.
Чтобы проверить отправку целиком, включая настройки сервера, используйте сервер «Песочница».
Если вы работаете через наши клиентские библиотеки, проверьте, как библиотека сообщает об ответе 422 в вашем коде. Актуальные версии — в статье «Официальные библиотеки Haskimail».