Отрасль: Связь и уведомления. Актуально на 2026-10-24.
REST API сервиса email-рассылок DashaMail: адресные базы и подписчики, массовые рассылки (черновики, расписание, отправка), автоматизации, HTML-шаблоны, отчёты, транзакционные письма, аккаунт (баланс, отправители, домены, вебхуки) и обработка входящей почты. Только HTTPS, UTF-8 и JSON. Старый API с ?method=... заменён адресацией по ресурсам.
Письма по событию: заказ оплачен, восстановление пароля, счёт.
curl -X POST https://api.dashamail.com/v2/transactional/messages \
-H "Authorization: Bearer $DASHAMAIL_KEY" \
-H 'Content-Type: application/json' \
-d '{
"to": "ivan@example.ru",
"from_email": "noreply@example.ru",
"from_name": "Магазин",
"subject": "Заказ №1042 оплачен",
"message": "<p>Спасибо! Мы начали собирать ваш заказ.</p>",
"message_id": "order-1042-paid"
}'
Подписка с сайта или синхронизация клиентов из CRM.
curl -X POST https://api.dashamail.com/v2/lists/128341/members \
-H "Authorization: Bearer $DASHAMAIL_KEY" \
-H 'Content-Type: application/json' \
-d '{"email": "ivan@example.ru", "merge_1": "Иван", "merge_2": "Москва", "update": 1}'
Письмо по адресной базе — сразу или по расписанию.
CAMPAIGN=$(curl -s -X POST https://api.dashamail.com/v2/campaigns \
-H "Authorization: Bearer $DASHAMAIL_KEY" -H 'Content-Type: application/json' \
-d '{"list_id": 128341, "subject": "Скидки выходного дня", "from_email": "news@example.ru", "from_name": "Магазин",
"html": "<h1>Скидка 20%</h1><p><a id=\"unsub_link\" href=\"#\">Отписаться</a></p>", "track_opens": "Y", "track_clicks": "Y"}' \
| jq -r .response.data.campaign_id)
curl -X POST "https://api.dashamail.com/v2/campaigns/$CAMPAIGN/schedule" \
-H "Authorization: Bearer $DASHAMAIL_KEY" -H 'Content-Type: application/json' \
-d '{"delivery_time": "2026-10-26 10:00:00", "allow_time_zone": true}'
https://api.dashamail.com/v2Тип: Bearer-токен
API-ключ из личного кабинета передаётся в заголовке Authorization: Bearer <ключ> (схема ApiKey тоже принимается). Для совместимости ключ можно передать параметром api_key в строке запроса — менее безопасно; при заданном заголовке параметр игнорируется.
curl 'https://api.dashamail.com/v2/lists' \
-H 'Authorization: Bearer YOUR_API_KEY'
В response.data — базы с полями id, state, name, merge_1…merge_N и счётчиками count_active, count_unsubscribed, count_all и др.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
state |
query | string | нет | active, archived, blocked |
limit |
query | integer | нет | Число баз; без него — все |
offset |
query | integer | нет | Смещение (только с limit) |
merge_json |
query | boolean | нет | Описания доп. полей в JSON |
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
list_id |
path | integer | да | ID базы |
start |
query | integer | нет | Смещение, по умолчанию 0 |
limit |
query | integer | нет | Число записей, по умолчанию 100 |
order |
query | string | нет | Сортировка поле направление, по умолчанию id asc |
state |
query | string | нет | active, unsubscribed, bounced, complained, unconfirmed, inactive |
email |
query | string | нет | Поиск по адресу |
member_id |
query | integer | нет | Поиск по ID |
segment_id |
query | integer | нет | Подписчики сегмента |
Ответ 201: response.data.member_id.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
list_id |
path | integer | да | ID базы |
email |
body | string | да | Адрес подписчика |
merge_1 |
body | string | нет | Доп. поле 1 (аналогично merge_2…merge_N) |
update |
body | boolean | нет | Обновить существующего подписчика вместо ошибки |
update_tags |
body | string | нет | on — добавить метки к существующим |
send_confirm |
body | boolean | нет | Отправить письмо подтверждения (double opt-in) |
no_check |
body | boolean | нет | Не проверять по возвратам и не исправлять опечатки |
state |
body | string | нет | Явное состояние подписчика |
Пример запроса:
curl -X POST 'https://api.dashamail.com/v2/lists/128341/members' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"email": "ivan@example.com",
"merge_1": "Иван",
"merge_2": "Москва",
"update": 1
}'
Ответ 201: campaign_id. Отправка не начинается.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
list_id |
body | integer | да | ID базы (несколько — JSON-массив строкой) |
subject |
body | string | да | Тема (с подстановками) |
from_email |
body | string | да | Адрес отправителя на подтверждённом домене |
from_name |
body | string | да | Имя отправителя |
name |
body | string | нет | Внутреннее название |
html |
body | string | нет | HTML-версия |
plain_text |
body | string | нет | Текстовая версия |
status |
body | string | нет | DRAFT (по умолчанию) или TEMPLATE |
track_opens |
body | string | нет | Y/N |
track_clicks |
body | string | нет | Y/N |
Отмена — POST /v2/campaigns/{campaign_id}/unschedule, пока письма не ушли. Также можно запустить через PUT /v2/campaigns/{campaign_id} с status = MODERATING или SCHEDULE.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
campaign_id |
path | integer | да | ID рассылки |
delivery_time |
body | string | да | YYYY-MM-DD HH:MM:SS, московское время |
allow_time_zone |
body | boolean | нет | Учитывать часовой пояс подписчика |
allow_best_time |
body | boolean | нет | Лучшее время отправки |
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
campaign_id |
path | integer | да | ID рассылки |
Доставка асинхронная; ответ 201 с response.data.transaction_id.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
to |
body | string | да | Получатель; несколько — через запятую (каждому отдельное письмо) |
from_email |
body | string | да | Отправитель (можно заменить заголовком From в headers) |
message |
body | string | нет | HTML; нужен он или plain_text |
plain_text |
body | string | нет | Текстовая версия |
from_name |
body | string | нет | Имя отправителя |
subject |
body | string | нет | Тема |
message_id |
body | string | нет | Свой ID письма |
cc |
body | string | нет | Копия |
bcc |
body | string | нет | Скрытая копия |
headers |
body | string | нет | Заголовки (JSON-строка) |
attachments |
body | string | нет | Вложения в base64 (JSON-строка); .php, .exe запрещены |
inline |
body | string | нет | Встраиваемые изображения (JPEG, PNG, GIF), ссылка cid: |
delivery_time |
body | integer | нет | Отложенная отправка, timestamp |
Пример запроса:
curl -X POST 'https://api.dashamail.com/v2/transactional/messages' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"to": "ivan@example.com", "from_email": "noreply@example.ru", "subject": "Заказ №1024 оплачен", "message": "<p>...</p>", "message_id": "order-1024-paid"}'
Статус и история событий доступны за последние 6 месяцев.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
transaction_id |
path | string | да | ID письма |
id="unsub_link" в HTML или %ОТПИСАТЬСЯ% в тексте) и баланс.from_email должен быть добавлен и подтверждён (DKIM, SPF), иначе письма не уйдут (код 34).response.data; журнал и статистика транзакционных писем — GET /v2/transactional/log и GET /v2/transactional/stats./lists, /campaigns, /automations, /templates, /reports, /transactional, /account, /router.| Код | Описание |
|---|---|
2 |
401 — ключ неверный или не принят |
3 |
422 — не заданы обязательные параметры |
7 |
409 — email уже есть в базе (используйте update: 1) |
10 |
409 — подписчик отписан, в чёрном списке или неактивен |
58 |
429 — превышен лимит запросов |
62 |
403 — ключу не хватает права (details.required_scope) |
63 |
429 — исчерпан лимит тестовых писем |
65 |
403 — у субаккаунта нет права на операцию |
66 |
500 — сбой на стороне сервиса |
67 |
422 — данные не прошли проверку |
101 |
Некорректный формат запроса |
999 |
404 — неизвестный метод или ресурс |
Если этого недостаточно — официальная документация: https://dashamail.ru/api/ JSON: https://mcp-everything.ru/api/integrations/dashamail. MCP: https://mcp-everything.ru/mcp