DashaMail REST API v2 API

Отрасль: Связь и уведомления. Актуально на 2026-10-24.

REST API сервиса email-рассылок DashaMail: адресные базы и подписчики, массовые рассылки (черновики, расписание, отправка), автоматизации, HTML-шаблоны, отчёты, транзакционные письма, аккаунт (баланс, отправители, домены, вебхуки) и обработка входящей почты. Только HTTPS, UTF-8 и JSON. Старый API с ?method=... заменён адресацией по ресурсам.

Сценарии

Отправить транзакционное письмо

Письма по событию: заказ оплачен, восстановление пароля, счёт.

  1. Создай API-ключ в личном кабинете и передавай его в заголовке Authorization: Bearer <ключ>. Домен отправителя должен быть добавлен и подтверждён (DKIM, SPF), иначе письма не уйдут (код 34).
  2. Отправь письмо: POST /v2/transactional/messages с to, from_email, subject и message (HTML) или plain_text. message_id — твой ID письма, по нему удобно искать.
  3. Доставка асинхронная: ответ 201 с response.data.transaction_id.
  4. Проверь статус и историю событий письма: GET /v2/transactional/messages/{transaction_id} — данные хранятся 6 месяцев.
  5. Вложения передаются в attachments JSON-строкой с файлами в base64; файлы .php и .exe запрещены.
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.

  1. Узнай ID базы: GET /v2/lists — в response.data список баз с id и описанием дополнительных полей merge_1…merge_N.
  2. Добавь подписчика: POST /v2/lists/{list_id}/members с email и доп. полями (merge_1 — например, имя). Чтобы обновить существующего подписчика вместо ошибки 409, передай update = 1.
  3. Для подписки с подтверждением (double opt-in) передай send_confirm — подписчик получит письмо со ссылкой.
  4. Ответ 201 с response.data.member_id. Ошибка 10 значит, что адрес отписан, в чёрном списке или неактивен.
  5. Проверить подписчика можно через GET /v2/lists/{list_id}/members с email.
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}'

Создать и запустить массовую рассылку

Письмо по адресной базе — сразу или по расписанию.

  1. Создай черновик: POST /v2/campaigns с list_id, subject, from_email (на подтверждённом домене), from_name и html. Отправка при этом не начинается — в ответе campaign_id.
  2. В HTML обязательно должна быть ссылка отписки с id="unsub_link" (или %ОТПИСАТЬСЯ% в текстовой версии) — без неё рассылка не запустится. Также проверяются тема, отправитель и баланс.
  3. Отправь сразу: POST /v2/campaigns/{campaign_id}/send — или запланируй: POST /v2/campaigns/{campaign_id}/schedule с delivery_time по московскому времени. allow_time_zone учтёт часовой пояс подписчика.
  4. Отменить запланированную рассылку можно, пока письма не ушли, — через /v2/campaigns/{campaign_id}/unschedule.
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}'

Базовые URL

Авторизация

Тип: Bearer-токен

API-ключ из личного кабинета передаётся в заголовке Authorization: Bearer <ключ> (схема ApiKey тоже принимается). Для совместимости ключ можно передать параметром api_key в строке запроса — менее безопасно; при заданном заголовке параметр игнорируется.

curl 'https://api.dashamail.com/v2/lists' \
  -H 'Authorization: Bearer YOUR_API_KEY'

Методы

GET /v2/lists — Адресные базы

В 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

GET /v2/lists/{list_id}/members — Подписчики базы

Параметр Где Тип Обяз. Описание
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 нет Подписчики сегмента

POST /v2/lists/{list_id}/members — Добавление подписчика

Ответ 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
}'

POST /v2/campaigns — Создание черновика рассылки

Ответ 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}/schedule — Запланировать рассылку

Отмена — 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 нет Лучшее время отправки

POST /v2/campaigns/{campaign_id}/send — Отправить рассылку сейчас

Параметр Где Тип Обяз. Описание
campaign_id path integer да ID рассылки

POST /v2/transactional/messages — Транзакционное письмо

Доставка асинхронная; ответ 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"}'

GET /v2/transactional/messages/{transaction_id} — Статус транзакционного письма

Статус и история событий доступны за последние 6 месяцев.

Параметр Где Тип Обяз. Описание
transaction_id path string да ID письма

Нюансы

Ошибки

Код Описание
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