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

Отчёты

Статистика по рассылке: сколько ушло, дошло, открыли, кликнули, вернулось и отписалось.

Все отчёты строятся по одному шаблону адреса:

GET /reports/{campaign_id}/{метрика}

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

Метрики

summaryСводка по рассылке одним объектом
sentКому отправлено
deliveredКому доставлено
openedКто открыл
clickedКто кликнул
bouncedВозвраты
complainedЖалобы на спам
unsubscribedОтписавшиеся
eventsЛента всех событий с фильтрами
clickstatКлики в разрезе ссылок
userclicksКто кликнул по конкретной ссылке
bouncestatВозвраты в разрезе SMTP-кодов
domainsПоказатели в разрезе почтовых доменов
geoГеография открытий
clientsПочтовые клиенты и устройства
codesКоды подтверждения

Сортировка и постраничный вывод

Списочные отчёты принимают start, limit (по умолчанию 100) и order в формате поле направление. Допустимые поля сортировки: event_date, event_time, campaign_id, list_id, event_type, bounce_category, bounce_code, bounce_reason, email, domain, member_id, ip, region, OS, browser, webservice, user_agent, url_original, device. Направление — asc или desc.

Сводка по рассылке #

GET /reports/{campaign_id}/summary

Главные показатели рассылки одним объектом. Отсюда стоит начинать: остальные отчёты нужны, когда требуется детализация.

Параметр fast отдаёт заранее посчитанные значения — это заметно быстрее, но несовместимо с фильтром по времени.

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

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

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

ПараметрТипОписание
fastфлагВзять готовые агрегаты вместо пересчёта. Игнорируется, если задан период.
time_startdatetimeНачало периода. При заданном периоде поле sent из ответа исключается.
time_enddatetimeКонец периода.
detailedintegerСо значением 1 сводка разбивается по рассылкам.

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

opened и clicked — общее число событий, unique_opened и unique_clicked — число уникальных подписчиков. Возвраты разложены по типам: hard — несуществующие адреса, soft — временные отказы, spam и spam_blocked — отклонения антиспам-фильтрами, blk — прочие блокировки.

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

HTTPcodeКогда возникает
404 22 Рассылки с таким campaign_id нет
curl -X GET 'https://api.dashamail.com/v2/reports/501233/summary?fast=1' \
  -H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/reports/501233/summary?fast=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/reports/501233/summary?fast=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/reports/501233/summary?fast=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);
Ответ HTTP 200
{
  "response": {
    "msg": {
      "err_code": 0,
      "text": "OK",
      "type": "message"
    },
    "data": {
      "sent": 1284,
      "opened": 741,
      "unique_opened": 512,
      "clicked": 168,
      "unique_clicked": 121,
      "unsubscribed": 6,
      "complained": 1,
      "hard": 12,
      "soft": 4,
      "spam": 0,
      "spam_blocked": 3,
      "blk": 1,
      "preview": 22,
      "total_events": 2258,
      "first_sent": "2026-04-05 10:00:04",
      "first_open": "2026-04-05 10:01:37",
      "last_open": "2026-04-08 21:14:52",
      "first_click": "2026-04-05 10:02:11",
      "last_click": "2026-04-08 19:02:40"
    }
  }
}

Списки получателей по событию #

GET /reports/{campaign_id}/{metric}

Возвращает подписчиков, с которыми произошло указанное событие. Один и тот же формат для семи метрик: sent, delivered, opened, clicked, bounced, complained, unsubscribed.

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

ПараметрТипОписание
campaign_id обязательныйintegerИдентификатор рассылки.
metric обязательныйstringСобытие.
Допустимые значения: sent, delivered, opened, clicked, bounced, complained, unsubscribed

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

ПараметрТипОписание
startintegerпо умолчанию: 0Смещение.
limitintegerпо умолчанию: 100Размер страницы.
orderstringпо умолчанию: event_time ascСортировка, см. список полей.
external_campaign_idstringИспользовать ваш внешний идентификатор рассылки вместо campaign_id.
old_reportsфлагЧитать из архивного хранилища вместо аналитической базы. Нужен для очень старых рассылок.

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

HTTPcodeКогда возникает
422 3 Не передан ни campaign_id, ни external_campaign_id
404 22 Рассылки с таким идентификатором нет
500 23 Недопустимое поле в order
404 4 Событий такого типа не было
curl -X GET 'https://api.dashamail.com/v2/reports/501233/opened?limit=2' \
  -H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/reports/501233/opened?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/reports/501233/opened?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/reports/501233/opened?limit=2', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
  },
});

const payload = await response.json();
if (!response.ok) throw new Error(payload.error.message);
console.log(payload.response.data);
Ответ HTTP 200
{
  "response": {
    "msg": {
      "err_code": 0,
      "text": "OK",
      "type": "message"
    },
    "data": [
      {
        "member_id": 90412881,
        "campaign_id": 501233,
        "list_id": 128341,
        "email": "ivan@example.com",
        "sent_time": "2026-04-05 10:00:12"
      },
      {
        "member_id": 90412882,
        "campaign_id": 501233,
        "list_id": 128341,
        "email": "maria@example.com",
        "sent_time": "2026-04-05 10:00:13"
      }
    ]
  }
}

Лента событий #

GET /reports/{campaign_id}/events

Все события рассылки в одном потоке, с фильтрами по времени, типу и подписчику. Подходит для синхронизации событий с вашей аналитикой.

По умолчанию берутся события за сегодня. Чтобы получить события за другой период, задайте time_start и time_end явно.

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

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

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

ПараметрТипОписание
time_startdatetimeпо умолчанию: начало текущих сутокНачало периода.
time_enddatetimeпо умолчанию: начало следующих сутокКонец периода.
event_typestringОставить события одного типа.
Допустимые значения: SENT, OPENED, CLICKED, PREVIEW, UNSUBSCRIBED, COMPLAINED, BOUNCED
emailstringСобытия одного подписчика.
mergeJSON-строкаДополнительные поля подписчика, которые нужно приложить к каждому событию — например ["merge_1","merge_2"].
startintegerпо умолчанию: 0Смещение.
limitintegerпо умолчанию: 100Размер страницы.
orderstringпо умолчанию: event_time ascСортировка.

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

HTTPcodeКогда возникает
404 22 Рассылки с таким campaign_id нет
404 4 За период событий нет
curl -X GET 'https://api.dashamail.com/v2/reports/501233/events?event_type=CLICKED&time_start=2026-04-05+00%3A00%3A00&limit=2' \
  -H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/reports/501233/events?event_type=CLICKED&time_start=2026-04-05+00%3A00%3A00&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/reports/501233/events?event_type=CLICKED&time_start=2026-04-05+00%3A00%3A00&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/reports/501233/events?event_type=CLICKED&time_start=2026-04-05+00%3A00%3A00&limit=2', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
  },
});

const payload = await response.json();
if (!response.ok) throw new Error(payload.error.message);
console.log(payload.response.data);
Ответ HTTP 200
{
  "response": {
    "msg": {
      "err_code": 0,
      "text": "OK",
      "type": "message"
    },
    "data": [
      {
        "event_time": "2026-04-05 10:02:11",
        "event_type": "CLICKED",
        "email": "ivan@example.com",
        "url_original": "https://example.ru/sale",
        "device": "PC",
        "browser": "Chrome"
      },
      {
        "event_time": "2026-04-05 10:04:55",
        "event_type": "CLICKED",
        "email": "maria@example.com",
        "url_original": "https://example.ru/sale",
        "device": "Mobile",
        "browser": "Safari"
      }
    ]
  }
}

Клики по ссылкам #

GET /reports/{campaign_id}/clickstat

Сколько раз кликнули по каждой ссылке письма, от популярных к редким.

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

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

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

HTTPcodeКогда возникает
404 22 Рассылки с таким campaign_id нет
404 4 Кликов не было
curl -X GET 'https://api.dashamail.com/v2/reports/501233/clickstat' \
  -H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/reports/501233/clickstat');
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/reports/501233/clickstat',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/reports/501233/clickstat', {
  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": [
      {
        "url": "https://example.ru/sale",
        "clicks": 121
      },
      {
        "url": "https://example.ru/catalog",
        "clicks": 47
      }
    ]
  }
}

Кто кликнул по ссылке #

GET /reports/{campaign_id}/userclicks

Подписчики, кликнувшие по указанной ссылке, со временем клика. Выборка ограничена последним годом.

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

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

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

ПараметрТипОписание
url обязательныйstringСсылка целиком, в точности как в отчёте по кликам.

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

HTTPcodeКогда возникает
422 3 Не передан url
404 4 Кликов по этой ссылке не было
curl -X GET 'https://api.dashamail.com/v2/reports/501233/userclicks?url=https%3A%2F%2Fexample.ru%2Fsale' \
  -H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/reports/501233/userclicks?url=https%3A%2F%2Fexample.ru%2Fsale');
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/reports/501233/userclicks?url=https%3A%2F%2Fexample.ru%2Fsale',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/reports/501233/userclicks?url=https%3A%2F%2Fexample.ru%2Fsale', {
  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": [
      {
        "url": "https://example.ru/sale",
        "email": "ivan@example.com",
        "click_time": "2026-04-05 10:02:11"
      }
    ]
  }
}

Возвраты по кодам #

GET /reports/{campaign_id}/bouncestat

Группировка возвратов по SMTP-кодам с расшифровкой. Помогает понять, дело в несуществующих адресах или в репутации отправителя.

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

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

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

HTTPcodeКогда возникает
404 4 Возвратов не было
curl -X GET 'https://api.dashamail.com/v2/reports/501233/bouncestat' \
  -H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/reports/501233/bouncestat');
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/reports/501233/bouncestat',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/reports/501233/bouncestat', {
  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": [
      {
        "bounce_code": "5.1.1",
        "count": 9,
        "description": "Bad destination mailbox address"
      },
      {
        "bounce_code": "5.2.2",
        "count": 3,
        "description": "Mailbox full"
      }
    ]
  }
}

Показатели по доменам #

GET /reports/{campaign_id}/domains

Доставляемость и вовлечённость в разрезе почтовых провайдеров. Проседание по одному домену обычно означает проблему с репутацией именно у него.

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

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

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

ПараметрТипОписание
time_startdatetimeНачало периода.
time_enddatetimeКонец периода.
startintegerпо умолчанию: 0Смещение.
limitintegerпо умолчанию: 100Размер страницы.
order_fieldstringпо умолчанию: sentПоле сортировки.
order_typestringпо умолчанию: descНаправление сортировки.
Допустимые значения: asc, desc

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

HTTPcodeКогда возникает
404 4 Данных за период нет
curl -X GET 'https://api.dashamail.com/v2/reports/501233/domains' \
  -H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/reports/501233/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/reports/501233/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/reports/501233/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": "mail.ru",
        "sent": 612,
        "opened": 380,
        "unique_opened": 254,
        "clicked": 71,
        "unique_clicked": 55,
        "complained": 1,
        "unsubsribed": 3
      },
      {
        "domain": "yandex.ru",
        "sent": 431,
        "opened": 268,
        "unique_opened": 190,
        "clicked": 63,
        "unique_clicked": 47,
        "complained": 0,
        "unsubsribed": 2
      }
    ]
  }
}

География открытий #

GET /reports/{campaign_id}/geo

Распределение событий по регионам. Ключ — код региона, значение — количество событий.

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

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

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

HTTPcodeКогда возникает
404 4 Данных нет
curl -X GET 'https://api.dashamail.com/v2/reports/501233/geo' \
  -H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/reports/501233/geo');
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/reports/501233/geo',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/reports/501233/geo', {
  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": {
      "77": 412,
      "78": 133,
      "16": 51
    }
  }
}

Почтовые клиенты и устройства #

GET /reports/{campaign_id}/clients

Чем получатели читают письмо: браузеры, десктопные клиенты, мобильные устройства. Полезно перед изменением вёрстки.

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

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

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

HTTPcodeКогда возникает
404 4 Открытий и кликов не было
curl -X GET 'https://api.dashamail.com/v2/reports/501233/clients' \
  -H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/reports/501233/clients');
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/reports/501233/clients',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/reports/501233/clients', {
  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": {
      "chrome": 210,
      "safari": 122,
      "firefox": 44,
      "yandexbrowser": 88,
      "opera": 12,
      "ie": 3,
      "other": 19,
      "browsers": 498
    }
  }
}

Коды подтверждения #

GET /reports/{campaign_id}/codes

Одноразовые коды, разосланные в рамках рассылки, с адресами получателей и временем выдачи.

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

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

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

ПараметрТипОписание
startintegerпо умолчанию: 0Смещение.
limitintegerпо умолчанию: 100Размер страницы.
orderstringпо умолчанию: id descСортировка.

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

HTTPcodeКогда возникает
404 4 Кодов нет
curl -X GET 'https://api.dashamail.com/v2/reports/501233/codes' \
  -H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/reports/501233/codes');
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/reports/501233/codes',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/reports/501233/codes', {
  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": [
      {
        "email": "ivan@example.com",
        "code": "481920",
        "date": "2026-04-05 10:00:12"
      }
    ]
  }
}

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

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