---
slug: "dashamail"
name: "DashaMail REST API v2"
vendor: "DashaMail"
industry: "communications"
docsUrl: "https://dashamail.ru/api/"
version: 2
updatedAt: "2026-10-24"
---

# DashaMail REST API v2

Отрасль: Связь и уведомления. Актуально на 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 запрещены.

```bash
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.

```bash
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.

```bash
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

- Боевой: `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'
```

## Методы

### 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 письма |

## Нюансы

- Перед запуском рассылки проверяются тема, отправитель, наличие HTML или текста, ссылка отписки (`id="unsub_link"` в HTML или `%ОТПИСАТЬСЯ%` в тексте) и баланс.
- Домен `from_email` должен быть добавлен и подтверждён (DKIM, SPF), иначе письма не уйдут (код 34).
- Ответы — JSON с `response.data`; журнал и статистика транзакционных писем — `GET /v2/transactional/log` и `GET /v2/transactional/stats`.
- Разделы API: `/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 — неизвестный метод или ресурс |

## Ограничения

- Тестовые письма: 12 на рассылку и 25 в сутки на аккаунт.
- Числовые лимиты частоты запросов в документации не указаны; при превышении — код 58.

## Источники

- [REST API v2 — введение](https://dashamail.ru/api/)
- [Аутентификация](https://dashamail.ru/api/auth/)
- [Адресные базы](https://dashamail.ru/api/lists/)
- [Рассылки](https://dashamail.ru/api/campaigns/)
- [Транзакционные письма](https://dashamail.ru/api/transactional/)
- [Коды ошибок](https://dashamail.ru/api/errors/)

---

Если этого недостаточно — официальная документация: https://dashamail.ru/api/
JSON: https://mcp-everything.ru/api/integrations/dashamail. MCP: https://mcp-everything.ru/mcp
