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

Рассылки

Массовые письма по адресной базе: создание, вёрстка, запуск, пауза, вложения и папки.

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

Жизненный цикл

POST /campaigns                     → DRAFT      черновик создан
PUT  /campaigns/{id}                → DRAFT      правим тему, вёрстку, базу
PUT  /campaigns/{id} status=SCHEDULE→ SCHEDULE   запланирована на delivery_time
PUT  /campaigns/{id} status=MODERATING → отправка сразу после модерации
                                    → PROCESSING идёт отправка
                                    → SENT       отправлена

Статусы

DRAFTЧерновик. Можно менять всё
MODERATINGОтправлена на модерацию; уйдёт сразу после её прохождения
SCHEDULEЗапланирована на delivery_time
CREATED, PROCESSINGОтправка идёт. Изменить рассылку уже нельзя
SENTОтправлена
PAUSEDОтправка приостановлена
TEMPLATEСохранённый шаблон, а не рассылка
SUBSCRIBE, TRIGGERАвтоматизация, не обычная рассылка
BLOCKED, BLOCKED-SPAMЗаблокирована модератором
DELETEDУдалена

Рассылка не запустится без ссылки отписки — это требование антиспам-законодательства, и API проверяет его на этапе запуска:

  • в HTML-версии нужен тег со свойством id="unsub_link":
    <a id="unsub_link" href="%ОТПИСАТЬСЯ%">отписаться</a>
  • в текстовой версии нужна подстановка %ОТПИСАТЬСЯ%;
  • в AMP-версии — тег с id="unsub_link".

Список рассылок #

GET /campaigns

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

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

Параметры строки запроса

ПараметрТипОписание
limitintegerпо умолчанию: 100Сколько рассылок вернуть.
offsetintegerпо умолчанию: 0Смещение. Учитывается только вместе с limit.
statusstringФильтр по статусу рассылки.
list_idintegerТолько рассылки по указанной адресной базе.
startdateРассылки не раньше этой даты. Для статуса SENT сравнивается время отправки, иначе — время последнего изменения.
enddateРассылки не позже этой даты.
external_campaign_idstringПоиск по вашему внешнему идентификатору.
workflowintegerТолько письма указанной цепочки автоматизации.
merge_jsonфлагОтдавать вложенные структуры как JSON.

Возможные ошибки

HTTPcodeКогда возникает
404 4 Рассылок, подходящих под фильтр, нет
curl -X GET 'https://api.dashamail.com/v2/campaigns?status=SENT&limit=2' \
  -H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/campaigns?status=SENT&limit=2');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'GET',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
    ],
]);

$response = json_decode(curl_exec($ch), true);
$status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException($response['error']['message']);
}
print_r($response['response']['data']);
import requests

response = requests.get(
    'https://api.dashamail.com/v2/campaigns?status=SENT&limit=2',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/campaigns?status=SENT&limit=2', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
  },
});

const payload = await response.json();
if (!response.ok) throw new Error(payload.error.message);
console.log(payload.response.data);
Ответ HTTP 200
{
  "response": {
    "msg": {
      "err_code": 0,
      "text": "OK",
      "type": "message"
    },
    "data": [
      {
        "id": 501233,
        "name": "Весенняя распродажа",
        "subject": "Скидки до 40%",
        "from_name": "Ромашка",
        "from_email": "news@example.ru",
        "list_id": "128341",
        "status": "SENT",
        "delivery_time": "2026-04-05 10:00:00",
        "sent": 1284
      },
      {
        "id": 501199,
        "name": "Мартовский дайджест",
        "subject": "Что нового",
        "from_name": "Ромашка",
        "from_email": "news@example.ru",
        "list_id": "128341",
        "status": "SENT",
        "delivery_time": "2026-03-02 10:00:00",
        "sent": 1201
      }
    ]
  }
}

Одна рассылка #

GET /campaigns/{campaign_id}

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

Параметры пути

ПараметрТипОписание
campaign_id обязательныйintegerИдентификатор рассылки.

Параметры строки запроса

ПараметрТипОписание
merge_jsonфлагОтдавать вложенные структуры как JSON.

Возможные ошибки

HTTPcodeКогда возникает
404 4 Рассылки с таким campaign_id нет
curl -X GET 'https://api.dashamail.com/v2/campaigns/501233' \
  -H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/campaigns/501233');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'GET',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
    ],
]);

$response = json_decode(curl_exec($ch), true);
$status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException($response['error']['message']);
}
print_r($response['response']['data']);
import requests

response = requests.get(
    'https://api.dashamail.com/v2/campaigns/501233',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/campaigns/501233', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
  },
});

const payload = await response.json();
if (!response.ok) throw new Error(payload.error.message);
console.log(payload.response.data);
Ответ HTTP 200
{
  "response": {
    "msg": {
      "err_code": 0,
      "text": "OK",
      "type": "message"
    },
    "data": [
      {
        "id": 501233,
        "name": "Весенняя распродажа",
        "subject": "Скидки до 40%",
        "from_name": "Ромашка",
        "from_email": "news@example.ru",
        "list_id": "128341",
        "status": "SENT",
        "track_opens": "Y",
        "track_clicks": "Y",
        "delivery_time": "2026-04-05 10:00:00",
        "html": "<h1>Скидки</h1><a id=\"unsub_link\" href=\"%ОТПИСАТЬСЯ%\">отписаться</a>",
        "plain_text": "Скидки. Отписаться: %ОТПИСАТЬСЯ%"
      }
    ]
  }
}

Создать рассылку #

POST /campaigns

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

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

Параметры тела запроса

ПараметрТипОписание
list_id обязательныйinteger | JSON-строкаАдресная база. Для рассылки по нескольким базам передайте JSON-массив идентификаторов: "[128341,128342]".
subject обязательныйstringТема письма. Поддерживает подстановки вида %ИМЯ%.
from_email обязательныйstringАдрес отправителя. Домен должен быть подтверждён в аккаунте.
from_name обязательныйstringИмя отправителя.
namestringпо умолчанию: Без Названия + датаВнутреннее название рассылки, получателям не видно.
htmlstringHTML-версия письма. Вместо вёрстки можно передать id сохранённого шаблона числом, либо tmpl<campaign_id>, чтобы взять вёрстку другой рассылки.
plain_textstringТекстовая версия письма.
ampstringAMP-версия письма. Требует включённой поддержки AMP на аккаунте.
track_opensstringпо умолчанию: YОтслеживать открытия.
Допустимые значения: Y, N
track_clicksstringпо умолчанию: YОтслеживать клики.
Допустимые значения: Y, N
plain_clicksstringпо умолчанию: NОтслеживать клики и в текстовой версии.
Допустимые значения: Y, N
esegmentJSON-строкаУсловия сегментации базы. Структура: {"match":"and","c":[{"field":"…","op":"…","value":"…"}]}. При рассылке по нескольким базам — объект, где ключ это list_id.
statusstringпо умолчанию: DRAFTПри создании допустимы только DRAFT и TEMPLATE; любое другое значение приводится к DRAFT.
Допустимые значения: DRAFT, TEMPLATE
external_campaign_idstringВаш идентификатор рассылки для сопоставления с внешней системой.
personalizeToEmailstringпо умолчанию: offПодставлять имя получателя в поле «Кому».
to_emailstringШаблон отображаемого имени получателя, например %ИМЯ%.
analyticsstringпо умолчанию: NДобавлять UTM-метки к ссылкам.
Допустимые значения: Y, N
analytics_tagstringЗначение utm_campaign.
analytics_sourcestringЗначение utm_source.
analytics_mediumstringЗначение utm_medium.
analytics_contentstringЗначение utm_content.
analytics_termstringЗначение utm_term.
allow_time_zoneфлагОтправлять с учётом часового пояса получателя.
allow_best_timeфлагОтправлять в наиболее удачное для получателя время.
limitintegerОграничить скорость отправки — сколько писем за интервал wait_time.
wait_timeintegerИнтервал ограничения скорости в минутах.
no_images_addфлагНе добавлять изображения автоматически.
dialogs_enabledфлагВключить приём ответов через Даша.Диалоги. Несовместимо с собственным Reply-To — при конфликте побеждают диалоги.
stat_domainstringДомен для ссылок статистики. Должен быть подтверждён в аккаунте.
cloudфлагВыгрузить изображения из HTML в облачное хранилище DashaMail.

Что возвращается

Идентификатор созданной рассылки.

Возможные ошибки

HTTPcodeКогда возникает
422 3 Не переданы обязательные параметры
422 6 Адрес отправителя запрещён или не подтверждён
500 38 Некорректная структура esegment
404 5 Указанной адресной базы не существует
curl -X POST 'https://api.dashamail.com/v2/campaigns' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "list_id": 128341,
  "subject": "Скидки до 40%",
  "from_email": "news@example.ru",
  "from_name": "Ромашка",
  "name": "Весенняя распродажа",
  "html": "<h1>Скидки до 40%</h1><p><a id=\"unsub_link\" href=\"%ОТПИСАТЬСЯ%\">отписаться</a></p>",
  "track_opens": "Y"
}'
<?php
$ch = curl_init('https://api.dashamail.com/v2/campaigns');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS     => json_encode([
            'list_id' => 128341,
            'subject' => 'Скидки до 40%',
            'from_email' => 'news@example.ru',
            'from_name' => 'Ромашка',
            'name' => 'Весенняя распродажа',
            'html' => '<h1>Скидки до 40%</h1><p><a id="unsub_link" href="%ОТПИСАТЬСЯ%">отписаться</a></p>',
            'track_opens' => 'Y',
        ], JSON_UNESCAPED_UNICODE),
]);

$response = json_decode(curl_exec($ch), true);
$status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException($response['error']['message']);
}
print_r($response['response']['data']);
import requests

response = requests.post(
    'https://api.dashamail.com/v2/campaigns',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
    json={
        'list_id': 128341,
        'subject': 'Скидки до 40%',
        'from_email': 'news@example.ru',
        'from_name': 'Ромашка',
        'name': 'Весенняя распродажа',
        'html': '<h1>Скидки до 40%</h1><p><a id="unsub_link" href="%ОТПИСАТЬСЯ%">отписаться</a></p>',
        'track_opens': 'Y',
    },
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/campaigns', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
  "list_id": 128341,
  "subject": "Скидки до 40%",
  "from_email": "news@example.ru",
  "from_name": "Ромашка",
  "name": "Весенняя распродажа",
  "html": "<h1>Скидки до 40%</h1><p><a id=\"unsub_link\" href=\"%ОТПИСАТЬСЯ%\">отписаться</a></p>",
  "track_opens": "Y"
}),
});

const payload = await response.json();
if (!response.ok) throw new Error(payload.error.message);
console.log(payload.response.data);
Ответ HTTP 201
{
  "response": {
    "msg": {
      "err_code": 0,
      "text": "OK",
      "type": "message"
    },
    "data": {
      "campaign_id": 501233
    }
  }
}

Изменить и запустить рассылку #

PUT /campaigns/{campaign_id}

Меняет черновик и — через параметр status — запускает отправку.

Изменять можно рассылки в статусах DRAFT, SCHEDULE, TRIGGER и TEMPLATE. Уже отправляющуюся рассылку изменить нельзя.

Как отправить рассылку. Передайте status=MODERATING, чтобы письмо ушло сразу после модерации, либо status=SCHEDULE вместе с delivery_time, чтобы запланировать отправку. Перед запуском проверяются тема, отправитель, наличие текста письма и ссылки отписки.

Параметры пути

ПараметрТипОписание
campaign_id обязательныйintegerИдентификатор рассылки.

Параметры тела запроса

ПараметрТипОписание
statusstringНовый статус. Запуск отправки — MODERATING или SCHEDULE.
Допустимые значения: DRAFT, MODERATING, SCHEDULE, TEMPLATE
delivery_timedatetimeВремя запланированной отправки. Обязателен при status=SCHEDULE.
subjectstringТема письма.
from_emailstringАдрес отправителя.
from_namestringИмя отправителя.
namestringВнутреннее название.
list_idinteger | JSON-строкаСменить адресную базу или набор баз.
htmlstringHTML-версия письма.
plain_textstringТекстовая версия письма.
esegmentJSON-строкаУсловия сегментации.
track_opensstringОтслеживание открытий.
Допустимые значения: Y, N
track_clicksstringОтслеживание кликов.
Допустимые значения: Y, N
stat_domainstringДомен статистики.

Возможные ошибки

HTTPcodeКогда возникает
404 22 Рассылки с таким campaign_id нет либо её статус не допускает изменений
409 21 Рассылка уже отправляется
500 20 Недопустимое значение status
500 13 При SCHEDULE не задан delivery_time
500 14 Не задана тема письма
500 15 Не задано имя отправителя
500 16 Не задан адрес отправителя
500 17 Нет ни HTML-, ни текстовой версии
500 18 В HTML нет ссылки отписки с id="unsub_link"
500 19 В тексте нет подстановки %ОТПИСАТЬСЯ%
402 25 Недостаточно средств на балансе
403 30 Отправка заблокирована по подозрению в спаме
curl -X PUT 'https://api.dashamail.com/v2/campaigns/501233' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "status": "SCHEDULE",
  "delivery_time": "2026-05-01 10:00:00"
}'
<?php
$ch = curl_init('https://api.dashamail.com/v2/campaigns/501233');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS     => json_encode([
            'status' => 'SCHEDULE',
            'delivery_time' => '2026-05-01 10:00:00',
        ], JSON_UNESCAPED_UNICODE),
]);

$response = json_decode(curl_exec($ch), true);
$status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException($response['error']['message']);
}
print_r($response['response']['data']);
import requests

response = requests.put(
    'https://api.dashamail.com/v2/campaigns/501233',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
    json={
        'status': 'SCHEDULE',
        'delivery_time': '2026-05-01 10:00:00',
    },
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/campaigns/501233', {
  method: 'PUT',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
  "status": "SCHEDULE",
  "delivery_time": "2026-05-01 10:00:00"
}),
});

const payload = await response.json();
if (!response.ok) throw new Error(payload.error.message);
console.log(payload.response.data);
Ответ HTTP 200
{
  "response": {
    "msg": {
      "err_code": 0,
      "text": "OK",
      "type": "message"
    },
    "data": true
  }
}

Удалить рассылку #

DELETE /campaigns/{campaign_id}

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

Параметры пути

ПараметрТипОписание
campaign_id обязательныйintegerИдентификатор рассылки.

Возможные ошибки

HTTPcodeКогда возникает
404 22 Рассылки с таким campaign_id нет
curl -X DELETE 'https://api.dashamail.com/v2/campaigns/501233' \
  -H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/campaigns/501233');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'DELETE',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
    ],
]);

$response = json_decode(curl_exec($ch), true);
$status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException($response['error']['message']);
}
print_r($response['response']['data']);
import requests

response = requests.delete(
    'https://api.dashamail.com/v2/campaigns/501233',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/campaigns/501233', {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
  },
});

const payload = await response.json();
if (!response.ok) throw new Error(payload.error.message);
console.log(payload.response.data);
Ответ HTTP 204
(тело ответа пустое)

Скопировать рассылку #

POST /campaigns/{campaign_id}/copy

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

Параметры пути

ПараметрТипОписание
campaign_id обязательныйintegerИдентификатор исходной рассылки.

Параметры тела запроса

ПараметрТипОписание
namestringНазвание копии. По умолчанию совпадает с исходным.
client_idintegerСоздать копию в аккаунте клиента. Доступно партнёрским аккаунтам.

Что возвращается

Идентификатор созданной копии.

Возможные ошибки

HTTPcodeКогда возникает
404 22 Исходной рассылки нет
curl -X POST 'https://api.dashamail.com/v2/campaigns/501233/copy' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "name": "Весенняя распродажа — повтор"
}'
<?php
$ch = curl_init('https://api.dashamail.com/v2/campaigns/501233/copy');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS     => json_encode([
            'name' => 'Весенняя распродажа — повтор',
        ], JSON_UNESCAPED_UNICODE),
]);

$response = json_decode(curl_exec($ch), true);
$status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException($response['error']['message']);
}
print_r($response['response']['data']);
import requests

response = requests.post(
    'https://api.dashamail.com/v2/campaigns/501233/copy',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
    json={
        'name': 'Весенняя распродажа — повтор',
    },
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/campaigns/501233/copy', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
  "name": "Весенняя распродажа — повтор"
}),
});

const payload = await response.json();
if (!response.ok) throw new Error(payload.error.message);
console.log(payload.response.data);
Ответ HTTP 201
{
  "response": {
    "msg": {
      "err_code": 0,
      "text": "OK",
      "type": "message"
    },
    "data": {
      "campaign_id": 501240
    }
  }
}

Поставить отправку на паузу #

POST /campaigns/{campaign_id}/pause

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

Параметры пути

ПараметрТипОписание
campaign_id обязательныйintegerИдентификатор рассылки.

Возможные ошибки

HTTPcodeКогда возникает
500 41 Рассылка сейчас не отправляется
404 22 Рассылки с таким campaign_id нет
curl -X POST 'https://api.dashamail.com/v2/campaigns/501233/pause' \
  -H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/campaigns/501233/pause');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
    ],
]);

$response = json_decode(curl_exec($ch), true);
$status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException($response['error']['message']);
}
print_r($response['response']['data']);
import requests

response = requests.post(
    'https://api.dashamail.com/v2/campaigns/501233/pause',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/campaigns/501233/pause', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
  },
});

const payload = await response.json();
if (!response.ok) throw new Error(payload.error.message);
console.log(payload.response.data);
Ответ HTTP 200
{
  "response": {
    "msg": {
      "err_code": 0,
      "text": "OK",
      "type": "message"
    },
    "data": true
  }
}

Возобновить отправку #

POST /campaigns/{campaign_id}/resume

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

Параметры пути

ПараметрТипОписание
campaign_id обязательныйintegerИдентификатор рассылки.

Возможные ошибки

HTTPcodeКогда возникает
401 42 Рассылки на паузе с таким campaign_id нет
curl -X POST 'https://api.dashamail.com/v2/campaigns/501233/resume' \
  -H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/campaigns/501233/resume');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
    ],
]);

$response = json_decode(curl_exec($ch), true);
$status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException($response['error']['message']);
}
print_r($response['response']['data']);
import requests

response = requests.post(
    'https://api.dashamail.com/v2/campaigns/501233/resume',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/campaigns/501233/resume', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
  },
});

const payload = await response.json();
if (!response.ok) throw new Error(payload.error.message);
console.log(payload.response.data);
Ответ HTTP 200
{
  "response": {
    "msg": {
      "err_code": 0,
      "text": "OK",
      "type": "message"
    },
    "data": true
  }
}

Переотправить неоткрывшим #

POST /campaigns/{campaign_id}/resend

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

Параметры пути

ПараметрТипОписание
campaign_id обязательныйintegerИдентификатор исходной рассылки.

Параметры тела запроса

ПараметрТипОписание
new_subjectstringТема повторного письма. По умолчанию берётся исходная.

Что возвращается

Идентификатор созданной рассылки.

Возможные ошибки

HTTPcodeКогда возникает
404 22 Исходной рассылки нет
500 40 Рассылка не в статусе PROCESSING или SENT
curl -X POST 'https://api.dashamail.com/v2/campaigns/501233/resend' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "new_subject": "Вы не видели: скидки до 40%"
}'
<?php
$ch = curl_init('https://api.dashamail.com/v2/campaigns/501233/resend');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS     => json_encode([
            'new_subject' => 'Вы не видели: скидки до 40%',
        ], JSON_UNESCAPED_UNICODE),
]);

$response = json_decode(curl_exec($ch), true);
$status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException($response['error']['message']);
}
print_r($response['response']['data']);
import requests

response = requests.post(
    'https://api.dashamail.com/v2/campaigns/501233/resend',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
    json={
        'new_subject': 'Вы не видели: скидки до 40%',
    },
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/campaigns/501233/resend', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
  "new_subject": "Вы не видели: скидки до 40%"
}),
});

const payload = await response.json();
if (!response.ok) throw new Error(payload.error.message);
console.log(payload.response.data);
Ответ HTTP 201
{
  "response": {
    "msg": {
      "err_code": 0,
      "text": "OK",
      "type": "message"
    },
    "data": {
      "campaign_id": 501255
    }
  }
}

Вложения рассылки #

GET /campaigns/{campaign_id}/attachments

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

Параметры пути

ПараметрТипОписание
campaign_id обязательныйintegerИдентификатор рассылки.

Возможные ошибки

HTTPcodeКогда возникает
404 22 Рассылки с таким campaign_id нет
404 4 Вложений нет
curl -X GET 'https://api.dashamail.com/v2/campaigns/501233/attachments' \
  -H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/campaigns/501233/attachments');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'GET',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
    ],
]);

$response = json_decode(curl_exec($ch), true);
$status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException($response['error']['message']);
}
print_r($response['response']['data']);
import requests

response = requests.get(
    'https://api.dashamail.com/v2/campaigns/501233/attachments',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/campaigns/501233/attachments', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
  },
});

const payload = await response.json();
if (!response.ok) throw new Error(payload.error.message);
console.log(payload.response.data);
Ответ HTTP 200
{
  "response": {
    "msg": {
      "err_code": 0,
      "text": "OK",
      "type": "message"
    },
    "data": [
      {
        "id": 7712,
        "campaign_id": 501233,
        "name": "prays-list.pdf",
        "size": 184320,
        "link": ""
      }
    ]
  }
}

Приложить файл #

POST /campaigns/{campaign_id}/attachments

Скачивает файл по указанной ссылке и прикладывает его к письму. Суммарный размер вложений ограничен тарифом.

С параметром separate_link файл не скачивается: в письмо вставляется ссылка на него. Так стоит поступать с крупными файлами — письмо останется лёгким.

Параметры пути

ПараметрТипОписание
campaign_id обязательныйintegerИдентификатор рассылки.

Параметры тела запроса

ПараметрТипОписание
url обязательныйstringСсылка на файл.
namestringИмя файла в письме. По умолчанию берётся из ссылки; кириллица транслитерируется.
separate_linkфлагНе прикладывать файл, а вставить ссылку на него.

Что возвращается

Идентификатор вложения.

Возможные ошибки

HTTPcodeКогда возникает
422 3 Не передан url
500 33 Недопустимый формат файла — .php и .exe запрещены
402 25 Файл с таким именем уже приложен
413 26 Превышен лимит на размер вложений
curl -X POST 'https://api.dashamail.com/v2/campaigns/501233/attachments' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "url": "https://example.ru/files/prays-list.pdf",
  "name": "Прайс-лист.pdf"
}'
<?php
$ch = curl_init('https://api.dashamail.com/v2/campaigns/501233/attachments');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS     => json_encode([
            'url' => 'https://example.ru/files/prays-list.pdf',
            'name' => 'Прайс-лист.pdf',
        ], JSON_UNESCAPED_UNICODE),
]);

$response = json_decode(curl_exec($ch), true);
$status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException($response['error']['message']);
}
print_r($response['response']['data']);
import requests

response = requests.post(
    'https://api.dashamail.com/v2/campaigns/501233/attachments',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
    json={
        'url': 'https://example.ru/files/prays-list.pdf',
        'name': 'Прайс-лист.pdf',
    },
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/campaigns/501233/attachments', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
  "url": "https://example.ru/files/prays-list.pdf",
  "name": "Прайс-лист.pdf"
}),
});

const payload = await response.json();
if (!response.ok) throw new Error(payload.error.message);
console.log(payload.response.data);
Ответ HTTP 201
{
  "response": {
    "msg": {
      "err_code": 0,
      "text": "OK",
      "type": "message"
    },
    "data": {
      "id": 7712
    }
  }
}

Удалить вложение #

DELETE /campaigns/{campaign_id}/attachments/{id}

Открепляет файл от рассылки и удаляет его с диска.

Параметры пути

ПараметрТипОписание
campaign_id обязательныйintegerИдентификатор рассылки.
id обязательныйintegerИдентификатор вложения из списка вложений.

Возможные ошибки

HTTPcodeКогда возникает
404 22 Рассылки с таким campaign_id нет
404 27 Вложение не найдено
curl -X DELETE 'https://api.dashamail.com/v2/campaigns/501233/attachments/7712' \
  -H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/campaigns/501233/attachments/7712');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'DELETE',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
    ],
]);

$response = json_decode(curl_exec($ch), true);
$status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException($response['error']['message']);
}
print_r($response['response']['data']);
import requests

response = requests.delete(
    'https://api.dashamail.com/v2/campaigns/501233/attachments/7712',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/campaigns/501233/attachments/7712', {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
  },
});

const payload = await response.json();
if (!response.ok) throw new Error(payload.error.message);
console.log(payload.response.data);
Ответ HTTP 204
(тело ответа пустое)

Папки рассылок #

GET /campaigns/folders

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

Параметры строки запроса

ПараметрТипОписание
idintegerВернуть одну папку.
namestringНайти папку по точному названию.

Возможные ошибки

HTTPcodeКогда возникает
404 4 Папок нет
curl -X GET 'https://api.dashamail.com/v2/campaigns/folders' \
  -H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/campaigns/folders');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'GET',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
    ],
]);

$response = json_decode(curl_exec($ch), true);
$status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException($response['error']['message']);
}
print_r($response['response']['data']);
import requests

response = requests.get(
    'https://api.dashamail.com/v2/campaigns/folders',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/campaigns/folders', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
  },
});

const payload = await response.json();
if (!response.ok) throw new Error(payload.error.message);
console.log(payload.response.data);
Ответ HTTP 200
{
  "response": {
    "msg": {
      "err_code": 0,
      "text": "OK",
      "type": "message"
    },
    "data": [
      {
        "id": 33,
        "name": "Дайджесты"
      },
      {
        "id": 34,
        "name": "Акции"
      }
    ]
  }
}

Переместить рассылку в папку #

POST /campaigns/{campaign_id}/move

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

Параметры пути

ПараметрТипОписание
campaign_id обязательныйintegerИдентификатор рассылки.

Параметры тела запроса

ПараметрТипОписание
folder_id обязательныйintegerИдентификатор папки из списка папок.

Возможные ошибки

HTTPcodeКогда возникает
404 22 Рассылки с таким campaign_id нет
500 39 Папки с таким folder_id нет
curl -X POST 'https://api.dashamail.com/v2/campaigns/501233/move' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "folder_id": 34
}'
<?php
$ch = curl_init('https://api.dashamail.com/v2/campaigns/501233/move');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS     => json_encode([
            'folder_id' => 34,
        ], JSON_UNESCAPED_UNICODE),
]);

$response = json_decode(curl_exec($ch), true);
$status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException($response['error']['message']);
}
print_r($response['response']['data']);
import requests

response = requests.post(
    'https://api.dashamail.com/v2/campaigns/501233/move',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
    json={
        'folder_id': 34,
    },
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/campaigns/501233/move', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
  "folder_id": 34
}),
});

const payload = await response.json();
if (!response.ok) throw new Error(payload.error.message);
console.log(payload.response.data);
Ответ HTTP 200
{
  "response": {
    "msg": {
      "err_code": 0,
      "text": "OK",
      "type": "message"
    },
    "data": true
  }
}

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

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