Аккаунт
Баланс и лимиты, подтверждённые отправители, домены отправки и webhooks.
Раздел настраивает инфраструктуру отправки. Обычный порядок при подключении нового проекта такой:
- Добавить домен отправки;
- прописать выданные DNS-записи у своего регистратора;
- запустить проверку DNS и дождаться
valid: 1; - настроить webhooks, чтобы получать события доставки на свой сервер.
События webhooks
Webhook в DashaMail — это пара «событие → URL». На одно событие можно задать один адрес. События различаются для массовых и транзакционных писем:
| Событие | Массовые | Транзакционные | Когда срабатывает |
|---|---|---|---|
send | — | да | Письмо отправлено |
delivered | — | да | Письмо доставлено |
open | да | да | Письмо открыто |
click | да | да | Клик по ссылке |
hard | да | да | Невозвратная ошибка доставки |
spam | да | да | Жалоба на спам |
unsub | да | да | Отписка |
dropped | — | да | Письмо отброшено до отправки |
subscribe | да | — | Новая подписка |
confirm | да | — | Подтверждение подписки |
- GET Баланс и лимиты
- GET Подтверждённые отправители
- POST Отправить письмо подтверждения
- GET Домены отправки
- POST Добавить домен
- GET Проверить DNS доменов
- DELETE Удалить домен
- GET Webhooks массовых рассылок
- POST Настроить webhooks массовых рассылок
- DELETE Удалить webhook
- GET Webhooks транзакционных писем
- POST Настроить webhooks транзакционных писем
- DELETE Удалить webhook транзакционных писем
Баланс и лимиты #
GET
/account/balance
Текущие лимиты аккаунта и число активных подписчиков. Самый дешёвый запрос — годится для проверки работоспособности ключа.
Что возвращается
На поштучных тарифах limit_emails — остаток
оплаченных писем, а limit_members равен нулю.
На месячных тарифах возвращается и expiration_date
— дата окончания оплаченного периода.
curl -X GET 'https://api.dashamail.com/v2/account/balance' \
-H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/account/balance');
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/account/balance',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/account/balance', {
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": {
"limit_members": 5000,
"limit_emails": 50000,
"expiration_date": "01.10.2026 12:00:00",
"members": 1284
}
}
}
Подтверждённые отправители #
GET
/account/senders
Список адресов, подтверждённых как обратные. Возвращается массивом строк, не более ста записей.
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
404 |
4 |
Подтверждённых адресов нет |
curl -X GET 'https://api.dashamail.com/v2/account/senders' \
-H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/account/senders');
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/account/senders',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/account/senders', {
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": [
"news@example.ru",
"support@example.ru"
]
}
}
Отправить письмо подтверждения #
POST
/account/senders/confirm
Отправляет на указанный адрес письмо со ссылкой подтверждения. Адрес станет доступен как обратный после того, как получатель перейдёт по ссылке.
Параметры тела запроса
| Параметр | Тип | Описание |
|---|---|---|
email обязательный | string | Адрес, который нужно подтвердить. |
code обязательный | string | Служебный параметр запроса — передайте сюда тот же адрес. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
422 |
3 |
Не переданы обязательные параметры |
500 |
49 |
Адрес уже подтверждён |
500 |
50 |
Одноразовый почтовый адрес |
500 |
51 |
Публичный домен Mail.ru запрещён политикой DMARC |
500 |
48 |
Не удалось отправить письмо подтверждения |
curl -X POST 'https://api.dashamail.com/v2/account/senders/confirm' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"email": "news@example.ru",
"code": "news@example.ru"
}'
<?php
$ch = curl_init('https://api.dashamail.com/v2/account/senders/confirm');
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' => 'news@example.ru',
'code' => 'news@example.ru',
], 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/account/senders/confirm',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
'email': 'news@example.ru',
'code': 'news@example.ru',
},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/account/senders/confirm', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"email": "news@example.ru",
"code": "news@example.ru"
}),
});
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
}
}
Домены отправки #
GET
/account/domains
Домены аккаунта и состояние их DNS-настроек. Значения берутся из последней проверки — чтобы обновить их, вызовите проверку DNS.
Параметры строки запроса
| Параметр | Тип | Описание |
|---|---|---|
domain | string | Вернуть только этот домен отправки. |
stat_domain | string | Вернуть только этот домен статистики. |
Что возвращается
type различает домен отправки
(domain) и домен статистики
(stat_domain). valid — домен
полностью настроен; valid_spf и
valid_dkim показывают состояние отдельных
записей; double_spf сигнализирует о двух
SPF-записях на домене — это ошибка конфигурации.
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
404 |
4 |
Доменов нет |
curl -X GET 'https://api.dashamail.com/v2/account/domains' \
-H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/account/domains');
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/account/domains',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/account/domains', {
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": [
{
"domain": "example.ru",
"type": "domain",
"valid": 1,
"valid_spf": 1,
"valid_dkim": 1,
"double_spf": 0,
"last_update": "2026-04-10 03:00:00"
},
{
"domain": "stat.example.ru",
"type": "stat_domain",
"valid": 1,
"last_update": "2026-04-10 03:00:00"
}
]
}
}
Добавить домен #
POST
/account/domains
Регистрирует домен в аккаунте и возвращает DNS-записи, которые нужно прописать у регистратора. До того как записи появятся в DNS и пройдут проверку, отправка с этого домена не заработает.
Кроме домена отправки можно добавить домен статистики — тогда ссылки отслеживания в письмах будут вести на ваш поддомен, а не на домен DashaMail. Оба параметра можно передать в одном запросе.
Параметры тела запроса
| Параметр | Тип | Описание |
|---|---|---|
domain обязательный | string | Домен отправки. Национальные (кириллические) домены не поддерживаются. |
stat_domain | string | Поддомен для ссылок статистики, например stat.example.ru. |
Что возвращается
Массив DNS-записей: тип, имя и значение каждой.
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
500 |
54 |
Некорректный домен или национальное имя |
500 |
56 |
Домен уже добавлен либо занят другим аккаунтом |
curl -X POST 'https://api.dashamail.com/v2/account/domains' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"domain": "example.ru",
"stat_domain": "stat.example.ru"
}'
<?php
$ch = curl_init('https://api.dashamail.com/v2/account/domains');
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([
'domain' => 'example.ru',
'stat_domain' => 'stat.example.ru',
], 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/account/domains',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
'domain': 'example.ru',
'stat_domain': 'stat.example.ru',
},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/account/domains', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"domain": "example.ru",
"stat_domain": "stat.example.ru"
}),
});
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": [
{
"record_type": "TXT",
"name": "example.ru.",
"value": "v=spf1 include:dashamail.com ~all",
"valid": 0
},
{
"record_type": "TXT",
"name": "dm._domainkey.example.ru.",
"value": "v=DKIM1; k=rsa; p=MIGfMA0…",
"valid": 0
},
{
"record_type": "CNAME",
"name": "stat.example.ru.",
"value": "stat.dashamail.com.",
"valid": 0
}
]
}
}
Проверить DNS доменов #
GET
/account/domains/check
Запрашивает DNS и обновляет состояние доменов. Вызывайте после того, как прописали записи у регистратора — распространение изменений обычно занимает от нескольких минут до нескольких часов.
Параметры строки запроса
| Параметр | Тип | Описание |
|---|---|---|
domain | string | Проверить только этот домен отправки. |
stat_domain | string | Проверить только этот домен статистики. |
Что возвращается
Те же DNS-записи, что и при добавлении домена, но с
актуальным полем valid у каждой. Пока хотя бы
одна запись имеет valid: 0, домен настроен
не полностью.
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
404 |
4 |
Доменов для проверки нет |
500 |
57 |
Домена статистики с таким именем нет |
curl -X GET 'https://api.dashamail.com/v2/account/domains/check' \
-H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/account/domains/check');
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/account/domains/check',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/account/domains/check', {
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": [
{
"record_type": "TXT",
"name": "example.ru.",
"value": "v=spf1 include:dashamail.com ~all",
"valid": 1
},
{
"record_type": "TXT",
"name": "dm._domainkey.example.ru.",
"value": "v=DKIM1; k=rsa; p=MIGfMA0…",
"valid": 1
}
]
}
}
Удалить домен #
DELETE
/account/domains/{domain}
Убирает домен из аккаунта. После удаления отправка с адресов на этом домене прекращается.
Служебные домены DashaMail удалить нельзя.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
domain обязательный | string | Имя домена. |
Параметры тела запроса
| Параметр | Тип | Описание |
|---|---|---|
delete_stat_domain | string | Удалить заодно и домен статистики. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
500 |
54 |
Домен нельзя удалить |
curl -X DELETE 'https://api.dashamail.com/v2/account/domains/example.ru' \
-H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/account/domains/example.ru');
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/account/domains/example.ru',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/account/domains/example.ru', {
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);
(тело ответа пустое)
Webhooks массовых рассылок #
GET
/account/webhooks
Текущие адреса, на которые уходят события массовых рассылок — объект вида «событие → URL».
Параметры строки запроса
| Параметр | Тип | Описание |
|---|---|---|
event_name | string | Вернуть настройку только одного события. Допустимые значения: open, click, hard, spam, unsub, subscribe, confirm |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
404 |
4 |
Webhooks не заданы или указанное событие не настроено |
500 |
53 |
Недопустимое значение event_name |
curl -X GET 'https://api.dashamail.com/v2/account/webhooks' \
-H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/account/webhooks');
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/account/webhooks',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/account/webhooks', {
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": [
{
"open": "https://example.ru/hooks/open",
"click": "https://example.ru/hooks/click",
"hard": "",
"spam": "",
"unsub": "https://example.ru/hooks/unsub",
"subscribe": "",
"confirm": ""
}
]
}
}
Настроить webhooks массовых рассылок #
POST
/account/webhooks
Задаёт адреса приёма событий. Ключ каждого параметра — имя события, значение — URL. Передавайте только те события, которые нужно изменить; пустая строка отключает событие.
Параметры тела запроса
| Параметр | Тип | Описание |
|---|---|---|
open | string | URL для событий открытия. |
click | string | URL для событий клика. |
hard | string | URL для невозвратных ошибок доставки. |
spam | string | URL для жалоб на спам. |
unsub | string | URL для отписок. |
subscribe | string | URL для новых подписок. |
confirm | string | URL для подтверждений подписки. |
url обязательный | string | Служебный параметр запроса — продублируйте сюда любой из указанных выше адресов. |
event обязательный | string | Служебный параметр запроса — имя настраиваемого события. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
422 |
3 |
Не переданы обязательные параметры |
curl -X POST 'https://api.dashamail.com/v2/account/webhooks' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"open": "https://example.ru/hooks/open",
"click": "https://example.ru/hooks/click",
"url": "https://example.ru/hooks/open",
"event": "open"
}'
<?php
$ch = curl_init('https://api.dashamail.com/v2/account/webhooks');
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([
'open' => 'https://example.ru/hooks/open',
'click' => 'https://example.ru/hooks/click',
'url' => 'https://example.ru/hooks/open',
'event' => 'open',
], 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/account/webhooks',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
'open': 'https://example.ru/hooks/open',
'click': 'https://example.ru/hooks/click',
'url': 'https://example.ru/hooks/open',
'event': 'open',
},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/account/webhooks', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"open": "https://example.ru/hooks/open",
"click": "https://example.ru/hooks/click",
"url": "https://example.ru/hooks/open",
"event": "open"
}),
});
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
}
}
Удалить webhook #
DELETE
/account/webhooks/{event_name}
Отключает приём событий указанного типа.
Если event_name не распознан, удаляются
настройки всех событий сразу. Проверяйте
имя события перед вызовом.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
event_name обязательный | string | Имя события. Допустимые значения: open, click, hard, spam, unsub, subscribe, confirm |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
404 |
4 |
Webhooks не заданы или событие не настроено |
500 |
53 |
Недопустимое имя события |
curl -X DELETE 'https://api.dashamail.com/v2/account/webhooks/click' \
-H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/account/webhooks/click');
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/account/webhooks/click',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/account/webhooks/click', {
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);
(тело ответа пустое)
Webhooks транзакционных писем #
GET
/account/webhooks/transactional
Адреса приёма событий транзакционных писем. Набор событий
отличается от массовых рассылок — здесь есть
send, delivered и
dropped.
Параметры строки запроса
| Параметр | Тип | Описание |
|---|---|---|
event_name | string | Вернуть настройку одного события. Допустимые значения: dropped, open, click, hard, spam, unsub, delivered, send |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
404 |
4 |
Webhooks не заданы |
500 |
53 |
Недопустимое значение event_name |
curl -X GET 'https://api.dashamail.com/v2/account/webhooks/transactional' \
-H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/account/webhooks/transactional');
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/account/webhooks/transactional',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/account/webhooks/transactional', {
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": [
{
"send": "https://example.ru/hooks/tr-send",
"delivered": "https://example.ru/hooks/tr-delivered",
"dropped": "",
"open": "",
"click": "",
"hard": "https://example.ru/hooks/tr-hard",
"spam": "",
"unsub": ""
}
]
}
}
Настроить webhooks транзакционных писем #
POST
/account/webhooks/transactional
Задаёт адреса приёма событий транзакционных писем. Формат тот же, что и для массовых рассылок: ключ — имя события, значение — URL.
Параметры тела запроса
| Параметр | Тип | Описание |
|---|---|---|
send | string | URL для событий отправки. |
delivered | string | URL для событий доставки. |
dropped | string | URL для отброшенных писем. |
open | string | URL для открытий. |
click | string | URL для кликов. |
hard | string | URL для невозвратных ошибок. |
spam | string | URL для жалоб на спам. |
unsub | string | URL для отписок. |
url обязательный | string | Служебный параметр запроса — продублируйте сюда любой из указанных выше адресов. |
event обязательный | string | Служебный параметр запроса — имя настраиваемого события. |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
422 |
3 |
Не переданы обязательные параметры |
500 |
53 |
Сначала нужно задать домен отправки |
curl -X POST 'https://api.dashamail.com/v2/account/webhooks/transactional' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"delivered": "https://example.ru/hooks/tr-delivered",
"hard": "https://example.ru/hooks/tr-hard",
"url": "https://example.ru/hooks/tr-delivered",
"event": "delivered"
}'
<?php
$ch = curl_init('https://api.dashamail.com/v2/account/webhooks/transactional');
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([
'delivered' => 'https://example.ru/hooks/tr-delivered',
'hard' => 'https://example.ru/hooks/tr-hard',
'url' => 'https://example.ru/hooks/tr-delivered',
'event' => 'delivered',
], 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/account/webhooks/transactional',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
'delivered': 'https://example.ru/hooks/tr-delivered',
'hard': 'https://example.ru/hooks/tr-hard',
'url': 'https://example.ru/hooks/tr-delivered',
'event': 'delivered',
},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/account/webhooks/transactional', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"delivered": "https://example.ru/hooks/tr-delivered",
"hard": "https://example.ru/hooks/tr-hard",
"url": "https://example.ru/hooks/tr-delivered",
"event": "delivered"
}),
});
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
}
}
Удалить webhook транзакционных писем #
DELETE
/account/webhooks/transactional/{event_name}
Отключает приём событий указанного типа для транзакционных писем.
Как и для массовых рассылок: нераспознанное имя события приводит к удалению настроек всех событий.
Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
event_name обязательный | string | Имя события. Допустимые значения: dropped, open, click, hard, spam, unsub, delivered, send |
Возможные ошибки
| HTTP | code | Когда возникает |
|---|---|---|
404 |
4 |
Webhooks не заданы или событие не настроено |
500 |
53 |
Недопустимое имя события |
curl -X DELETE 'https://api.dashamail.com/v2/account/webhooks/transactional/open' \
-H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/account/webhooks/transactional/open');
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/account/webhooks/transactional/open',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
)
response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/account/webhooks/transactional/open', {
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);
(тело ответа пустое)