POST /api/v1/mail/send

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

Base URL: https://<host>/ (пример: http://localhost:5000). Соглашения, обзор Public API, Swagger UI.

Headers:

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

Тело запроса (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Отклонено провайдером

Заголовки запроса

ЗаголовокОбяз.Описание
X-API-KeyдаКлюч с scope mail:send
Content-Typeдаapplication/json

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

{
  "to": ["user@example.com"],
  "subject": "Welcome",
  "text": "Hello!",
  "sync": false
}

Пример успешного ответа

{
  "success": true,
  "data": {
    "job_id": "550e8400-e29b-41d4-a716-446655440000",
    "sync": false,
    "recipient_count": 1
  }
}

Пример ошибки

{
  "success": false,
  "error": {
    "code": "unauthorized",
    "message": "Invalid API key"
  }
}

Пример curl

curl -X POST http://localhost:5000/api/v1/mail/send \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"to":["user@example.com"],"subject":"Welcome","text":"Hello!","sync":false}'

См. также: GET job status.