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

Аккаунт

Баланс и лимиты, подтверждённые отправители, домены отправки и webhooks.

Раздел настраивает инфраструктуру отправки. Обычный порядок при подключении нового проекта такой:

  1. Добавить домен отправки;
  2. прописать выданные DNS-записи у своего регистратора;
  3. запустить проверку DNS и дождаться valid: 1;
  4. настроить webhooks, чтобы получать события доставки на свой сервер.

События webhooks

Webhook в DashaMail — это пара «событие → URL». На одно событие можно задать один адрес. События различаются для массовых и транзакционных писем:

СобытиеМассовыеТранзакционныеКогда срабатывает
sendдаПисьмо отправлено
deliveredдаПисьмо доставлено
openдадаПисьмо открыто
clickдадаКлик по ссылке
hardдадаНевозвратная ошибка доставки
spamдадаЖалоба на спам
unsubдадаОтписка
droppedдаПисьмо отброшено до отправки
subscribeдаНовая подписка
confirmдаПодтверждение подписки

Баланс и лимиты #

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);
Ответ HTTP 200
{
  "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

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

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

HTTPcodeКогда возникает
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);
Ответ HTTP 200
{
  "response": {
    "msg": {
      "err_code": 0,
      "text": "OK",
      "type": "message"
    },
    "data": [
      "news@example.ru",
      "support@example.ru"
    ]
  }
}

Отправить письмо подтверждения #

POST /account/senders/confirm

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

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

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

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

HTTPcodeКогда возникает
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);
Ответ HTTP 200
{
  "response": {
    "msg": {
      "err_code": 0,
      "text": "OK",
      "type": "message"
    },
    "data": true
  }
}

Домены отправки #

GET /account/domains

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

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

ПараметрТипОписание
domainstringВернуть только этот домен отправки.
stat_domainstringВернуть только этот домен статистики.

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

type различает домен отправки (domain) и домен статистики (stat_domain). valid — домен полностью настроен; valid_spf и valid_dkim показывают состояние отдельных записей; double_spf сигнализирует о двух SPF-записях на домене — это ошибка конфигурации.

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

HTTPcodeКогда возникает
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);
Ответ HTTP 200
{
  "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_domainstringПоддомен для ссылок статистики, например stat.example.ru.

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

Массив DNS-записей: тип, имя и значение каждой.

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

HTTPcodeКогда возникает
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);
Ответ HTTP 201
{
  "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 и обновляет состояние доменов. Вызывайте после того, как прописали записи у регистратора — распространение изменений обычно занимает от нескольких минут до нескольких часов.

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

ПараметрТипОписание
domainstringПроверить только этот домен отправки.
stat_domainstringПроверить только этот домен статистики.

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

Те же DNS-записи, что и при добавлении домена, но с актуальным полем valid у каждой. Пока хотя бы одна запись имеет valid: 0, домен настроен не полностью.

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

HTTPcodeКогда возникает
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);
Ответ HTTP 200
{
  "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_domainstringУдалить заодно и домен статистики.

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

HTTPcodeКогда возникает
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);
Ответ HTTP 204
(тело ответа пустое)

Webhooks массовых рассылок #

GET /account/webhooks

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

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

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

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

HTTPcodeКогда возникает
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);
Ответ HTTP 200
{
  "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. Передавайте только те события, которые нужно изменить; пустая строка отключает событие.

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

ПараметрТипОписание
openstringURL для событий открытия.
clickstringURL для событий клика.
hardstringURL для невозвратных ошибок доставки.
spamstringURL для жалоб на спам.
unsubstringURL для отписок.
subscribestringURL для новых подписок.
confirmstringURL для подтверждений подписки.
url обязательныйstringСлужебный параметр запроса — продублируйте сюда любой из указанных выше адресов.
event обязательныйstringСлужебный параметр запроса — имя настраиваемого события.

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

HTTPcodeКогда возникает
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);
Ответ HTTP 201
{
  "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

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

HTTPcodeКогда возникает
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);
Ответ HTTP 204
(тело ответа пустое)

Webhooks транзакционных писем #

GET /account/webhooks/transactional

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

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

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

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

HTTPcodeКогда возникает
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);
Ответ HTTP 200
{
  "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.

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

ПараметрТипОписание
sendstringURL для событий отправки.
deliveredstringURL для событий доставки.
droppedstringURL для отброшенных писем.
openstringURL для открытий.
clickstringURL для кликов.
hardstringURL для невозвратных ошибок.
spamstringURL для жалоб на спам.
unsubstringURL для отписок.
url обязательныйstringСлужебный параметр запроса — продублируйте сюда любой из указанных выше адресов.
event обязательныйstringСлужебный параметр запроса — имя настраиваемого события.

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

HTTPcodeКогда возникает
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);
Ответ HTTP 201
{
  "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

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

HTTPcodeКогда возникает
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);
Ответ HTTP 204
(тело ответа пустое)

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

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