Документация для разработчиков

MCP-сервер

ИИ-ассистенты — Claude, ChatGPT, Cursor и другие — подключаются к DashaMail по протоколу Model Context Protocol и работают с аккаунтом инструментами: «покажи базы», «собери отчёт по рассылке», «подготовь черновик письма». Каждый инструмент — это вызов REST API v2 от имени вашего аккаунта.

Адрес и что внутри #

https://mcp.dashamail.ru/

Транспорт — Streamable HTTP, версия протокола 2025-06-18. Сервер отдаёт 71 инструмент по всем разделам API: адресные базы и подписчики, рассылки и отчёты, шаблоны, автоматизации, транзакционные письма, вебхуки, обработка входящих. Полный перечень с аргументами — в справочнике ниже.

Сервер ничего не умеет сверх API: права ключа, лимиты запросов и журнал вызовов — те же, что у любой интеграции. Что доступно через API, то доступно и ассистенту, не больше.

Подключение #

Способов два — зависит от клиента.

Через OAuth: Claude.ai, Claude Desktop, ChatGPT

  1. В настройках клиента добавьте MCP-сервер (custom connector) с адресом https://mcp.dashamail.ru/.
  2. Клиент откроет вход в личный кабинет DashaMail — войдите, как обычно.
  3. На экране согласия видно, какое приложение и какие права запрашивает. Нажмите «Разрешить».

После этого в кабинете (Аккаунт → API-ключи) появится ключ с именем «MCP · <приложение>» и бейджем OAuth. Он живёт 30 дней, приложение продлевает его само. Отозвали ключ — приложение отключилось, продлить его оно не сможет.

По API-ключу: Claude Code, Cursor, Codex и другие

Клиенты, которые позволяют задать заголовок запроса, подключаются обычным API-ключом из кабинета — без OAuth:

Authorization: Bearer YOUR_API_KEY

Claude Code:

claude mcp add --transport http dashamail https://mcp.dashamail.ru/ \
  --header "Authorization: Bearer YOUR_API_KEY"

Cursor и другие клиенты с настройкой в JSON:

{
  "mcpServers": {
    "dashamail": {
      "url": "https://mcp.dashamail.ru/",
      "headers": { "Authorization": "Bearer YOUR_API_KEY" }
    }
  }
}

Пошаговые инструкции с экранами для каждого клиента — Claude.ai, Claude Code, ChatGPT, Cursor, Codex, Yandex AI Studio, GigaChat — в базе знаний, раздел «MCP».

Права #

Ключ, выданный через OAuth, несёт список прав: приложение запрашивает набор, пользователь на экране согласия оставляет из него столько, сколько считает нужным. Обычный ключ из кабинета по умолчанию без ограничений; права ему можно задать при выпуске или изменить позже кнопкой «Права» в разделе API-ключей — это касается и ключей приложений. Права иерархичны: send включает write, write включает read. Список и что каждое право открывает — в разделе «Ключи с ограниченными правами».

Сервер показывает ассистенту только те инструменты, на которые у ключа есть право, а API проверяет право ещё раз на каждом вызове: запрос вне прав получает 403 с code: 62.

Настройка через адрес #

АдресЧто даёт
https://mcp.dashamail.ru/ Все инструменты — по умолчанию для Claude, Cursor и других клиентов с большим контекстом.
https://mcp.dashamail.ru/?toolset=core Короткий набор из 27 самых нужных инструментов — для клиентов, которые плохо переносят длинные списки (ChatGPT).
https://mcp.dashamail.ru/?readonly=1 Только чтение: инструменты, которые что-то меняют или отправляют, не показываются и не вызываются. Для аналитических сценариев и осторожного знакомства.

Флаги сочетаются: ?toolset=core&readonly=1.

Как сервер обращается с данными #

  • Черновик — отдельно, отправка — отдельно. campaigns_create всегда создаёт черновик; письма уходят только через campaigns_schedule или campaigns_send_now. Эти инструменты помечены как необратимые, и клиенты (Claude, Cursor) спрашивают подтверждение пользователя перед вызовом.
  • Каждый инструмент помечен — читает, меняет, отправляет или удаляет (аннотации протокола readOnlyHint и destructiveHint). Ассистент видит это до вызова.
  • Необратимых удалений почти нет. Удалить можно только черновик рассылки; удаление баз, подписчиков и доменов через MCP недоступно — для этого есть кабинет и API.
  • Аргументы вне схемы отклоняются. Нельзя, например, подсунуть status=MODERATING в правку черновика и запустить рассылку в обход инструмента отправки.
  • Вёрстка писем в списках вырезана, чтобы не раздувать контекст; за ней — campaigns_get с with_html. Ответ длиннее 200 КБ обрезается с подсказкой сузить запрос.
  • Пустой результат — не ошибка: приходит как items: [].

Ошибки #

СитуацияОтветЧто делать
Нет токена или он отозван 401 Заголовок WWW-Authenticate указывает на метаданные для OAuth. Переподключите сервер в клиенте или проверьте ключ.
Инструмент вне прав ключа 403, code: 62 Недостающее право — в details.required_scope. Переподключите приложение и разрешите его.
Слишком много запросов 429, code: 58 Лимит запросов аккаунта в минуту. Не вызывайте инструменты параллельно.
Неизвестный инструмент или метод JSON-RPC -32602 / -32601 Инструмента нет в наборе (проверьте toolset, readonly и права ключа) либо метод протокола не поддерживается.
Ошибка внутри инструмента результат с isError Текст содержит код и сообщение API — те же, что в справочнике кодов. Ассистент прочтёт его и исправит аргументы.

Справочник инструментов #

Имена — <раздел>_<действие>; клиент добавляет к ним префикс сервера сам. Аргументы — те же параметры, что у соответствующих методов REST API, только в удобном для ассистента виде: флаги — да/нет, дополнительные поля подписчика — объектом merge, вложенные структуры — объектами, а не JSON-строками.

Аккаунт, отправители, домены #

account_get читает #

Баланс и лимиты аккаунта. Текущие лимиты аккаунта и число активных подписчиков. Самый дешёвый запрос — годится для проверки работоспособности ключа.

limit_members — максимум активных подписчиков по тарифу (0 — лимита нет: тариф поштучный, расход считается письмами), members — сколько их сейчас, limit_emails — остаток писем на поштучных тарифах, expiration_date — до какого числа оплачен месячный тариф.

Без аргументов.

senders_list читает #

Подтверждённые адреса отправителей. Список адресов, подтверждённых как обратные. Возвращается массивом строк, не более ста записей.

В from_email рассылки можно ставить только адрес из этого списка.

Без аргументов.

senders_add отправляет #

Добавить адрес отправителя. Отправляет на указанный адрес письмо со ссылкой подтверждения. Адрес станет доступен как обратный после того, как получатель перейдёт по ссылке.

На адрес уходит письмо со ссылкой; отправителем он станет только после перехода по ней.

Действие необратимо: уходят письма. Перед вызовом покажи пользователю параметры и дождись явного подтверждения.

АргументТипОписание
emailстрока, обязательныйАдрес, который нужно подтвердить.

domains_list читает #

Домены отправки и их DNS-статус. Домены аккаунта и состояние их DNS-настроек. Значения берутся из последней проверки — чтобы обновить их, вызовите проверку DNS.

valid_spf и valid_dkim — прошла ли проверка DNS; double_spf — в зоне две SPF-записи, это ошибка.

АргументТипОписание
domainстрокаВернуть только этот домен отправки.
stat_domainстрокаВернуть только этот домен статистики.

domains_add меняет #

Добавить домен отправки. Регистрирует домен в аккаунте и возвращает DNS-записи, которые нужно прописать у регистратора. До того как записи появятся в DNS и пройдут проверку, отправка с этого домена не заработает.

Примечание. Кроме домена отправки можно добавить домен статистики — тогда ссылки отслеживания в письмах будут вести на ваш поддомен, а не на домен DashaMail. Оба параметра можно передать в одном запросе.

Возвращает DNS-записи, которые нужно прописать в зоне домена. После этого вызови domains_check.

АргументТипОписание
domainстрока, обязательныйДомен отправки. Национальные (кириллические) домены не поддерживаются.
stat_domainстрокаПоддомен для ссылок статистики, например stat.example.ru.

domains_check читает #

Перепроверить DNS доменов. Запрашивает DNS и обновляет состояние доменов. Вызывайте после того, как прописали записи у регистратора — распространение изменений обычно занимает от нескольких минут до нескольких часов.

АргументТипОписание
domainстрокаПроверить только этот домен отправки.
stat_domainстрокаПроверить только этот домен статистики.

Адресные базы и подписчики #

lists_list читает #

Адресные базы. Возвращает все адресные базы аккаунта, от новых к старым, вместе со счётчиками подписчиков по состояниям.

Возвращает id, название, число подписчиков и описание дополнительных полей (merge_1 … merge_N) каждой базы.

АргументТипОписание
stateстрокаВернуть только базы в указанном состоянии. Значения: active, archived, blocked.

lists_get читает #

Одна адресная база. Возвращает одну базу — в том же формате, что и список, но массивом из одного элемента. Отсюда удобно получать состав дополнительных полей перед добавлением подписчиков.

АргументТипОписание
list_idчисло, обязательныйИдентификатор адресной базы.

lists_create меняет #

Создать адресную базу. Создаёт новую адресную базу.

Контактные данные (company, address, city и другие) попадают в подвал писем — этого требуют антиспам-политики. Если их не передать, подставятся данные из профиля аккаунта.

АргументТипОписание
nameстрока, обязательныйНазвание базы.
fieldsобъект или массив или строкаСостав дополнительных полей. Если не передан, поля копируются из базы по умолчанию, а при её отсутствии создаются «Имя» и «Фамилия». Каждый элемент — объект с ключами title, type, req, var. Для типа choice в title передаётся объект {"name": "…", "choices": […]}. Длина var — не больше 10 символов. Передавай объектом или массивом; готовая JSON-строка тоже принимается.
companyстрокаНазвание компании для подвала письма.
abuse_nameстрокаКонтактное лицо.
abuse_emailстрокаКонтактный email для жалоб.
addressстрокаАдрес.
cityстрокаГород.
zipстрокаПочтовый индекс.
countryстрокаСтрана.
phoneстрокаТелефон.
urlстрокаСайт компании.

lists_update меняет #

Изменить адресную базу. Меняет реквизиты базы. Передавайте только те поля, которые нужно изменить — остальные останутся прежними. Состав дополнительных полей здесь не меняется, для этого есть отдельные эндпоинты.

АргументТипОписание
list_idчисло, обязательныйИдентификатор базы.
nameстрокаНазвание базы.
abuse_emailстрокаКонтактный email. Проверяется на корректность.
abuse_nameстрокаКонтактное лицо.
companyстрокаКомпания.
addressстрокаАдрес.
cityстрокаГород.
zipстрокаИндекс.
countryстрокаСтрана.
urlстрокаСайт.
phoneстрокаТелефон.

fields_add меняет #

Добавить дополнительное поле базы. Добавляет в базу новое дополнительное поле. Оно займёт первый свободный номер merge_N.

АргументТипОписание
list_idчисло, обязательныйИдентификатор базы.
typeстрока, обязательныйТип поля. Значения: text, number, date, choice, tags.
varстрокаИмя подстановки для писем — например ИМЯ подставляется как %ИМЯ%. Не длиннее 10 символов.
titleстрокаОтображаемое название поля.
choicesобъект или массив или строкаМассив вариантов. Обязателен для типа choice. Передавай объектом или массивом; готовая JSON-строка тоже принимается.
reqстрокаСо значением on поле становится обязательным при добавлении подписчиков.

fields_update меняет #

Изменить дополнительное поле базы. Меняет параметры существующего поля. Незаданные параметры сохраняют прежние значения. Тип поля изменить нельзя.

АргументТипОписание
list_idчисло, обязательныйИдентификатор базы.
merge_idчисло, обязательныйНомер поля: 1 для merge_1 и так далее.
titleстрокаНовое название.
varстрокаНовое имя подстановки.
choicesобъект или массив или строкаНовый список вариантов для поля типа choice. Передавай объектом или массивом; готовая JSON-строка тоже принимается.
reqстрокаОбязательность поля.
defaultстрокаЗначение по умолчанию. Неприменимо к полям типа tags.

lists_unsubscribed читает #

Отписавшиеся подписчики. Подписчики, отписавшиеся от рассылок, с датой отписки. Полезно для синхронизации отписок с вашей CRM.

АргументТипОписание
list_idчисло, обязательныйИдентификатор базы.
startчислоСмещение.
limitчислоРазмер страницы.
orderстрокаСортировка в формате поле направление.
date_startстрокаОтписавшиеся начиная с этого момента. Формат YYYY-MM-DD HH:MM:SS, московское время.
date_endстрокаОтписавшиеся до этого момента. Формат YYYY-MM-DD HH:MM:SS, московское время.
emailстрокаПроверить конкретный адрес.

lists_complaints читает #

Пожаловавшиеся на спам. Подписчики, нажавшие «Это спам» в своём почтовом клиенте. Такие адреса исключаются из рассылок навсегда.

АргументТипОписание
list_idчисло, обязательныйИдентификатор базы.
startчислоСмещение.
limitчислоРазмер страницы.
orderстрокаСортировка в формате поле направление.

Подписчики базы. Постранично возвращает подписчиков базы.

Примечание. Смещение задаётся параметром start, не offset. По умолчанию отдаётся 100 записей.

Постранично: start — смещение, limit — размер страницы. Точный поиск одного адреса — параметр email.

АргументТипОписание
list_idчисло, обязательныйИдентификатор базы.
startчислоСмещение от начала выборки.
limitчислоСколько записей вернуть.
orderстрокаСортировка в формате поле направление — например id desc.
stateстрокаФильтр по состоянию подписчика. Значение spam — синоним complained. Значения: active, unsubscribed, bounced, complained, unconfirmed, inactive.
emailстрокаВернуть конкретного подписчика по адресу.
member_idчислоВернуть конкретного подписчика по идентификатору.
segment_idчислоВернуть подписчиков сохранённого сегмента. Несовместим с email и member_id.

members_get читает #

Один подписчик. Возвращает записи подписчика по адресу.

Примечание. Поиск идёт по всем базам аккаунта, а не только по указанной в пути. Если адрес есть в нескольких базах, вернутся все записи — различайте их по полю list_id.

Возвращает member_id — он нужен для members_move и members_copy.

АргументТипОписание
list_idчисло, обязательныйИдентификатор базы. На выборку не влияет.
emailстрока, обязательныйАдрес подписчика, закодированный для URL (@%40).

members_add меняет #

Добавить подписчика. Добавляет один адрес в базу. Для загрузки нескольких адресов используйте пакетное добавление, для файлов — импорт.

Перед добавлением адрес проверяется по вашему списку отписок, по чёрному списку аккаунта и по глобальному списку возвратов.

Если адрес уже есть в базе, без update=true запрос вернёт ошибку; с update=true — обновит поля. Дополнительные поля — объектом merge: {"merge_1": "Иван"}.

АргументТипОписание
list_idчисло, обязательныйИдентификатор базы.
emailстрока, обязательныйАдрес подписчика. Домен ya.ru автоматически приводится к yandex.ru.
mergeобъектДополнительные поля подписчика объектом: ключ — merge_N (номер поля из lists_get), значение — что записать. Значения дополнительных полей. Нумерация соответствует полям базы.
merge_0да/нетНумеровать переданные поля с нуля: merge_0 станет первым полем базы. Удобно, когда источник данных нумерует колонки с нуля.
updateда/нетОбновлять уже существующего подписчика вместо ошибки «адрес уже есть в базе».
update_tagsстрокаСо значением on метки в полях типа tags добавляются к существующим, а не заменяют их.
send_confirmда/нетОтправить письмо подтверждения подписки (double opt-in). Подписчик создаётся в состоянии unconfirmed.
no_checkда/нетНе проверять адрес по глобальному списку возвратов.
stateстрокаЗадать состояние подписчика явно.
genderстрокаПол подписчика.
regionстрокаРегион подписчика.

members_add_batch меняет #

Добавить подписчиков пачкой. Загружает несколько подписчиков одним запросом. Каждый элемент batch — такой же объект, как тело добавления одного подписчика.

Примечание. С параметром background запрос сразу возвращает управление, а загрузка идёт в фоне — так стоит поступать с пакетами в тысячи адресов.

АргументТипОписание
list_idчисло, обязательныйИдентификатор базы.
batchобъект или массив или строка, обязательныйМассив объектов подписчиков. Передавай объектом или массивом; готовая JSON-строка тоже принимается.
updateда/нетОбновлять существующих подписчиков.
backgroundда/нетОбработать пакет в фоне.
no_checkда/нетНе проверять адреса по глобальному списку возвратов.
send_confirmда/нетОтправлять письма подтверждения подписки.

members_update меняет #

Изменить подписчика. Обновляет дополнительные поля и состояние подписчика. Подписчик находится по паре «база + адрес» из пути, либо, если передан member_id — по нему.

АргументТипОписание
list_idчисло, обязательныйИдентификатор базы.
emailстрока, обязательныйТекущий адрес подписчика, закодированный для URL.
member_idчислоИскать подписчика по идентификатору, а не по адресу.
mergeобъектДополнительные поля подписчика объектом: ключ — merge_N (номер поля из lists_get), значение — что записать. Новые значения дополнительных полей. Поля, помеченные обязательными, нельзя очищать.
update_tagsстрокаСо значением on метки добавляются к существующим.
stateстрокаНовое состояние подписчика.
genderстрокаПол.
regionстрокаРегион.
sourceстрокаИсточник подписки.

members_unsubscribe меняет #

Отписать подписчика. Переводит подписчика в состояние unsubscribed и проставляет время отписки. Если адрес есть в нескольких базах, а list_id в пути указывает на конкретную — отписка затронет только её.

АргументТипОписание
list_idчисло, обязательныйИдентификатор базы.
emailстрока, обязательныйАдрес подписчика, закодированный для URL.
member_idчислоОтписать по идентификатору вместо адреса.
reasonстрокаПричина отписки. Накапливается в статистике причин по базе.

members_move меняет #

Перенести подписчика в другую базу. Переносит активного подписчика в другую базу. Запись меняет принадлежность, идентификатор сохраняется.

Перенос считается подпиской на целевую базу — привязанные к ней автоматизации с событием «добавление в базу» сработают.

АргументТипОписание
list_idчисло, обязательныйИдентификатор исходной базы.
emailстрока, обязательныйАдрес подписчика, закодированный для URL.
to_list_idчисло, обязательныйИдентификатор целевой базы.
member_idчисло, обязательныйИдентификатор переносимой записи из списка подписчиков.

members_copy меняет #

Скопировать подписчика в другую базу. Создаёт копию записи подписчика в другой базе. Исходная запись остаётся на месте; значения дополнительных полей копируются.

АргументТипОписание
list_idчисло, обязательныйИдентификатор исходной базы.
emailстрока, обязательныйАдрес подписчика, закодированный для URL.
to_list_idчисло, обязательныйИдентификатор целевой базы.
member_idчисло, обязательныйИдентификатор копируемой записи из списка подписчиков.

members_activity читает #

История событий подписчика. События подписчика: отправки, доставки, открытия, клики, возвраты, отписки — с привязкой к рассылкам.

АргументТипОписание
list_idчисло, обязательныйИдентификатор базы.
emailстрока, обязательныйАдрес подписчика, закодированный для URL.
filterстрокаТип событий для выборки.

members_status читает #

Текущий статус адреса. Быстрая проверка: в каком состоянии находится конкретный адрес в базе. Дешевле, чем выгружать подписчика целиком.

АргументТипОписание
list_idчисло, обязательныйИдентификатор базы.
emailстрока, обязательныйПроверяемый адрес.

members_check_email читает #

Проверить адрес перед подпиской. Отвечает на вопрос «можно ли добавить этот адрес в базу». Проверяет его по чёрному списку аккаунта, по отпискам в этой базе, по глобальному списку возвратов, а также формат адреса и принадлежность к одноразовым почтовым сервисам.

Полезно вызывать перед добавлением подписчика: так вы заранее отсеете адреса, на которых POST всё равно завершится ошибкой, и не потратите на них попытку.

Примечание. Успешный ответ возвращает адрес в поле valid уже нормализованным — регистр и типичные опечатки в домене исправляются. Добавляйте в базу именно это значение.

Отказы приходят со статусами 409 и 422, но различать причины надёжнее по полю code: статус лишь делит их на «адрес в чёрном списке» и «адрес непригоден».

АргументТипОписание
list_idчисло, обязательныйИдентификатор базы. Проверка отписок выполняется в пределах этой базы; чёрный список и список возвратов действуют на весь аккаунт.
emailстрока, обязательныйПроверяемый адрес.

imports_start меняет #

Запустить импорт подписчиков из файла по URL. Ставит в очередь импорт из файла CSV, XLS, XLSX, TXT или ZIP. Файл либо скачивается по ссылке file, либо загружается как multipart-поле import-file.

Соответствие колонок файла и полей подписчика задаётся номерами колонок, начиная с нуля: email=0 означает, что адрес лежит в первой колонке, merge_1=2 — что первое дополнительное поле лежит в третьей.

Примечание. В одну базу можно поставить не больше пяти задач импорта одновременно. В режиме online импорт запрещён, если в аккаунте уже идёт другой импорт.

Импорт фоновый: результат смотри через imports_status.

АргументТипОписание
list_idчисло, обязательныйИдентификатор базы.
emailчисло, обязательныйНомер колонки с адресом, считая с нуля.
typeстрока, обязательныйРасширение файла. Значения: csv, txt, xls, xlsx, zip.
fileстрока, обязательныйURL файла. Если не задан, файл ожидается в multipart-поле import-file.
mergeобъектДополнительные поля подписчика объектом: ключ — merge_N (номер поля из lists_get), значение — что записать. Номера колонок для дополнительных полей. Поля, помеченные в базе обязательными, должны быть сопоставлены.
genderчислоНомер колонки с полом.
regionчислоНомер колонки с регионом.
modeстрокаСо значением online импорт выполняется синхронно. По умолчанию — фоновая задача.
updateда/нетОбновлять существующих подписчиков.
send_confirmда/нетОтправлять письма подтверждения подписки.
sheet_indexчислоНомер листа книги Excel.
sheet_nameстрокаНазвание листа книги Excel.

imports_status читает #

Результат последнего импорта. Возвращает текстовый отчёт о последнем завершённом импорте в базу.

АргументТипОписание
list_idчисло, обязательныйИдентификатор базы.

imports_history читает #

История импортов. Список задач импорта по базе с их состоянием и итогами.

АргументТипОписание
list_idчисло, обязательныйИдентификатор базы.
import_idчислоВернуть только одну задачу импорта.

Рассылки #

campaigns_list читает #

Рассылки. Возвращает рассылки аккаунта. Удалённые не показываются, если явно не запрошен статус DELETED.

Примечание. Здесь смещение задаётся параметром offset (в отличие от подписчиков, где используется start). По умолчанию возвращается 100 рассылок.

Вёрстка писем в списке не возвращается — за ней campaigns_get с with_html. Статусы: DRAFT черновик, SCHEDULE запланирована, MODERATING на модерации, SENT отправлена.

АргументТипОписание
limitчислоСколько рассылок вернуть.
offsetчислоСмещение. Учитывается только вместе с limit.
statusстрокаФильтр по статусу рассылки.
list_idчислоТолько рассылки по указанной адресной базе.
startстрокаРассылки не раньше этой даты. Для статуса SENT сравнивается время отправки, иначе — время последнего изменения. Формат YYYY-MM-DD.
endстрокаРассылки не позже этой даты. Формат YYYY-MM-DD.
external_campaign_idстрокаПоиск по вашему внешнему идентификатору.
workflowчислоТолько письма указанной цепочки автоматизации.

campaigns_get читает #

Одна рассылка. Возвращает рассылку целиком, включая HTML- и текстовую версии письма.

АргументТипОписание
campaign_idчисло, обязательныйИдентификатор рассылки.
with_htmlда/нетВернуть также поля html, plain_text, amp (по умолчанию они вырезаны, чтобы не раздувать ответ).

campaigns_create меняет #

Создать черновик рассылки. Создаёт черновик рассылки. Отправка не начинается — для этого нужно перевести рассылку в статус запуска.

Содержимое письма можно передать сразу в html, а можно наполнить позже.

Создаёт только черновик — письма не уходят. Запуск отдельными инструментами campaigns_schedule и campaigns_send_now. from_email должен быть из senders_list. В html обязательна ссылка отписки вида <a id="unsub_link" href="%ОТПИСАТЬСЯ%">Отписаться</a>, в plain_text — метка %ОТПИСАТЬСЯ%; без них запуск будет отклонён.

АргументТипОписание
list_idчисло или массив, обязательныйАдресная база. Для рассылки по нескольким базам передайте JSON-массив идентификаторов: "[128341,128342]". Один id числом или массив id.
subjectстрока, обязательныйТема письма. Поддерживает подстановки вида %ИМЯ%.
from_emailстрока, обязательныйАдрес отправителя. Домен должен быть подтверждён в аккаунте.
from_nameстрока, обязательныйИмя отправителя.
nameстрокаВнутреннее название рассылки, получателям не видно.
htmlстрокаHTML-версия письма. Вместо вёрстки можно передать id сохранённого шаблона числом, либо tmpl<campaign_id>, чтобы взять вёрстку другой рассылки.
plain_textстрокаТекстовая версия письма.
ampстрокаAMP-версия письма. Требует включённой поддержки AMP на аккаунте.
track_opensстрокаОтслеживать открытия. Значения: Y, N.
track_clicksстрокаОтслеживать клики. Значения: Y, N.
plain_clicksстрокаОтслеживать клики и в текстовой версии. Значения: Y, N.
esegmentобъект или массив или строкаУсловия сегментации базы. Структура: {"match":"and","c":[{"field":"…","op":"…","value":"…"}]}. При рассылке по нескольким базам — объект, где ключ это list_id. Передавай объектом или массивом; готовая JSON-строка тоже принимается.
external_campaign_idстрокаВаш идентификатор рассылки для сопоставления с внешней системой.
personalizeToEmailстрокаПодставлять имя получателя в поле «Кому».
to_emailстрокаШаблон отображаемого имени получателя, например %ИМЯ%.
analyticsстрокаДобавлять UTM-метки к ссылкам. Значения: Y, N.
analytics_tagстрокаЗначение utm_campaign.
analytics_sourceстрокаЗначение utm_source.
analytics_mediumстрокаЗначение utm_medium.
analytics_contentстрокаЗначение utm_content.
analytics_termстрокаЗначение utm_term.
allow_time_zoneда/нетОтправлять с учётом часового пояса получателя.
allow_best_timeда/нетОтправлять в наиболее удачное для получателя время.
limitчислоОграничить скорость отправки — сколько писем за интервал wait_time.
wait_timeчислоИнтервал ограничения скорости в минутах.
no_images_addда/нетНе добавлять изображения автоматически.
dialogs_enabledда/нетВключить приём ответов через Даша.Диалоги. Несовместимо с собственным Reply-To — при конфликте побеждают диалоги.
stat_domainстрокаДомен для ссылок статистики. Должен быть подтверждён в аккаунте.

campaigns_update меняет #

Изменить черновик рассылки. Меняет только переданные поля рассылки. Изменять можно рассылки в статусах DRAFT, SCHEDULE, TRIGGER и TEMPLATE; уже отправляющуюся изменить нельзя. Запуск отправки — отдельными инструментами campaigns_schedule и campaigns_send_now.

АргументТипОписание
campaign_idчисло, обязательныйИдентификатор рассылки.
subjectстрокаТема письма.
from_emailстрокаАдрес отправителя.
from_nameстрокаИмя отправителя.
nameстрокаВнутреннее название.
list_idчисло или массивСменить адресную базу или набор баз. Один id числом или массив id.
htmlстрокаHTML-версия письма.
plain_textстрокаТекстовая версия письма.
esegmentобъект или массив или строкаУсловия сегментации. Передавай объектом или массивом; готовая JSON-строка тоже принимается.
track_opensстрокаОтслеживание открытий. Значения: Y, N.
track_clicksстрокаОтслеживание кликов. Значения: Y, N.
stat_domainстрокаДомен статистики.

campaigns_schedule отправляет #

Запланировать отправку рассылки. Запускает черновик по расписанию: рассылка уйдёт всей аудитории базы (с учётом сегмента) в delivery_time по московскому времени. Перед запуском API проверяет тему, отправителя, текст письма и ссылку отписки.

Отменить через API нельзя — только в кабинете.

Действие необратимо: уходят письма. Перед вызовом покажи пользователю параметры и дождись явного подтверждения.

АргументТипОписание
campaign_idчисло, обязательныйИдентификатор рассылки.
delivery_timeстрока, обязательныйВремя запланированной отправки. Обязателен при status=SCHEDULE. Формат YYYY-MM-DD HH:MM:SS, московское время.

campaigns_send_now отправляет #

Отправить рассылку сейчас. Запускает черновик немедленно: рассылка уходит всей аудитории базы (с учётом сегмента) сразу после модерации. Перед запуском API проверяет тему, отправителя, текст письма и ссылку отписки.

Отменить через API нельзя — только в кабинете.

Действие необратимо: уходят письма. Перед вызовом покажи пользователю параметры и дождись явного подтверждения.

АргументТипОписание
campaign_idчисло, обязательныйИдентификатор рассылки.

campaigns_pause меняет #

Приостановить отправку. Приостанавливает идущую рассылку. Уже отправленные письма не отзываются.

АргументТипОписание
campaign_idчисло, обязательныйИдентификатор рассылки.

campaigns_resume меняет #

Возобновить отправку. Продолжает рассылку, поставленную на паузу, с того места, где она остановилась.

АргументТипОписание
campaign_idчисло, обязательныйИдентификатор рассылки.

campaigns_resend_unopened отправляет #

Переотправить неоткрывшим. Создаёт новую рассылку по тем получателям исходной, кто её не открыл. Обычный приём — повторить письмо через несколько дней с другой темой.

Действие необратимо: уходят письма. Перед вызовом покажи пользователю параметры и дождись явного подтверждения.

АргументТипОписание
campaign_idчисло, обязательныйИдентификатор исходной рассылки.
new_subjectстрокаТема повторного письма. По умолчанию берётся исходная.

campaigns_copy меняет #

Скопировать рассылку. Создаёт копию рассылки вместе с вёрсткой. Копия отправленной или заблокированной рассылки всегда получает статус DRAFT.

Удобный способ сделать новую рассылку по образцу старой: копия создаётся черновиком.

АргументТипОписание
campaign_idчисло, обязательныйИдентификатор исходной рассылки.
nameстрокаНазвание копии. По умолчанию совпадает с исходным.

folders_list читает #

Папки рассылок. Список папок, по которым разложены рассылки.

АргументТипОписание
idчислоВернуть одну папку.
nameстрокаНайти папку по точному названию.

campaigns_move_to_folder меняет #

Переместить рассылку в папку. Перекладывает рассылку в указанную папку.

АргументТипОписание
campaign_idчисло, обязательныйИдентификатор рассылки.
folder_idчисло, обязательныйИдентификатор папки из списка папок.

campaigns_delete удаляет #

Удалить черновик рассылки. Удаляет рассылку, только если она черновик или шаблон (статус DRAFT или TEMPLATE). Отправленные и запланированные рассылки не трогает. Действие необратимо. Перед вызовом получи явное подтверждение пользователя.

АргументТипОписание
campaign_idчисло, обязательныйИдентификатор рассылки.

Шаблоны #

templates_list читает #

Сохранённые шаблоны аккаунта. Возвращает рассылки в статусе TEMPLATE — без вёрстки, только идентификатор, название и папку. Чтобы получить HTML, запросите рассылку через её эндпоинт.

АргументТипОписание
idчислоВернуть одну запись.
nameстрокаНайти по точному названию.

Готовые шаблоны из галереи. Возвращает сохранённые HTML-шаблоны аккаунта вместе с вёрсткой, от новых к старым.

АргументТипОписание
idчислоВернуть один шаблон.
nameстрокаНайти шаблон по точному названию.

templates_create меняет #

Сохранить HTML-шаблон. Сохраняет вёрстку как HTML-шаблон.

В template можно передать либо саму вёрстку, либо число — идентификатор рассылки, чью вёрстку нужно сохранить.

АргументТипОписание
nameстрока, обязательныйНазвание шаблона.
templateстрока, обязательныйHTML-вёрстка либо campaign_id числом.
campaign_idчислоРассылка-источник вёрстки. Указывается вместе с числовым template.

Автоматизации #

automations_list читает #

Автоматизации. Возвращает автоматизации аккаунта вместе с настройками события и задержки.

АргументТипОписание
idчислоВернуть одну автоматизацию.

automations_trigger отправляет #

Запустить автоматизацию для адреса. Отправляет письмо автоматизации конкретному подписчику, не дожидаясь события. Удобно для проверки вёрстки и для сценариев, где момент отправки решает ваша система.

Примечание. Предыдущая отправка этого письма тому же подписчику сбрасывается, поэтому повторный запуск сработает даже если письмо уже уходило.

Действие необратимо: уходят письма. Перед вызовом покажи пользователю параметры и дождись явного подтверждения.

АргументТипОписание
campaign_idчисло, обязательныйИдентификатор автоматизации.
emailстрока, обязательныйАдрес получателя. Подписчик должен существовать в аккаунте.
member_idчислоИдентификатор подписчика вместо адреса.
delayчислоЗадержка в секундах. Без неё письмо уходит немедленно, с ней — планируется на указанное время.

Отчёты #

reports_summary читает #

Сводка по рассылке или по аккаунту. Главные показатели рассылки одним объектом. Отсюда стоит начинать: остальные отчёты нужны, когда требуется детализация.

Примечание. Параметр fast отдаёт заранее посчитанные значения — это заметно быстрее, но несовместимо с фильтром по времени.

Без campaign_id (или с 0) — сводка по всему аккаунту за период time_start…time_end; detailed=1 разбивает её по рассылкам. Метрики: sent отправлено, unique_opened уникальные открытия, opened все открытия, unique_clicked уникальные клики, unsubscribed, complained, hard/soft — возвраты. OR = unique_opened / sent, CTR = unique_clicked / sent, CTOR = unique_clicked / unique_opened. За период sent не возвращается.

АргументТипОписание
campaign_idчислоИдентификатор рассылки.
fastда/нетВзять готовые агрегаты вместо пересчёта. Игнорируется, если задан период.
time_startстрокаНачало периода. При заданном периоде поле sent из ответа исключается. Формат YYYY-MM-DD HH:MM:SS, московское время.
time_endстрокаКонец периода. Формат YYYY-MM-DD HH:MM:SS, московское время.
detailedчислоСо значением 1 сводка разбивается по рассылкам.

reports_recipients читает #

Получатели по событию. Возвращает подписчиков, с которыми произошло указанное событие. Один и тот же формат для семи метрик: sent, delivered, opened, clicked, bounced, complained, unsubscribed.

metric: sent, delivered, opened, clicked, bounced, complained, unsubscribed. Постранично через start/limit.

АргументТипОписание
campaign_idчисло, обязательныйИдентификатор рассылки.
metricстрока, обязательныйСобытие. Значения: sent, delivered, opened, clicked, bounced, complained, unsubscribed.
startчислоСмещение.
limitчислоРазмер страницы.
orderстрокаСортировка, см. список полей.

reports_events читает #

Лента событий рассылки. Все события рассылки в одном потоке, с фильтрами по времени, типу и подписчику. Подходит для синхронизации событий с вашей аналитикой.

Примечание. По умолчанию берутся события за сегодня. Чтобы получить события за другой период, задайте time_start и time_end явно.

АргументТипОписание
campaign_idчисло, обязательныйИдентификатор рассылки.
time_startстрокаНачало периода. Формат YYYY-MM-DD HH:MM:SS, московское время.
time_endстрокаКонец периода. Формат YYYY-MM-DD HH:MM:SS, московское время.
event_typeстрокаОставить события одного типа. Значения: SENT, OPENED, CLICKED, PREVIEW, UNSUBSCRIBED, COMPLAINED, BOUNCED.
emailстрокаСобытия одного подписчика.
mergeобъект или массив или строкаДополнительные поля подписчика, которые нужно приложить к каждому событию — например ["merge_1","merge_2"]. Передавай объектом или массивом; готовая JSON-строка тоже принимается.
startчислоСмещение.
limitчислоРазмер страницы.
orderстрокаСортировка.

Клики по ссылкам. Сколько раз кликнули по каждой ссылке письма, от популярных к редким.

АргументТипОписание
campaign_idчисло, обязательныйИдентификатор рассылки.

Кто кликнул по ссылке. Подписчики, кликнувшие по указанной ссылке, со временем клика. Выборка ограничена последним годом.

АргументТипОписание
campaign_idчисло, обязательныйИдентификатор рассылки.
urlстрока, обязательныйСсылка целиком, в точности как в отчёте по кликам.

reports_bounces читает #

Возвраты по SMTP-кодам. Группировка возвратов по SMTP-кодам с расшифровкой. Помогает понять, дело в несуществующих адресах или в репутации отправителя.

АргументТипОписание
campaign_idчисло, обязательныйИдентификатор рассылки.

reports_domains читает #

Статистика по почтовым доменам получателей. Доставляемость и вовлечённость в разрезе почтовых провайдеров. Проседание по одному домену обычно означает проблему с репутацией именно у него.

АргументТипОписание
campaign_idчисло, обязательныйИдентификатор рассылки.
time_startстрокаНачало периода. Формат YYYY-MM-DD HH:MM:SS, московское время.
time_endстрокаКонец периода. Формат YYYY-MM-DD HH:MM:SS, московское время.
startчислоСмещение.
limitчислоРазмер страницы.
order_fieldстрокаПоле сортировки.
order_typeстрокаНаправление сортировки. Значения: asc, desc.

reports_geo читает #

География открытий. Распределение событий по регионам. Ключ — код региона, значение — количество событий.

АргументТипОписание
campaign_idчисло, обязательныйИдентификатор рассылки.

reports_clients читает #

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

АргументТипОписание
campaign_idчисло, обязательныйИдентификатор рассылки.

Транзакционные письма #

transactional_send отправляет #

Отправить транзакционное письмо. Ставит письмо в очередь отправки и сразу возвращает его идентификатор. Фактическая доставка происходит асинхронно — следите за ней через проверку статуса или webhooks.

Нужны как минимум три вещи: получатель, отправитель (from_email либо заголовок From внутри headers) и текст письма (message либо plain_text).

Примечание. В to можно перечислить несколько адресов через запятую. Тогда каждому уйдёт отдельное письмо, а в message_id можно передать столько же идентификаторов, тоже через запятую.

Одно письмо одному или нескольким адресам (to через запятую). Домен from_email должен быть подтверждён (domains_list). message_id — свой идентификатор для идемпотентности и последующего transactional_get.

Действие необратимо: уходят письма. Перед вызовом покажи пользователю параметры и дождись явного подтверждения.

АргументТипОписание
toстрока, обязательныйАдрес получателя. Допустима форма Иван Петров <ivan@example.com>. Несколько адресов перечисляются через запятую.
from_emailстрока, обязательныйАдрес отправителя на подтверждённом домене. Можно не передавать, если заголовок From задан внутри headers.
messageстрока, обязательныйHTML-версия письма. Можно не передавать, если задан plain_text.
from_nameстрокаИмя отправителя. Без него в поле «От кого» подставится сам адрес.
subjectстрокаТема письма.
plain_textстрокаТекстовая версия письма.
message_idстрокаВаш идентификатор письма. Если не задан, генерируется автоматически и возвращается в ответе.
ccстрокаКопия. Несколько адресов — через запятую.
bccстрокаСкрытая копия.
headersобъект или массив или строкаПроизвольные заголовки письма объектом — например {"Reply-To":"support@example.ru"}. Заданный здесь From заменяет from_email. Передавай объектом или массивом; готовая JSON-строка тоже принимается.
attachmentsобъект или массив или строкаМассив вложений: [{"name":"чек.pdf","filebody":"<base64>"}]. Файлы .php и .exe запрещены, суммарный размер ограничен тарифом. Передавай объектом или массивом; готовая JSON-строка тоже принимается.
inlineобъект или массив или строкаВстроенные в вёрстку изображения: [{"cid":"logo","mime_type":"image/png","filename":"logo.png","body":"<base64>"}]. В HTML на них ссылаются как <img src="cid:logo">. Допустимы только image/jpeg, image/png, image/gif. Передавай объектом или массивом; готовая JSON-строка тоже принимается.
delivery_timeчислоUnix-время отложенной отправки. Без него письмо уходит немедленно. Unix-время.
domainстрокаДомен отправки, если в аккаунте их несколько.
stat_domainстрокаДомен для ссылок отслеживания.

transactional_get читает #

Статус транзакционного письма. Возвращает текущий статус письма и historию его событий. Данные появляются через несколько секунд после отправки.

Примечание. Поиск по конкретному письму доступен за последние шесть месяцев. За более старыми данными обращайтесь к журналу.

Возвращает текущий статус и историю: 5 Sent, 3 Delivered, 7 Opened, 6 Clicked, 4 Bounced, 9 Complained, 8 Unsubscribed. Глубина — 6 месяцев.

АргументТипОписание
transaction_idстрока, обязательныйИдентификатор письма из ответа на отправку.

transactional_log читает #

Журнал транзакционных писем. События транзакционных писем аккаунта с фильтрами. Основной инструмент для разбора инцидентов: «почему клиент не получил письмо».

Ошибка с code 34 означает, что в аккаунте не настроен домен транзакционной отправки (domains_list) — журнала нет, это не сбой.

АргументТипОписание
startчислоСмещение.
limitчислоРазмер страницы.
sortстрокаНаправление сортировки по времени события. Значения: ASC, DESC.
message_idстрокаСобытия одного письма.
campaign_idстрокаСобытия одной кампании.
event_typeстрокаТипы событий через запятую либо all. Значения: SENT, DELIVERED, OPENED, CLICKED, BOUNCED, COMPLAINED, UNSUBSCRIBED, all.
emailsстрокаАдреса получателей через запятую.
fromстрокаНачало периода. Формат YYYY-MM-DD HH:MM:SS, московское время.
toстрокаКонец периода. Формат YYYY-MM-DD HH:MM:SS, московское время.
urlстрокаФильтр по ссылке для событий клика.

transactional_stats читает #

Статистика транзакционных писем по периодам. Агрегированные показатели транзакционных писем за период, разложенные по временным интервалам. Годится для построения графиков доставляемости.

Примечание. Ширина интервала подбирается по периоду автоматически: пять минут для 1h, час для 24h, сутки для 7d и 30d.

Ошибка с code 34 означает, что в аккаунте не настроен домен транзакционной отправки — статистики нет, это не сбой.

АргументТипОписание
periodстрокаПериод отчёта. Значение custom включает start_date и finish_date. Значения: 1h, 24h, 7d, 30d, custom.
start_dateстрокаНачало периода при period=custom. Формат YYYY-MM-DD HH:MM:SS, московское время.
finish_dateстрокаКонец периода при period=custom. Формат YYYY-MM-DD HH:MM:SS, московское время.
groupbyстрокаШаг группировки при period=custom. Значения: hour, day, week, month.
campaign_idстрокаТолько письма указанной кампании.
domainстрокаТолько письма с указанного домена отправки.
startчислоСмещение.
limitчислоРазмер страницы.

Вебхуки #

webhooks_list читает #

Вебхуки массовых рассылок. Текущие адреса, на которые уходят события массовых рассылок — объект вида «событие → URL».

АргументТипОписание
event_nameстрокаВернуть настройку только одного события. Значения: open, click, hard, spam, unsub, subscribe, confirm.

webhooks_set меняет #

Задать URL вебхука массовых рассылок. Задаёт адреса приёма событий. Ключ каждого параметра — имя события, значение — URL. Передавайте только те события, которые нужно изменить; пустая строка отключает событие.

Одно событие — один URL (https). Пустой url отключает событие. События: open, click, hard, spam, unsub, subscribe, confirm.

АргументТипОписание
urlстрока, обязательныйСлужебный параметр запроса — продублируйте сюда любой из указанных выше адресов.
eventстрока, обязательныйСлужебный параметр запроса — имя настраиваемого события.

webhooks_delete удаляет #

Удалить вебхук массовых рассылок. Отключает приём событий указанного типа.

Внимание. Если event_name не распознан, удаляются настройки всех событий сразу. Проверяйте имя события перед вызовом.

Действие необратимо. Перед вызовом получи явное подтверждение пользователя.

АргументТипОписание
event_nameстрока, обязательныйИмя события. Значения: open, click, hard, spam, unsub, subscribe, confirm.

webhooks_list_transactional читает #

Вебхуки транзакционных писем. Адреса приёма событий транзакционных писем. Набор событий отличается от массовых рассылок — здесь есть send, delivered и dropped.

АргументТипОписание
event_nameстрокаВернуть настройку одного события. Значения: dropped, open, click, hard, spam, unsub, delivered, send.

webhooks_set_transactional меняет #

Задать URL вебхука транзакционных писем. Задаёт адреса приёма событий транзакционных писем. Формат тот же, что и для массовых рассылок: ключ — имя события, значение — URL.

Одно событие — один URL (https). Пустой url отключает событие. События: send, delivered, dropped, open, click, hard, spam, unsub.

АргументТипОписание
urlстрока, обязательныйСлужебный параметр запроса — продублируйте сюда любой из указанных выше адресов.
eventстрока, обязательныйСлужебный параметр запроса — имя настраиваемого события.

webhooks_delete_transactional удаляет #

Удалить вебхук транзакционных писем. Отключает приём событий указанного типа для транзакционных писем.

Внимание. Как и для массовых рассылок: нераспознанное имя события приводит к удалению настроек всех событий.

Действие необратимо. Перед вызовом получи явное подтверждение пользователя.

АргументТипОписание
event_nameстрока, обязательныйИмя события. Значения: dropped, open, click, hard, spam, unsub, delivered, send.

Обработка входящих #

router_routes_list читает #

Маршруты входящей почты. Все маршруты аккаунта в порядке применения — по возрастанию priority.

Без аргументов.

router_messages_list читает #

Входящие письма Роутера. Письма, сохранённые действием store. Тело письма в список не входит — забирайте его поштучно.

АргументТипОписание
route_idчислоТолько письма указанного маршрута.
recipientстрокаФильтр по адресу получателя.
sinceстрокаПисьма, полученные не раньше. Формат YYYY-MM-DD HH:MM:SS, московское время.
untilстрокаПисьма, полученные не позже. Формат YYYY-MM-DD HH:MM:SS, московское время.
limitчислоРазмер страницы.
offsetчислоСмещение.

router_messages_get читает #

Одно входящее письмо Роутера. Возвращает разобранное письмо: заголовки, текстовую и HTML-версии, перечень вложений.

АргументТипОписание
message_idчисло, обязательныйИдентификатор письма.

router_deliveries_list читает #

Доставки Роутера. Попытки доставки писем на ваши webhook-адреса и адреса пересылки. Первое место, куда стоит смотреть, если письма до вашей системы не доходят.

АргументТипОписание
route_idчислоТолько доставки указанного маршрута.
statusстрокаФильтр по результату доставки.
recipientстрокаФильтр по адресу получателя исходного письма.
sinceстрокаНе раньше указанного момента. Формат YYYY-MM-DD HH:MM:SS, московское время.
untilстрокаНе позже указанного момента. Формат YYYY-MM-DD HH:MM:SS, московское время.
limitчислоРазмер страницы.
offsetчислоСмещение.

Служебные #

whoami читает #

Кто я. Аккаунт, от имени которого работает подключение: идентификаторы, логин, права токена, а при праве account.read — тариф и баланс; плюс активный набор инструментов и режим «только чтение». Вызывай первым, если не знаешь, с каким аккаунтом работаешь.

Без аргументов.

Ссылка на страницу кабинета. Ссылка на страницу личного кабинета DashaMail — когда пользователю удобнее доделать руками: отчёт по рассылке, подписчики базы, поля базы, API-ключи.

АргументТипОписание
kindстрока, обязательныйКакая страница. Значения: campaigns, campaign_report, campaign_activity, lists, list_members, list_fields, api_keys.
idчислоid рассылки или базы — для страниц, где он нужен.

DashaMail хранит и защищает ваши данные на территории Российской Федерации

Подробнее...