Рассылки
Массовые письма по адресной базе: создание, вёрстка, запуск, пауза, вложения и папки.
Рассылка создаётся черновиком, наполняется содержимым и запускается переводом в статус отправки. Отдельного метода «отправить» нет — запуск выполняется через изменение рассылки.
Жизненный цикл
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 Список рассылок
- GET Одна рассылка
- POST Создать рассылку
- PUT Изменить и запустить рассылку
- DELETE Удалить рассылку
- POST Скопировать рассылку
- POST Поставить отправку на паузу
- POST Возобновить отправку
- POST Переотправить неоткрывшим
- GET Вложения рассылки
- POST Приложить файл
- DELETE Удалить вложение
- GET Папки рассылок
- POST Переместить рассылку в папку
Список рассылок #
GET
/campaigns
Возвращает рассылки аккаунта. Удалённые не показываются, если
явно не запрошен статус DELETED.
Здесь смещение задаётся параметром offset
(в отличие от подписчиков, где используется start).
По умолчанию возвращается 100 рассылок.
Параметры строки запроса
| Параметр | Тип | Описание |
|---|---|---|
limit | integerпо умолчанию: 100 | Сколько рассылок вернуть. |
offset | integerпо умолчанию: 0 | Смещение. Учитывается только вместе с limit. |
status | string | Фильтр по статусу рассылки. |
list_id | integer | Только рассылки по указанной адресной базе. |
start | date | Рассылки не раньше этой даты. Для статуса SENT сравнивается время отправки, иначе — время последнего изменения. |
end | date | Рассылки не позже этой даты. |
external_campaign_id | string | Поиск по вашему внешнему идентификатору. |
workflow | integer | Только письма указанной цепочки автоматизации. |
merge_json | флаг | Отдавать вложенные структуры как JSON. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
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);
{
"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. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
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);
{
"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 | Имя отправителя. |
name | stringпо умолчанию: Без Названия + дата | Внутреннее название рассылки, получателям не видно. |
html | string | HTML-версия письма. Вместо вёрстки можно передать id сохранённого шаблона числом, либо tmpl<campaign_id>, чтобы взять вёрстку другой рассылки. |
plain_text | string | Текстовая версия письма. |
amp | string | AMP-версия письма. Требует включённой поддержки AMP на аккаунте. |
track_opens | stringпо умолчанию: Y | Отслеживать открытия. Допустимые значения: Y, N |
track_clicks | stringпо умолчанию: Y | Отслеживать клики. Допустимые значения: Y, N |
plain_clicks | stringпо умолчанию: N | Отслеживать клики и в текстовой версии. Допустимые значения: Y, N |
esegment | JSON-строка | Условия сегментации базы. Структура: {"match":"and","c":[{"field":"…","op":"…","value":"…"}]}. При рассылке по нескольким базам — объект, где ключ это list_id. |
status | stringпо умолчанию: DRAFT | При создании допустимы только DRAFT и TEMPLATE; любое другое значение приводится к DRAFT.Допустимые значения: DRAFT, TEMPLATE |
external_campaign_id | string | Ваш идентификатор рассылки для сопоставления с внешней системой. |
personalizeToEmail | stringпо умолчанию: off | Подставлять имя получателя в поле «Кому». |
to_email | string | Шаблон отображаемого имени получателя, например %ИМЯ%. |
analytics | stringпо умолчанию: N | Добавлять UTM-метки к ссылкам. Допустимые значения: Y, N |
analytics_tag | string | Значение utm_campaign. |
analytics_source | string | Значение utm_source. |
analytics_medium | string | Значение utm_medium. |
analytics_content | string | Значение utm_content. |
analytics_term | string | Значение utm_term. |
allow_time_zone | флаг | Отправлять с учётом часового пояса получателя. |
allow_best_time | флаг | Отправлять в наиболее удачное для получателя время. |
limit | integer | Ограничить скорость отправки — сколько писем за интервал wait_time. |
wait_time | integer | Интервал ограничения скорости в минутах. |
no_images_add | флаг | Не добавлять изображения автоматически. |
dialogs_enabled | флаг | Включить приём ответов через Даша.Диалоги. Несовместимо с собственным Reply-To — при конфликте побеждают диалоги. |
stat_domain | string | Домен для ссылок статистики. Должен быть подтверждён в аккаунте. |
cloud | флаг | Выгрузить изображения из HTML в облачное хранилище DashaMail. |
Что возвращается
Идентификатор созданной рассылки.
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
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);
{
"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 | Идентификатор рассылки. |
Параметры тела запроса
| Параметр | Тип | Описание |
|---|---|---|
status | string | Новый статус. Запуск отправки — MODERATING или SCHEDULE.Допустимые значения: DRAFT, MODERATING, SCHEDULE, TEMPLATE |
delivery_time | datetime | Время запланированной отправки. Обязателен при status=SCHEDULE. |
subject | string | Тема письма. |
from_email | string | Адрес отправителя. |
from_name | string | Имя отправителя. |
name | string | Внутреннее название. |
list_id | integer | JSON-строка | Сменить адресную базу или набор баз. |
html | string | HTML-версия письма. |
plain_text | string | Текстовая версия письма. |
esegment | JSON-строка | Условия сегментации. |
track_opens | string | Отслеживание открытий. Допустимые значения: Y, N |
track_clicks | string | Отслеживание кликов. Допустимые значения: Y, N |
stat_domain | string | Домен статистики. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
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);
{
"response": {
"msg": {
"err_code": 0,
"text": "OK",
"type": "message"
},
"data": true
}
}
Удалить рассылку #
DELETE
/campaigns/{campaign_id}
Помечает рассылку удалённой. Статистика по уже отправленным письмам сохраняется.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
campaign_id обязательный | integer | Идентификатор рассылки. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
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);
(тело ответа пустое)
Скопировать рассылку #
POST
/campaigns/{campaign_id}/copy
Создаёт копию рассылки вместе с вёрсткой. Копия отправленной
или заблокированной рассылки всегда получает статус
DRAFT.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
campaign_id обязательный | integer | Идентификатор исходной рассылки. |
Параметры тела запроса
| Параметр | Тип | Описание |
|---|---|---|
name | string | Название копии. По умолчанию совпадает с исходным. |
client_id | integer | Создать копию в аккаунте клиента. Доступно партнёрским аккаунтам. |
Что возвращается
Идентификатор созданной копии.
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
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);
{
"response": {
"msg": {
"err_code": 0,
"text": "OK",
"type": "message"
},
"data": {
"campaign_id": 501240
}
}
}
Поставить отправку на паузу #
POST
/campaigns/{campaign_id}/pause
Приостанавливает идущую рассылку. Уже отправленные письма не отзываются.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
campaign_id обязательный | integer | Идентификатор рассылки. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
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);
{
"response": {
"msg": {
"err_code": 0,
"text": "OK",
"type": "message"
},
"data": true
}
}
Возобновить отправку #
POST
/campaigns/{campaign_id}/resume
Продолжает рассылку, поставленную на паузу, с того места, где она остановилась.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
campaign_id обязательный | integer | Идентификатор рассылки. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
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);
{
"response": {
"msg": {
"err_code": 0,
"text": "OK",
"type": "message"
},
"data": true
}
}
Переотправить неоткрывшим #
POST
/campaigns/{campaign_id}/resend
Создаёт новую рассылку по тем получателям исходной, кто её не открыл. Обычный приём — повторить письмо через несколько дней с другой темой.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
campaign_id обязательный | integer | Идентификатор исходной рассылки. |
Параметры тела запроса
| Параметр | Тип | Описание |
|---|---|---|
new_subject | string | Тема повторного письма. По умолчанию берётся исходная. |
Что возвращается
Идентификатор созданной рассылки.
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
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);
{
"response": {
"msg": {
"err_code": 0,
"text": "OK",
"type": "message"
},
"data": {
"campaign_id": 501255
}
}
}
Вложения рассылки #
GET
/campaigns/{campaign_id}/attachments
Список файлов, приложенных к рассылке. Возвращается не больше десяти вложений.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
campaign_id обязательный | integer | Идентификатор рассылки. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
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);
{
"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 | Ссылка на файл. |
name | string | Имя файла в письме. По умолчанию берётся из ссылки; кириллица транслитерируется. |
separate_link | флаг | Не прикладывать файл, а вставить ссылку на него. |
Что возвращается
Идентификатор вложения.
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
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);
{
"response": {
"msg": {
"err_code": 0,
"text": "OK",
"type": "message"
},
"data": {
"id": 7712
}
}
}
Удалить вложение #
DELETE
/campaigns/{campaign_id}/attachments/{id}
Открепляет файл от рассылки и удаляет его с диска.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
campaign_id обязательный | integer | Идентификатор рассылки. |
id обязательный | integer | Идентификатор вложения из списка вложений. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
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);
(тело ответа пустое)
Папки рассылок #
GET
/campaigns/folders
Список папок, по которым разложены рассылки.
Параметры строки запроса
| Параметр | Тип | Описание |
|---|---|---|
id | integer | Вернуть одну папку. |
name | string | Найти папку по точному названию. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
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);
{
"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 | Идентификатор папки из списка папок. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
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);
{
"response": {
"msg": {
"err_code": 0,
"text": "OK",
"type": "message"
},
"data": true
}
}