Mail Service API — /api/v1/mail

Auth: X-API-Key с permission mail:send или mail:*

Response envelope: формат ответа B (см. api-overview.html)

---

POST /api/v1/mail/send

Отправка письма или постановка в outbox-очередь.

Headers:

HeaderОбяз.Описание
X-API-KeyдаAPI-ключ с mail:send
ключ идемпотентностинетUUID для идемпотентности (альтернатива body-полю)
Content-Typeдаapplication/json

Request body (MailSendRequestSchema):

ПолеТипОбяз.Описание
tostring[]да1–50 получателей
ccstring[]нетmax 50
subjectstringда1–512, sanitized
textstring*plain text, max 100 000
htmlstring*HTML, max 200 000
templatestring*имя шаблона, max 128
variablesobjectнетпеременные шаблона
idempotency_keystringнетmax 128
syncbooleanнетtrue — синхронная отправка, default false

*Обязательно: text и/или html, либо template.

Response 200 (sync) / 202 (async) — data:

ПолеТипОписание
job_idstring \nullID задачи outbox
syncboolрежим отправки
recipient_countintto + cc count

Error codes:

CodeHTTPОписание
unauthorized401Нет/неверный API key
validation_error400Ошибка проверка формата данных
mail_unavailable503Mail provider недоступен
mail_not_configured503Mail не настроен
mail_rate_limited429Rate limit
mail_rejected502Отклонено провайдером

---

GET /api/v1/mail/jobs/{job_id}

Статус outbox-задачи.

Auth: X-API-Key (mail:send)

Path params:

ParamОписание
job_idID задачи из /send

Response 200 — data (MailJobStatusResponseData):

ПолеТипОписание
job_idstring
statusstringpending / sent / failed / unknown
attemptsintчисло попыток
last_errorstring \nullпоследняя ошибка
sent_atstring \nullISO timestamp

Errors: 404 not_found, 503 mail_unavailable

---

Пример запроса

POST /api/v1/mail/send HTTP/1.1
X-API-Key: csk_live_xxxxxxxx
Content-Type: application/json
ключ идемпотентности: 550e8400-e29b-41d4-a716-446655440000

{
  "to": ["user@example.com"],
  "subject": "Welcome",
  "template": "welcome",
  "variables": { "name": "Alex" },
  "sync": false
}