Отправка писем через Stream API
Stream API (Потоковое API) — специализированный интерфейс для отправки больших объёмов писем по одному в одном запросе. Подходит для систем, которые генерируют письма поштучно и не могут заранее сформировать полный список получателей.
Когда использовать Stream API
- Ваша система формирует письма по одному (например, поштучная генерация из CRM).
- Если вам требуется отправлять более 10 писем в секунду на постоянной основе.
- Вы отправляете одновременно и транзакционные, и массовые письма потоком.
Альтернативы в Sendsay API
-
Для массовых рассылок с готовым списком получателей быстрее и удобнее использовать экспресс-выпуск (
issue.sendсusers.list). -
Для транзакционных писем, где не важна максимальная скорость, подойдёт персональный выпуск (
issue.sendсgroup: "personal"). Для него доступны почти все настройки Sendsay APIissue.send(ленты новостей, расширенная персонализация и другие).
Требования для отправки
- API-ключ.
- Доступ к Stream API — для подключения .
- Черновик письма или содержимое письма, передаваемое прямо в запросе.
Адрес API
Вызовы Stream API отправляются методом POST на:
https://trapi.sendsay.ru/tranz/api/v2/account/json/issue.send/personal
Где account — код вашего аккаунта.
Требования к соединению:
- Транспорт: HTTP 1.0/1.1 over TLSv1.2.
- Content-Type: application/json.
- Максимальный размер запроса: 25 МБ.
- Для лучшей пропускной способности используйте Keep-Alive.
- Хост
trapi.sendsay.ruимеет несколько IP-адресов — при недоступности одного переключайтесь на другой.
Авторизация
По API-ключу
В теле запроса:
{
"apikey": "ваш-api-ключ",
...
}
Или в HTTP-заголовке:
Authorization: sendsay apikey=url-кодированный-ключ
По JWT-токену
В теле запроса:
{
"apikey": "jwt:ваш-токен",
...
}
Или в HTTP-заголовке:
Authorization: sendsay apikey=jwt:url-кодированный-токен
Для настройки JWT .
Отправка одного письма
С черновиком
{
"apikey": "ваш-api-ключ",
"action": "issue.send",
"group": "personal",
"email": "test@test.com",
"uuid": "order-confirm-20260217-001",
"letter": {
"draft.id": "order_confirmation"
},
"extra": {
"anketa": {
"order_id": "A-12345",
"total": "4 500 ₽"
}
}
}
Без черновика
{
"apikey": "ваш-api-ключ",
"action": "issue.send",
"group": "personal",
"email": "test@test.com",
"uuid": "welcome-20260217-002",
"letter": {
"subject": "Добро пожаловать!",
"from.name": "Мой магазин",
"from.email": "info@myshop.ru",
"message": {
"html": "<h1>Добро пожаловать!</h1><p>Рады видеть вас.</p>",
"text": "Добро пожаловать! Рады видеть вас."
}
}
}
Параметры запроса
| Параметр | Обязательный | Описание |
|---|---|---|
action | ✓ | Всегда issue.send |
group | ✓ | Всегда personal |
email | ✓ | Адрес получателя |
uuid | — | Уникальный идентификатор письма (до 240 символов, A-Za-z0-9=_-). Если не указан — назначается автоматически. Используется для идентификации в статистике. В callback передаётся как gate.uniq. Хранится 30 дней |
letter.draft.id | — | ID или алиас черновика |
letter.subject | — | Тема письма (обязательно, если нет черновика) |
letter.from.email | — | Адрес отправителя (обязательно, если нет черновика) |
letter.from.name | — | Имя отправителя |
letter.reply.email | — | Адрес для ответов |
letter.to.name | — | Имя получателя |
letter.message.html | — | HTML-версия |
letter.message.text | — | Текстовая версия |
letter.message.amp | — | AMP-версия |
letter.attaches | — | Массив прикреплённых файлов |
extra.anketa | — | Данные персонализации конкретного получателя. В Stream API индивидуальные данные передаются именно в extra.anketa (в отличие от основного API, где anketa подтягивается из базы автоматически) |
label | — | Метка или массив меток (до 3 штук, до 32 байт) для группировки в статистике |
dkim.id | — | DKIM-ключ для подписи |
customer.id | — | Ваш внутренний ID получателя (до 255 байт). В callback — customer.id |
ttl | — | Время попыток доставки в секундах (по умолчанию — 4 дня) |
relink | — | 1 — отслеживать клики, 0 — нет (по умолчанию — 0) |
weak_draft | — | 1 — параметры запроса приоритетнее черновика |
care_vars | — | Массив обязательных переменных персонализации |
ignore_stoplist | — | 1 — отправить, даже если адрес в стоп-листе (дополнительная функция, для подключения ) |
email.fake | — | Подменный адрес для статистики (реальный адрес не сохраняется в системе) |
lbac.id | — | ID политики доступа LBAC |
Должна быть заполнена хотя бы одна версия — HTML или text.