Подключение почты для AI-агентов
Машиночитаемый маршрут для AI-агентов и ассистентов, которым нужно добавить транзакционную почту в чужой проект: что вызывать, в каком порядке и какие проверки обязательны перед каждой отправкой.
Скачать OpenAPI 3.1Перед тем как писать код
- Попросите у пользователя API-ключ проекта или предложите создать sandbox-ключ на https://app.srs-postline.com/ru/login — никогда не придумывайте, не угадывайте и не переиспользуйте ключ из другого проекта.
- Кладите ключ в серверную переменную окружения. Не размещайте его во frontend-коде, мобильном приложении, публичном репозитории или закоммиченном .env.
- Используйте srs_live_ ключ. До проверки домена отправляйте с sandbox@srs-postline.com только на email участника проекта; после проверки домена разрешены внешние получатели в пределах квот.
- Прочитайте /llms.txt и openapi/postline.yaml до генерации запросов — не угадывайте названия полей и эндпоинты.
Минимальная отправка
POST /v1/emails
Authorization: Bearer srs_live_...
Idempotency-Key: <стабильный-id-на-действие>
Content-Type: application/json
{
"from": "Sender Name <info@example.com>",
"to": ["user@example.net"],
"subject": "Тема",
"html": "<p>Текст</p>",
"text": "Текст"
}Проверки перед каждой отправкой
- Всегда передавайте Idempotency-Key, полученный из вызвавшего действия (ID заказа, ID события) — иначе повтор запроса продублирует письмо.
- Никогда не кладите OTP-коды, токены сброса пароля и другие секреты в поля, которые логируются или пересылаются за пределы тела письма.
- Запрашивайте минимально необходимый scope ключа (для отправки достаточно emails:send; не запрашивайте domains:write или api_keys:write без необходимости).
- Не превышайте 100 получателей на вызов. Текущий API не принимает вложения и произвольные заголовки; отклоняйте файлы или передавайте ссылку, не создавая впечатление, что файл прикреплён.
- Не повторяйте запрос молча при ошибках 4xx. Безопасно повторять только 429 и 503, и только с задержкой (backoff).
Обработка каждого кода ответа
- 202 — принято в очередь, ещё не доставлено. Сохраните id, если понадобится проверить статус позже.
- 400 — невалидный payload; исправьте запрос, не повторяйте как есть.
- 401 — неверный или истёкший ключ; остановитесь и сообщите пользователю, не придумывайте новый ключ.
- 403 — не хватает scope или домен отправителя ещё не верифицирован; попросите пользователя подтвердить домен.
- 422 — получатель в suppression-листе (был bounce/complaint); не повторяйте отправку этому адресату.
- 429 — превышен лимит; повторите позже с задержкой, не зацикливайтесь.
- 503 — очередь недоступна; повторите с задержкой, не переключайтесь на неофициальный способ отправки.
Если задача включает приём событий
Регистрируйте webhook-эндпоинт только по HTTPS. Пересчитывайте подпись самостоятельно перед тем, как доверять payload — не пропускайте проверку, даже если запрос «выглядит внутренним».
signature = HMAC-SHA256(webhook_secret, timestamp + "\0" + event_id + "\0" + raw_body)
сравнивайте с заголовком Postline-Signature (constant-time compare)
отклоняйте, если Postline-Timestamp вне допустимого окна
сохраняйте event_id и обрабатывайте каждое событие ровно один разМашиночитаемые ссылки
- /llms.txt — сжатый свод этих правил для контекста агента.
- /openapi/postline.yaml — полная OpenAPI 3.1 схема всех эндпоинтов.
- /ru/api/ — API reference для человека.
- /ru/webhooks/ — подпись и retry вебхуков.
Актуальная модель доступа
Текущие ключи dashboard используют префикс srs_live_. До проверки клиентского From-домена общий sandbox-отправитель может писать только участникам проекта. После проверки DNS внешняя отправка ограничивается квотами тарифа, suppression, лимитами получателей и abuse-контролями. Ответ 202 означает очередь, а не доставку.
Материалы для интеграции
Используйте пошаговое руководство для людей и AI-агентов, а OpenAPI — как источник истины по полям API.