Пакетная отправка
POST /v1/emails/batch
Authorization: Bearer mi_live_…
Content-Type: application/json
До 100 писем за один HTTP-запрос. Параметры каждого письма — те же, что в POST /v1/emails. Письма обрабатываются независимо.
Пример
- cURL
- Python
- TypeScript
curl -X POST https://api.mailinfra.ru/v1/emails/batch \
-H "Authorization: Bearer mi_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"emails": [
{
"from": "no-reply@ваш-домен.ru",
"to": ["ivan@example.com"],
"template": "welcome",
"variables": { "user_name": "Иван" }
},
{
"from": "no-reply@ваш-домен.ru",
"to": ["maria@example.com"],
"template": "welcome",
"variables": { "user_name": "Мария" }
}
]
}'
import httpx
users = [
{"email": "ivan@example.com", "name": "Иван"},
{"email": "maria@example.com", "name": "Мария"},
]
r = httpx.post(
"https://api.mailinfra.ru/v1/emails/batch",
headers={"Authorization": "Bearer mi_live_xxxxxxxx"},
json={
"emails": [
{
"from": "no-reply@ваш-домен.ru",
"to": [u["email"]],
"template": "welcome",
"variables": {"user_name": u["name"]},
}
for u in users
]
},
)
r.raise_for_status()
for result in r.json()["data"]["results"]:
print(result["id"], result["status"])
const users = [
{ email: "ivan@example.com", name: "Иван" },
{ email: "maria@example.com", name: "Мария" },
];
const res = await fetch("https://api.mailinfra.ru/v1/emails/batch", {
method: "POST",
headers: {
Authorization: "Bearer mi_live_xxxxxxxx",
"Content-Type": "application/json",
},
body: JSON.stringify({
emails: users.map((u) => ({
from: "no-reply@ваш-домен.ru",
to: [u.email],
template: "welcome",
variables: { user_name: u.name },
})),
}),
});
const { data } = await res.json();
data.results.forEach((r) => console.log(r.id, r.status));
Ответ
{
"data": {
"results": [
{ "id": "018e1b7a-1111-7000-aaaa-000000000001", "status": "QUEUED", "skipped_recipients": [] },
{ "id": "018e1b7a-1111-7000-aaaa-000000000002", "status": "QUEUED", "skipped_recipients": [] }
]
}
}
Порядок результатов соответствует порядку входных писем.
Особенности
- Частичный успех: ошибка в одном письме (например, шаблон не найден) не отменяет остальные — они доставляются нормально, а проблемному вернётся ошибка в его
result. Idempotency-Keyне поддерживается для batch. Если нужна идем потентность — отправляйте по одному.- Лимит — 100 писем на запрос. Это технический лимит на HTTP-payload, не маркетинговая рассылка.