Перейти к основному содержимому

Отправка письма

POST /v1/emails
Authorization: Bearer mi_live_…
Content-Type: application/json

Возвращает 202 Accepted и присвоенный id ещё до фактической доставки. Итоговый статус приходит через вебхуки или его можно запросить по id.

Минимальный пример

curl -X POST https://api.mailinfra.ru/v1/emails \
-H "Authorization: Bearer mi_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"from": "hello@ваш-домен.ru",
"to": ["user@example.com"],
"subject": "Добро пожаловать!",
"html": "<p>Привет!</p>",
"text": "Привет!"
}'

Ответ:

{
"data": {
"id": "018e1b7a-1111-7000-aaaa-111111111111",
"status": "QUEUED",
"skipped_recipients": []
}
}

Параметры запроса

ПолеТипОбязательноОписание
fromstringдаEmail отправителя. Домен должен быть верифицирован и привязан к проекту.
from_namestringОтображаемое имя (до 200 символов). В клиенте: Имя <from>.
tostring[]даПолучатели. Сумма to + cc + bcc ≤ 50.
ccstring[]CC.
bccstring[]BCC.
reply_tostring[]До 10 адресов.
subjectstring*До 998 символов, без переводов строк.
htmlstring*HTML-тело письма.
textstring*Текстовая версия. Рекомендуется указывать вместе с html.
headersobjectПользовательские заголовки (см. ниже).
tagsstring[]До 10 меток, каждая до 32 символов.
templatestring*Slug шаблона.
variablesobjectПеременные для рендера шаблона.

* Без template обязательны subject и хотя бы одно из html / text. С template тема и тело берутся из шаблона.

Пользовательские заголовки

{
"headers": {
"X-Order-Id": "12345",
"X-User-Id": "usr_abc"
}
}

Нельзя переопределить системные заголовки: from, to, cc, bcc, subject, message-id, date, dkim-signature, x-mailinfra-*. Попытка → 422.

Идемпотентность

POST /v1/emails
Idempotency-Key: order-12345-welcome

Повтор того же запроса с тем же ключом:

  • 200 OK (вместо 202)
  • заголовок Idempotent-Replayed: true
  • тело идентично первому ответу, повторной отправки не происходит

Используйте, если вызываете API по сетевому таймауту — это безопаснее try/except с retry.

Пропущенные получатели

Адреса из списка подавления тихо исключаются:

{
"data": {
"id": "...",
"status": "QUEUED",
"skipped_recipients": [
{ "email": "blocked@example.com", "reason": "HARD_BOUNCE" }
]
}
}

Если все получатели подавлены — письмо не создаётся, возвращается 422 с кодом all_recipients_suppressed.

Статусы письма

QUEUED → SENDING → SENT → DELIVERED
↘ BOUNCED
↘ COMPLAINED
↘ FAILED
СтатусЗначение
QUEUEDПринято в очередь
SENDINGПередаётся в MTA
SENTПередано SMTP-серверу получателя
DELIVEREDПолучено получателем
BOUNCEDНедоставка
COMPLAINEDЖалоба на спам
FAILEDВнутренняя ошибка отправки
SIMULATEDTEST-ключ, реальной отправки не было

Чтение письма и событий

GET /v1/emails
GET /v1/emails/{id}
GET /v1/emails/{id}/events

Доступно ключам с правом чтения (FULL_ACCESS, READ_ONLY). Реал-тайм без поллинга — через вебхуки.

Лимиты

Все лимиты — на странице Ошибки и лимиты →.