Адресные базы
Списки подписчиков, сами подписчики, дополнительные поля, импорт, отписки и жалобы.
Адресная база (list) — контейнер для подписчиков. Один и тот же email может
находиться в нескольких базах; для DashaMail это разные записи со своими
member_id.
У каждого подписчика, помимо адреса, есть до десяти (на расширенных тарифах —
больше) дополнительных полей merge_1 … merge_N.
Их состав задаётся на уровне базы и одинаков для всех её подписчиков.
Подробнее — в разделе
Дополнительные поля подписчика.
Возможные состояния подписчика (state):
active | Активен, получает рассылки |
unsubscribed | Отписался |
bounced | Адрес недоставляем |
complained | Пожаловался на спам |
unconfirmed | Не подтвердил подписку (double opt-in) |
inactive | Неактивен |
- GET Список адресных баз
- GET Одна адресная база
- POST Создать адресную базу
- PUT Изменить адресную базу
- DELETE Удалить адресную базу
- GET Подписчики базы
- POST Добавить подписчика
- POST Добавить подписчиков пакетом
- POST Импортировать подписчиков из файла
- GET Результат последнего импорта
- GET История импортов
- GET Один подписчик
- PUT Изменить подписчика
- DELETE Удалить подписчика
- POST Отписать подписчика
- POST Перенести подписчика в другую базу
- POST Скопировать подписчика в другую базу
- GET История действий подписчика
- GET Текущий статус адреса
- GET Проверить адрес перед подпиской
- POST Очистить базу
- GET Отписавшиеся
- GET Жалобы на спам
- POST Добавить дополнительное поле
- PUT Изменить дополнительное поле
- DELETE Удалить дополнительное поле
Список адресных баз #
GET
/lists
Возвращает все адресные базы аккаунта, от новых к старым, вместе со счётчиками подписчиков по состояниям.
Параметры строки запроса
| Параметр | Тип | Описание |
|---|---|---|
state | string | Вернуть только базы в указанном состоянии. Допустимые значения: active, archived, blocked |
merge_json | флаг | Если передан, описания дополнительных полей возвращаются как JSON, а не как сериализованная PHP-строка. Рекомендуется передавать всегда. |
Что возвращается
Массив баз. Счётчики count_* — число подписчиков
в соответствующем состоянии; merge_1 … merge_N
описывают дополнительные поля базы.
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
404 |
4 |
В аккаунте нет ни одной базы |
curl -X GET 'https://api.dashamail.com/v2/lists?merge_json=1' \
-H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/lists?merge_json=1');
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/lists?merge_json=1',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/lists?merge_json=1', {
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": 128341,
"state": "active",
"name": "Клиенты интернет-магазина",
"description": "",
"company": "ООО «Ромашка»",
"abuse_name": "Иван Петров",
"phone": "+7 999 000-00-00",
"address": "ул. Ленина, 1",
"city": "Москва",
"url": "https://example.ru",
"merge_1": "{\"title\":\"Имя\",\"type\":\"text\",\"req\":\"\",\"var\":\"ИМЯ\"}",
"merge_2": "{\"title\":\"Фамилия\",\"type\":\"text\",\"req\":\"\",\"var\":\"ФАМИЛИЯ\"}",
"creation_date": "2026-03-14 11:02:41",
"count_active": 1284,
"count_bounced": 37,
"count_inactive": 0,
"count_complained": 2,
"count_unconfirmed": 15,
"count_unsubscribed": 96,
"count_all": 1434
}
]
}
}
Одна адресная база #
GET
/lists/{list_id}
Возвращает одну базу — в том же формате, что и список, но массивом из одного элемента. Отсюда удобно получать состав дополнительных полей перед добавлением подписчиков.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
list_id обязательный | integer | Идентификатор адресной базы. |
Параметры строки запроса
| Параметр | Тип | Описание |
|---|---|---|
merge_json | флаг | Отдавать описания дополнительных полей в JSON. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
404 |
4 |
Базы с таким list_id нет |
curl -X GET 'https://api.dashamail.com/v2/lists/128341?merge_json=1' \
-H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/lists/128341?merge_json=1');
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/lists/128341?merge_json=1',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/lists/128341?merge_json=1', {
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": 128341,
"state": "active",
"name": "Клиенты интернет-магазина",
"merge_1": "{\"title\":\"Имя\",\"type\":\"text\",\"req\":\"\",\"var\":\"ИМЯ\"}",
"merge_2": "{\"title\":\"Город\",\"type\":\"choice\",\"req\":\"on\",\"var\":\"ГОРОД\"}",
"creation_date": "2026-03-14 11:02:41",
"count_active": 1284,
"count_all": 1434
}
]
}
}
Создать адресную базу #
POST
/lists
Создаёт новую адресную базу.
Контактные данные (company, address,
city и другие) попадают в подвал писем — этого требуют
антиспам-политики. Если их не передать, подставятся данные из
профиля аккаунта.
Параметры тела запроса
| Параметр | Тип | Описание |
|---|---|---|
name обязательный | string | Название базы. |
fields | JSON-строка | Состав дополнительных полей. Если не передан, поля копируются из базы по умолчанию, а при её отсутствии создаются «Имя» и «Фамилия». Каждый элемент — объект с ключами title, type, req, var. Для типа choice в title передаётся объект {"name": "…", "choices": […]}. Длина var — не больше 10 символов. |
company | string | Название компании для подвала письма. |
abuse_name | string | Контактное лицо. |
abuse_email | string | Контактный email для жалоб. |
address | string | Адрес. |
city | string | Город. |
zip | string | Почтовый индекс. |
country | string | Страна. |
phone | string | Телефон. |
url | string | Сайт компании. |
Что возвращается
Идентификатор созданной базы.
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
422 |
3 |
Не передан name |
500 |
59 |
Длина var дополнительного поля больше 10 символов |
curl -X POST 'https://api.dashamail.com/v2/lists' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"name": "Клиенты интернет-магазина",
"company": "ООО «Ромашка»",
"city": "Москва",
"fields": "[{\"title\":\"Имя\",\"type\":\"text\",\"req\":\"\",\"var\":\"ИМЯ\"},{\"title\":\"Город\",\"type\":\"choice\",\"req\":\"on\",\"var\":\"ГОРОД\"}]"
}'
<?php
$ch = curl_init('https://api.dashamail.com/v2/lists');
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' => 'Клиенты интернет-магазина',
'company' => 'ООО «Ромашка»',
'city' => 'Москва',
'fields' => '[{"title":"Имя","type":"text","req":"","var":"ИМЯ"},{"title":"Город","type":"choice","req":"on","var":"ГОРОД"}]',
], 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/lists',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
'name': 'Клиенты интернет-магазина',
'company': 'ООО «Ромашка»',
'city': 'Москва',
'fields': '[{"title":"Имя","type":"text","req":"","var":"ИМЯ"},{"title":"Город","type":"choice","req":"on","var":"ГОРОД"}]',
},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/lists', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"name": "Клиенты интернет-магазина",
"company": "ООО «Ромашка»",
"city": "Москва",
"fields": "[{\"title\":\"Имя\",\"type\":\"text\",\"req\":\"\",\"var\":\"ИМЯ\"},{\"title\":\"Город\",\"type\":\"choice\",\"req\":\"on\",\"var\":\"ГОРОД\"}]"
}),
});
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": {
"list_id": 128341
}
}
}
Изменить адресную базу #
PUT
/lists/{list_id}
Меняет реквизиты базы. Передавайте только те поля, которые нужно изменить — остальные останутся прежними. Состав дополнительных полей здесь не меняется, для этого есть отдельные эндпоинты.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
list_id обязательный | integer | Идентификатор базы. |
Параметры тела запроса
| Параметр | Тип | Описание |
|---|---|---|
name | string | Название базы. |
abuse_email | string | Контактный email. Проверяется на корректность. |
abuse_name | string | Контактное лицо. |
company | string | Компания. |
address | string | Адрес. |
city | string | Город. |
zip | string | Индекс. |
country | string | Страна. |
url | string | Сайт. |
phone | string | Телефон. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
404 |
5 |
Базы с таким list_id нет |
422 |
6 |
Некорректный abuse_email |
curl -X PUT 'https://api.dashamail.com/v2/lists/128341' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"name": "Клиенты — Москва"
}'
<?php
$ch = curl_init('https://api.dashamail.com/v2/lists/128341');
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([
'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.put(
'https://api.dashamail.com/v2/lists/128341',
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/lists/128341', {
method: 'PUT',
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": true
}
}
Удалить адресную базу #
DELETE
/lists/{list_id}
Удаляет базу вместе с активными подписчиками.
Операция необратима. Отписавшиеся подписчики остаются в глобальном списке отписок аккаунта — повторно подписать их через API не получится.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
list_id обязательный | integer | Идентификатор базы. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
404 |
5 |
Базы с таким list_id нет |
curl -X DELETE 'https://api.dashamail.com/v2/lists/128341' \
-H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/lists/128341');
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/lists/128341',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/lists/128341', {
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
/lists/{list_id}/members
Постранично возвращает подписчиков базы.
Смещение задаётся параметром start, не
offset. По умолчанию отдаётся 100 записей.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
list_id обязательный | integer | Идентификатор базы. |
Параметры строки запроса
| Параметр | Тип | Описание |
|---|---|---|
start | integerпо умолчанию: 0 | Смещение от начала выборки. |
limit | integerпо умолчанию: 100 | Сколько записей вернуть. |
order | stringпо умолчанию: id asc | Сортировка в формате поле направление — например id desc. |
state | string | Фильтр по состоянию подписчика. Значение spam — синоним complained.Допустимые значения: active, unsubscribed, bounced, complained, unconfirmed, inactive |
email | string | Вернуть конкретного подписчика по адресу. |
member_id | integer | Вернуть конкретного подписчика по идентификатору. |
segment_id | integer | Вернуть подписчиков сохранённого сегмента. Несовместим с email и member_id. |
Что возвращается
Массив подписчиков. Поля merge_* отдаются
только те, что заведены в базе; поля типа tags
возвращаются строкой с разделителем ;.
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
404 |
5 |
Базы с таким list_id нет |
404 |
4 |
В базе нет подписчиков, подходящих под фильтр |
500 |
60 |
segment_id задан вместе с email или member_id |
500 |
61 |
Сегмента с таким segment_id нет |
curl -X GET 'https://api.dashamail.com/v2/lists/128341/members?state=active&start=0&limit=2' \
-H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/lists/128341/members?state=active&start=0&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/lists/128341/members?state=active&start=0&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/lists/128341/members?state=active&start=0&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": 90412881,
"list_id": 128341,
"email": "ivan@example.com",
"state": "active",
"optin_time": "2026-04-02 09:31:00",
"merge_1": "Иван",
"merge_2": "Москва"
},
{
"id": 90412882,
"list_id": 128341,
"email": "maria@example.com",
"state": "active",
"optin_time": "2026-04-02 09:44:12",
"merge_1": "Мария",
"merge_2": "Казань"
}
]
}
}
Добавить подписчика #
POST
/lists/{list_id}/members
Добавляет один адрес в базу. Для загрузки нескольких адресов используйте пакетное добавление, для файлов — импорт.
Перед добавлением адрес проверяется по вашему списку отписок, по чёрному списку аккаунта и по глобальному списку возвратов.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
list_id обязательный | integer | Идентификатор базы. |
Параметры тела запроса
| Параметр | Тип | Описание |
|---|---|---|
email обязательный | string | Адрес подписчика. Домен ya.ru автоматически приводится к yandex.ru. |
merge_1 … merge_N | string | Значения дополнительных полей. Нумерация соответствует полям базы. |
merge_0 | флаг | Нумеровать переданные поля с нуля: merge_0 станет первым полем базы. Удобно, когда источник данных нумерует колонки с нуля. |
update | флаг | Обновлять уже существующего подписчика вместо ошибки «адрес уже есть в базе». |
update_tags | string | Со значением on метки в полях типа tags добавляются к существующим, а не заменяют их. |
send_confirm | флаг | Отправить письмо подтверждения подписки (double opt-in). Подписчик создаётся в состоянии unconfirmed. |
no_check | флаг | Не проверять адрес по глобальному списку возвратов. |
state | string | Задать состояние подписчика явно. |
gender | string | Пол подписчика. |
region | string | Регион подписчика. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
422 |
3 |
Не передан email |
401 |
2 |
Некорректный формат адреса |
409 |
7 |
Адрес уже есть в базе (и не передан update) |
409 |
10 |
Подписчик ранее отписался или находится в чёрном списке |
422 |
6 |
Адрес в глобальном списке возвратов |
422 |
29 |
Адрес на сервисе одноразовой почты |
404 |
5 |
Базы с таким list_id нет |
curl -X POST 'https://api.dashamail.com/v2/lists/128341/members' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"email": "ivan@example.com",
"merge_1": "Иван",
"merge_2": "Москва",
"update": 1
}'
<?php
$ch = curl_init('https://api.dashamail.com/v2/lists/128341/members');
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([
'email' => 'ivan@example.com',
'merge_1' => 'Иван',
'merge_2' => 'Москва',
'update' => 1,
], 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/lists/128341/members',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
'email': 'ivan@example.com',
'merge_1': 'Иван',
'merge_2': 'Москва',
'update': 1,
},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/lists/128341/members', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"email": "ivan@example.com",
"merge_1": "Иван",
"merge_2": "Москва",
"update": 1
}),
});
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": {
"member_id": 90412881
}
}
}
Добавить подписчиков пакетом #
POST
/lists/{list_id}/members/batch
Загружает несколько подписчиков одним запросом. Каждый элемент
batch — такой же объект, как тело
добавления одного подписчика.
С параметром background запрос сразу возвращает
управление, а загрузка идёт в фоне — так стоит поступать с
пакетами в тысячи адресов.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
list_id обязательный | integer | Идентификатор базы. |
Параметры тела запроса
| Параметр | Тип | Описание |
|---|---|---|
batch обязательный | JSON-строка | Массив объектов подписчиков. |
update | флаг | Обновлять существующих подписчиков. |
background | флаг | Обработать пакет в фоне. |
webhook | string | URL, на который придёт уведомление о завершении фоновой загрузки. |
no_check | флаг | Не проверять адреса по глобальному списку возвратов. |
send_confirm | флаг | Отправлять письма подтверждения подписки. |
Что возвращается
Результат по каждому адресу: успешно добавленные и ошибки с их причинами.
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
422 |
3 |
Не передан batch |
500 |
31 |
Массив адресов пуст |
curl -X POST 'https://api.dashamail.com/v2/lists/128341/members/batch' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"batch": "[{\"email\":\"ivan@example.com\",\"merge_1\":\"Иван\"},{\"email\":\"maria@example.com\",\"merge_1\":\"Мария\"}]",
"update": 1
}'
<?php
$ch = curl_init('https://api.dashamail.com/v2/lists/128341/members/batch');
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([
'batch' => '[{"email":"ivan@example.com","merge_1":"Иван"},{"email":"maria@example.com","merge_1":"Мария"}]',
'update' => 1,
], 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/lists/128341/members/batch',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
'batch': '[{"email":"ivan@example.com","merge_1":"Иван"},{"email":"maria@example.com","merge_1":"Мария"}]',
'update': 1,
},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/lists/128341/members/batch', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"batch": "[{\"email\":\"ivan@example.com\",\"merge_1\":\"Иван\"},{\"email\":\"maria@example.com\",\"merge_1\":\"Мария\"}]",
"update": 1
}),
});
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": {
"success": 2,
"errors": []
}
}
}
Импортировать подписчиков из файла #
POST
/lists/{list_id}/members/import
Ставит в очередь импорт из файла CSV, XLS, XLSX, TXT или ZIP.
Файл либо скачивается по ссылке file, либо
загружается как multipart-поле import-file.
Соответствие колонок файла и полей подписчика задаётся
номерами колонок, начиная с нуля:
email=0 означает, что адрес лежит в первой колонке,
merge_1=2 — что первое дополнительное поле лежит
в третьей.
В одну базу можно поставить не больше пяти задач импорта
одновременно. В режиме online импорт запрещён, если
в аккаунте уже идёт другой импорт.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
list_id обязательный | integer | Идентификатор базы. |
Параметры тела запроса
| Параметр | Тип | Описание |
|---|---|---|
email обязательный | integer | Номер колонки с адресом, считая с нуля. |
type обязательный | string | Расширение файла. Допустимые значения: csv, txt, xls, xlsx, zip |
file | string | URL файла. Если не задан, файл ожидается в multipart-поле import-file. |
merge_1 … merge_N | integer | Номера колонок для дополнительных полей. Поля, помеченные в базе обязательными, должны быть сопоставлены. |
gender | integer | Номер колонки с полом. |
region | integer | Номер колонки с регионом. |
mode | stringпо умолчанию: bg | Со значением online импорт выполняется синхронно. По умолчанию — фоновая задача. |
update | флаг | Обновлять существующих подписчиков. |
send_confirm | флаг | Отправлять письма подтверждения подписки. |
sheet_index | integer | Номер листа книги Excel. |
sheet_name | string | Название листа книги Excel. |
webhook | string | URL для уведомления о завершении импорта. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
422 |
3 |
Не передан email, type или обязательное дополнительное поле |
404 |
5 |
Базы с таким list_id нет |
401 |
2 |
Превышено число одновременных задач импорта |
500 |
33 |
Файл не читается или имеет недопустимый формат |
curl -X POST 'https://api.dashamail.com/v2/lists/128341/members/import' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"file": "https://example.ru/exports/subscribers.csv",
"type": "csv",
"email": 0,
"merge_1": 1,
"merge_2": 2,
"update": 1
}'
<?php
$ch = curl_init('https://api.dashamail.com/v2/lists/128341/members/import');
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([
'file' => 'https://example.ru/exports/subscribers.csv',
'type' => 'csv',
'email' => 0,
'merge_1' => 1,
'merge_2' => 2,
'update' => 1,
], 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/lists/128341/members/import',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
'file': 'https://example.ru/exports/subscribers.csv',
'type': 'csv',
'email': 0,
'merge_1': 1,
'merge_2': 2,
'update': 1,
},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/lists/128341/members/import', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"file": "https://example.ru/exports/subscribers.csv",
"type": "csv",
"email": 0,
"merge_1": 1,
"merge_2": 2,
"update": 1
}),
});
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": {
"task_id": 88123
}
}
}
Результат последнего импорта #
GET
/lists/{list_id}/members/import
Возвращает текстовый отчёт о последнем завершённом импорте в базу.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
list_id обязательный | integer | Идентификатор базы. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
422 |
3 |
Не передан list_id |
curl -X GET 'https://api.dashamail.com/v2/lists/128341/members/import' \
-H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/lists/128341/members/import');
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/lists/128341/members/import',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/lists/128341/members/import', {
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": {
"import_result": "Загружено 1240 адресов, пропущено 18 дубликатов, отклонено 6 некорректных."
}
}
}
История импортов #
GET
/lists/{list_id}/import-history
Список задач импорта по базе с их состоянием и итогами.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
list_id обязательный | integer | Идентификатор базы. |
Параметры строки запроса
| Параметр | Тип | Описание |
|---|---|---|
import_id | integer | Вернуть только одну задачу импорта. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
404 |
4 |
Импортов в эту базу не было |
curl -X GET 'https://api.dashamail.com/v2/lists/128341/import-history' \
-H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/lists/128341/import-history');
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/lists/128341/import-history',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/lists/128341/import-history', {
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": 88123,
"list_id": 128341,
"state": "done",
"created": "2026-04-02 09:15:00",
"result": "Загружено 1240 адресов"
}
]
}
}
Один подписчик #
GET
/lists/{list_id}/members/{email}
Возвращает записи подписчика по адресу.
Поиск идёт по всем базам аккаунта, а не только
по указанной в пути. Если адрес есть в нескольких базах, вернутся
все записи — различайте их по полю list_id.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
list_id обязательный | integer | Идентификатор базы. На выборку не влияет. |
email обязательный | string | Адрес подписчика, закодированный для URL (@ → %40). |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
404 |
4 |
Подписчика с таким адресом нет |
curl -X GET 'https://api.dashamail.com/v2/lists/128341/members/ivan%40example.com' \
-H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/lists/128341/members/ivan%40example.com');
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/lists/128341/members/ivan%40example.com',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/lists/128341/members/ivan%40example.com', {
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": 90412881,
"list_id": 128341,
"email": "ivan@example.com",
"state": "active",
"optin_time": "2026-04-02 09:31:00",
"merge_1": "Иван"
}
]
}
}
Изменить подписчика #
PUT
/lists/{list_id}/members/{email}
Обновляет дополнительные поля и состояние подписчика.
Подписчик находится по паре «база + адрес» из пути, либо, если
передан member_id — по нему.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
list_id обязательный | integer | Идентификатор базы. |
email обязательный | string | Текущий адрес подписчика, закодированный для URL. |
Параметры тела запроса
| Параметр | Тип | Описание |
|---|---|---|
member_id | integer | Искать подписчика по идентификатору, а не по адресу. |
merge_1 … merge_N | string | Новые значения дополнительных полей. Поля, помеченные обязательными, нельзя очищать. |
update_tags | string | Со значением on метки добавляются к существующим. |
state | string | Новое состояние подписчика. |
gender | string | Пол. |
region | string | Регион. |
source | string | Источник подписки. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
422 |
3 |
Не удалось определить подписчика или не заполнено обязательное поле |
401 |
2 |
Неверный формат даты в поле типа date |
curl -X PUT 'https://api.dashamail.com/v2/lists/128341/members/ivan%40example.com' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"merge_1": "Иван",
"merge_2": "Санкт-Петербург"
}'
<?php
$ch = curl_init('https://api.dashamail.com/v2/lists/128341/members/ivan%40example.com');
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([
'merge_1' => 'Иван',
'merge_2' => 'Санкт-Петербург',
], 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/lists/128341/members/ivan%40example.com',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
'merge_1': 'Иван',
'merge_2': 'Санкт-Петербург',
},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/lists/128341/members/ivan%40example.com', {
method: 'PUT',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"merge_1": "Иван",
"merge_2": "Санкт-Петербург"
}),
});
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
/lists/{list_id}/members/{email}
Удаляет запись подписчика из базы. Удалить можно только
подписчика в состоянии active.
Удаление стирает историю подписчика. Если задача в том, чтобы перестать ему писать, используйте отписку — она сохраняет адрес в списке отписавшихся и защищает от повторного добавления.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
list_id обязательный | integer | Идентификатор базы. |
email обязательный | string | Адрес подписчика, закодированный для URL. |
Параметры тела запроса
| Параметр | Тип | Описание |
|---|---|---|
member_id обязательный | integer | Идентификатор удаляемой записи. Получить его можно из списка подписчиков или из карточки подписчика. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
422 |
3 |
Не передан member_id |
404 |
9 |
Подписчика нет |
409 |
10 |
Подписчик не в активном состоянии |
curl -X DELETE 'https://api.dashamail.com/v2/lists/128341/members/ivan%40example.com' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"member_id": 90412881
}'
<?php
$ch = curl_init('https://api.dashamail.com/v2/lists/128341/members/ivan%40example.com');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'member_id' => 90412881,
], 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.delete(
'https://api.dashamail.com/v2/lists/128341/members/ivan%40example.com',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
'member_id': 90412881,
},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/lists/128341/members/ivan%40example.com', {
method: 'DELETE',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"member_id": 90412881
}),
});
const payload = await response.json();
if (!response.ok) throw new Error(payload.error.message);
console.log(payload.response.data);
(тело ответа пустое)
Отписать подписчика #
POST
/lists/{list_id}/members/{email}/unsubscribe
Переводит подписчика в состояние unsubscribed
и проставляет время отписки. Если адрес есть в нескольких базах,
а list_id в пути указывает на конкретную — отписка
затронет только её.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
list_id обязательный | integer | Идентификатор базы. |
email обязательный | string | Адрес подписчика, закодированный для URL. |
Параметры тела запроса
| Параметр | Тип | Описание |
|---|---|---|
member_id | integer | Отписать по идентификатору вместо адреса. |
reason | string | Причина отписки. Накапливается в статистике причин по базе. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
409 |
10 |
Подписчик уже отписан |
422 |
3 |
Подписчик не найден по адресу или идентификатору |
curl -X POST 'https://api.dashamail.com/v2/lists/128341/members/ivan%40example.com/unsubscribe' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"reason": "Слишком частые письма"
}'
<?php
$ch = curl_init('https://api.dashamail.com/v2/lists/128341/members/ivan%40example.com/unsubscribe');
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([
'reason' => 'Слишком частые письма',
], 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/lists/128341/members/ivan%40example.com/unsubscribe',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
'reason': 'Слишком частые письма',
},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/lists/128341/members/ivan%40example.com/unsubscribe', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"reason": "Слишком частые письма"
}),
});
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": {
"unsubscribed": 1
}
}
}
Перенести подписчика в другую базу #
POST
/lists/{list_id}/members/{email}/move
Переносит активного подписчика в другую базу. Запись меняет принадлежность, идентификатор сохраняется.
Перенос считается подпиской на целевую базу — привязанные к ней автоматизации с событием «добавление в базу» сработают.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
list_id обязательный | integer | Идентификатор исходной базы. |
email обязательный | string | Адрес подписчика, закодированный для URL. |
Параметры тела запроса
| Параметр | Тип | Описание |
|---|---|---|
to_list_id обязательный | integer | Идентификатор целевой базы. |
member_id обязательный | integer | Идентификатор переносимой записи из списка подписчиков. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
409 |
7 |
В целевой базе такой адрес уже есть |
404 |
9 |
Активного подписчика с такими данными нет |
404 |
5 |
Целевой базы не существует |
curl -X POST 'https://api.dashamail.com/v2/lists/128341/members/ivan%40example.com/move' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"to_list_id": 128342,
"member_id": 90412881
}'
<?php
$ch = curl_init('https://api.dashamail.com/v2/lists/128341/members/ivan%40example.com/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([
'to_list_id' => 128342,
'member_id' => 90412881,
], 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/lists/128341/members/ivan%40example.com/move',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
'to_list_id': 128342,
'member_id': 90412881,
},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/lists/128341/members/ivan%40example.com/move', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"to_list_id": 128342,
"member_id": 90412881
}),
});
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
/lists/{list_id}/members/{email}/copy
Создаёт копию записи подписчика в другой базе. Исходная запись остаётся на месте; значения дополнительных полей копируются.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
list_id обязательный | integer | Идентификатор исходной базы. |
email обязательный | string | Адрес подписчика, закодированный для URL. |
Параметры тела запроса
| Параметр | Тип | Описание |
|---|---|---|
to_list_id обязательный | integer | Идентификатор целевой базы. |
member_id обязательный | integer | Идентификатор копируемой записи из списка подписчиков. |
Что возвращается
Идентификатор созданной копии.
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
409 |
7 |
В целевой базе такой адрес уже есть |
404 |
9 |
Активного подписчика с такими данными нет |
curl -X POST 'https://api.dashamail.com/v2/lists/128341/members/ivan%40example.com/copy' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"to_list_id": 128342,
"member_id": 90412881
}'
<?php
$ch = curl_init('https://api.dashamail.com/v2/lists/128341/members/ivan%40example.com/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([
'to_list_id' => 128342,
'member_id' => 90412881,
], 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/lists/128341/members/ivan%40example.com/copy',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
'to_list_id': 128342,
'member_id': 90412881,
},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/lists/128341/members/ivan%40example.com/copy', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"to_list_id": 128342,
"member_id": 90412881
}),
});
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": {
"copy_id": 90455102
}
}
}
История действий подписчика #
GET
/lists/{list_id}/members/{email}/activity
События подписчика: отправки, доставки, открытия, клики, возвраты, отписки — с привязкой к рассылкам.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
list_id обязательный | integer | Идентификатор базы. |
email обязательный | string | Адрес подписчика, закодированный для URL. |
Параметры строки запроса
| Параметр | Тип | Описание |
|---|---|---|
filter | stringпо умолчанию: all | Тип событий для выборки. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
404 |
4 |
Подписчика нет или событий не найдено |
curl -X GET 'https://api.dashamail.com/v2/lists/128341/members/ivan%40example.com/activity' \
-H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/lists/128341/members/ivan%40example.com/activity');
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/lists/128341/members/ivan%40example.com/activity',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/lists/128341/members/ivan%40example.com/activity', {
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": [
{
"campaign_id": 501233,
"event_type": "OPENED",
"event_time": "2026-04-05 10:12:44"
},
{
"campaign_id": 501233,
"event_type": "CLICKED",
"event_time": "2026-04-05 10:13:02",
"url": "https://example.ru/sale"
}
]
}
}
Текущий статус адреса #
GET
/lists/{list_id}/last-status
Быстрая проверка: в каком состоянии находится конкретный адрес в базе. Дешевле, чем выгружать подписчика целиком.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
list_id обязательный | integer | Идентификатор базы. |
Параметры строки запроса
| Параметр | Тип | Описание |
|---|---|---|
email обязательный | string | Проверяемый адрес. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
404 |
4 |
Адреса в базе нет |
curl -X GET 'https://api.dashamail.com/v2/lists/128341/last-status?email=ivan%40example.com' \
-H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/lists/128341/last-status?email=ivan%40example.com');
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/lists/128341/last-status?email=ivan%40example.com',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/lists/128341/last-status?email=ivan%40example.com', {
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": {
"email": "ivan@example.com",
"state": "active"
}
}
}
Проверить адрес перед подпиской #
GET
/lists/{list_id}/check-email
Отвечает на вопрос «можно ли добавить этот адрес в базу». Проверяет его по чёрному списку аккаунта, по отпискам в этой базе, по глобальному списку возвратов, а также формат адреса и принадлежность к одноразовым почтовым сервисам.
Полезно вызывать перед
добавлением подписчика: так вы заранее
отсеете адреса, на которых POST всё равно завершится
ошибкой, и не потратите на них попытку.
Успешный ответ возвращает адрес в поле valid
уже нормализованным — регистр и типичные опечатки в домене
исправляются. Добавляйте в базу именно это значение.
Отказы приходят со статусами 409 и
422, но различать причины надёжнее по полю
code: статус лишь делит их на «адрес в чёрном
списке» и «адрес непригоден».
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
list_id обязательный | integer | Идентификатор базы. Проверка отписок выполняется в пределах этой базы; чёрный список и список возвратов действуют на весь аккаунт. |
Параметры строки запроса
| Параметр | Тип | Описание |
|---|---|---|
email обязательный | string | Проверяемый адрес. |
Что возвращается
Адрес пригоден для подписки — в valid лежит
нормализованная форма. Любая причина отказа приходит
ошибкой: разбирайте её по полю code.
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
422 |
3 |
Не передан email |
422 |
6 |
Некорректный формат адреса |
409 |
10 |
Адрес уже был в этой базе и отписался |
422 |
29 |
Адрес на сервисе одноразовой почты |
409 |
43 |
В чёрном списке: двойная отписка |
409 |
44 |
В чёрном списке: жалоба на спам |
409 |
45 |
В чёрном списке: добавлен вручную |
422 |
46 |
В глобальном списке возвратов — адреса не существует |
curl -X GET 'https://api.dashamail.com/v2/lists/128341/check-email?email=ivan%40example.com' \
-H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/lists/128341/check-email?email=ivan%40example.com');
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/lists/128341/check-email?email=ivan%40example.com',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/lists/128341/check-email?email=ivan%40example.com', {
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": {
"valid": "ivan@example.com"
}
}
}
Очистить базу #
POST
/lists/{list_id}/clean
Удаляет из базы всех активных подписчиков, сохраняя саму базу и её настройки.
Операция необратима и недоступна на месячных тарифных
планах — в этом случае вернётся code: 58.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
list_id обязательный | integer | Идентификатор базы. |
Что возвращается
Количество удалённых записей.
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
429 |
58 |
Очистка запрещена на текущем тарифе |
500 |
57 |
В базе нет активных подписчиков |
curl -X POST 'https://api.dashamail.com/v2/lists/128341/clean' \
-H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/lists/128341/clean');
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/lists/128341/clean',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/lists/128341/clean', {
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": {
"count": 1284
}
}
}
Отписавшиеся #
GET
/lists/{list_id}/unsubscribed
Подписчики, отписавшиеся от рассылок, с датой отписки. Полезно для синхронизации отписок с вашей CRM.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
list_id обязательный | integer | Идентификатор базы. |
Параметры строки запроса
| Параметр | Тип | Описание |
|---|---|---|
start | integerпо умолчанию: 0 | Смещение. |
limit | integerпо умолчанию: 100 | Размер страницы. |
order | stringпо умолчанию: optin_time asc | Сортировка в формате поле направление. |
date_start | datetime | Отписавшиеся начиная с этого момента. |
date_end | datetime | Отписавшиеся до этого момента. |
email | string | Проверить конкретный адрес. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
404 |
4 |
Отписавшихся нет |
curl -X GET 'https://api.dashamail.com/v2/lists/128341/unsubscribed?date_start=2026-04-01+00%3A00%3A00&limit=50' \
-H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/lists/128341/unsubscribed?date_start=2026-04-01+00%3A00%3A00&limit=50');
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/lists/128341/unsubscribed?date_start=2026-04-01+00%3A00%3A00&limit=50',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/lists/128341/unsubscribed?date_start=2026-04-01+00%3A00%3A00&limit=50', {
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": 90412881,
"email": "ivan@example.com",
"list_id": 128341,
"unsub_time": "2026-04-11 18:20:03"
}
]
}
}
Жалобы на спам #
GET
/lists/{list_id}/complaints
Подписчики, нажавшие «Это спам» в своём почтовом клиенте. Такие адреса исключаются из рассылок навсегда.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
list_id обязательный | integer | Идентификатор базы. |
Параметры строки запроса
| Параметр | Тип | Описание |
|---|---|---|
start | integerпо умолчанию: 0 | Смещение. |
limit | integerпо умолчанию: 100 | Размер страницы. |
order | string | Сортировка в формате поле направление. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
404 |
4 |
Жалоб нет |
curl -X GET 'https://api.dashamail.com/v2/lists/128341/complaints' \
-H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/lists/128341/complaints');
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/lists/128341/complaints',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/lists/128341/complaints', {
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": 90412899,
"email": "spam-reporter@example.com",
"list_id": 128341,
"state": "complained"
}
]
}
}
Добавить дополнительное поле #
POST
/lists/{list_id}/fields
Добавляет в базу новое дополнительное поле. Оно займёт
первый свободный номер merge_N.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
list_id обязательный | integer | Идентификатор базы. |
Параметры тела запроса
| Параметр | Тип | Описание |
|---|---|---|
type обязательный | string | Тип поля. Допустимые значения: text, number, date, choice, tags |
var | string | Имя подстановки для писем — например ИМЯ подставляется как %ИМЯ%. Не длиннее 10 символов. |
title | stringпо умолчанию: Без названия | Отображаемое название поля. |
choices | JSON-строка | Массив вариантов. Обязателен для типа choice. |
req | string | Со значением on поле становится обязательным при добавлении подписчиков. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
422 |
3 |
Не передан type |
500 |
12 |
Для типа choice не заданы choices |
500 |
59 |
var длиннее 10 символов |
500 |
13 |
Достигнут лимит дополнительных полей на тарифе |
curl -X POST 'https://api.dashamail.com/v2/lists/128341/fields' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"type": "choice",
"var": "ГОРОД",
"title": "Город",
"choices": "[\"Москва\",\"Санкт-Петербург\",\"Казань\"]"
}'
<?php
$ch = curl_init('https://api.dashamail.com/v2/lists/128341/fields');
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([
'type' => 'choice',
'var' => 'ГОРОД',
'title' => 'Город',
'choices' => '["Москва","Санкт-Петербург","Казань"]',
], 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/lists/128341/fields',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
'type': 'choice',
'var': 'ГОРОД',
'title': 'Город',
'choices': '["Москва","Санкт-Петербург","Казань"]',
},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/lists/128341/fields', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"type": "choice",
"var": "ГОРОД",
"title": "Город",
"choices": "[\"Москва\",\"Санкт-Петербург\",\"Казань\"]"
}),
});
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
}
}
Изменить дополнительное поле #
PUT
/lists/{list_id}/fields/{merge_id}
Меняет параметры существующего поля. Незаданные параметры сохраняют прежние значения. Тип поля изменить нельзя.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
list_id обязательный | integer | Идентификатор базы. |
merge_id обязательный | integer | Номер поля: 1 для merge_1 и так далее. |
Параметры тела запроса
| Параметр | Тип | Описание |
|---|---|---|
merge_id обязательный | integer | Номер изменяемого поля — продублируйте значение из пути. |
title | string | Новое название. |
var | string | Новое имя подстановки. |
choices | JSON-строка | Новый список вариантов для поля типа choice. |
req | string | Обязательность поля. |
default | string | Значение по умолчанию. Неприменимо к полям типа tags. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
422 |
3 |
Не передан merge_id |
404 |
5 |
Базы с таким list_id нет |
curl -X PUT 'https://api.dashamail.com/v2/lists/128341/fields/2' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"merge_id": 2,
"title": "Город проживания",
"req": "on"
}'
<?php
$ch = curl_init('https://api.dashamail.com/v2/lists/128341/fields/2');
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([
'merge_id' => 2,
'title' => 'Город проживания',
'req' => 'on',
], 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/lists/128341/fields/2',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
'merge_id': 2,
'title': 'Город проживания',
'req': 'on',
},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/lists/128341/fields/2', {
method: 'PUT',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"merge_id": 2,
"title": "Город проживания",
"req": "on"
}),
});
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
/lists/{list_id}/fields/{merge_id}
Удаляет поле из базы вместе со значениями у всех подписчиков.
Поля с бо́льшими номерами сдвигаются на одну позицию вверх:
после удаления merge_2 бывшее merge_3
становится merge_2. Проверьте интеграции, которые
ссылаются на номера полей.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
list_id обязательный | integer | Идентификатор базы. |
merge_id обязательный | integer | Номер удаляемого поля. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
500 |
13 |
Номер поля выходит за пределы доступных полей |
404 |
5 |
Базы с таким list_id нет |
curl -X DELETE 'https://api.dashamail.com/v2/lists/128341/fields/3' \
-H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/lists/128341/fields/3');
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/lists/128341/fields/3',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/lists/128341/fields/3', {
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);
(тело ответа пустое)