Статистика в Постмастере записывается и отображается (в том числе передаётся в API) по домену из DKIM-подписи (тег ’d’). Значение заголовка From не учитывается.
Краткое описание
Постмастер API позволяет от имени своего аккаунта делать запросы для получения данных в автоматическом режиме. Для авторизации используется Oauth 2.0. При помощи этого протокола скрипт получает от аккаунта-владельца ограниченные права на выполнение некоторых операций, таких как получение статистики по принадлежащим данному аккаунту доменам. Методы Постмастер API доступны по URL, начинающимся с префикса /ext-api/, и будут подробно описаны ниже.
Авторизация и токены
Для получения доступа к API необходимо сгенерировать два токена:
refresh_token — долговременный токен — используется для того, чтобы генерировать кратковременные
access_token
для доступа к API.refresh_token
не имеет срока действия, может быть сгенерирован снова по желанию владельца аккаунта.access_token — кратковременный токен — используется в каждом сеансе работы с API и передаётся с каждым запросом в HTTP заголовке
Bearer
. Время жизниaccess_token
— 1 час.
Пошаговая процедура получения токена и выполнения первого запроса к API с иcпользованием curl:
Будучи авторизованным на mail.ru под аккаунтом, от лица которого будут выполняться запросы к API, перейдите по ссылке для получения пары токенов (
refresh_token
,access_token
).В результате вы получите ответ в формате JSON следующего вида:
{"access_token":"1222362434157c389d38348daf10ff73099cf23037363631","expires_in":3600, "refresh_token":"8d94455cb4f473f2a5801749b0f0fbe1099ca23037363831"}
Для того чтобы обновить протухший
access_token
, делаем POST запрос следующего вида (менять нужно толькозначение_вашего_токена
, конструкцияgrant_type=refresh_token
меняться не должна):curl -X POST "https://o2.mail.ru/token" -d "client_id=postmaster_api_client&grant_type=refresh_token&refresh_token=значение_вашего_токена"
В результате будет получен код 200 и JSON следующего вида:
{"expires_in":3600,"access_token":" 7k232kd232q20zl09085328nm23238nc2mmx279ca908r270'"}
Полученный
access_token
необходимо отправлять в HTTP заголовкеBearer
вместе с каждым запросом к API.Bearer: 7k232kd232q20zl09085328nm23238nc2mmx279ca908r270
Например, так будет выглядеть запрос к API на получение списка подтверждённых доменов для текущего аккаунта. Запрос выполнен с помощью curl и полученного access_token:
curl -k -X GET "https://postmaster.mail.ru/ext-api/reg-list/" -H 'Bearer: 7k232kd232q20zl09085328nm23238nc2mmx279ca908r270>'
В случае удачи в возвращаемом JSON будет присутствовать
"ok": true
, например:{"ok": true, domains: []}
Методы API
/ext-api/reg-list/
- Выводит список подтверждённых для данного аккаунта доменов. Возвращает пустой список, если нет ни одного подтверждённого домена.
- Дополнительные параметры не используются.
Пример вызова с помощью curl
curl -k -X GET "https://postmaster.mail.ru/ext-api/reg-list/" -H 'Bearer: 6c5bf168b3d7852a0bdd66283e744b8099ca2303736'
Ответ в формате JSON
{
"ok": true,
"domains": [
{
"domain": "alphadomain.ru"
},
{
"domain": "betadomain.ru"
},
{
"domain": "gammadomain.ru"
}
]
}
/ext-api/troubles-list/
- Выводит список доменов, у которых в веб-интерфейсе вы видите уведомление о наличии проблем (SPF, DKIM, DMARC).
- Дополнительные параметры не используются.
Пример вызова с помощью curl
curl -k -X GET "https://postmaster.mail.ru/ext-api/troubles-list/" -H 'Bearer: 6c5bf168b3d7852a0bdd66283e744b8099ca2303736'
Ответ в формате JSON
{
"ok": true,
"data": [
{
"domain": "alphadomain.ru",
"errors": [
{
"msg": "DMARC check failed.",
"code": -1
},
{
"msg": "DKIM statistics not available",
"code": 0
}
]
},
{
"domain": "betadomain.ru",
"errors": [
{
"msg": "DMARC (p=None).",
"code": 1
}
]
},
{
"domain": "gammadomain.ru",
"errors": [
{
"msg": "SPF not found.",
"code": -2
},
{
"msg": "DMARC check failed.",
"code": -1
}
]
}
]
}
/ext-api/stat-list/
- Выводит cуммарную статистику по заданному периоду, домену, тегу. В случае успеха содержит в JSON ответе
{ok:"true"}
. - Параметры
- date_from — обязателен, начальная дата, начиная с которой (включительно) выводится статистика. Задается в виде YYYY-MM-DD (пример: 2018-06-14). Разница между date_from и текущей датой не должна составлять более 1 года.
- date_to — необязателен, конечная дата, по которую (включительно) выводится статистика. Задается в виде YYYY-MM-DD. Если не указана — берётся текущая дата.
- domain — имя домена, по которому необходимо вывести статистику. Например, gammadomain.ru. По дефолту статистика выводится по всем подтверждённым доменам.
- msgtype — имя тега, по которому необходимо вывести статистику. Статистика передаётся по письмам, содержащим данный тег в заголовках X-Mailru-Msgtype/X-Postmaster-Msgtype, об использовании этих заголовков можно прочитать здесь. Указывается только совместно с именем домена.
Вывод статистики за период с 25.04.2018 по текущие сутки по всем подтверждённым доменам
Пример вызова с помощью curl
curl -k -X GET "https://postmaster.mail.ru/ext-api/stat-list/?date_from=2018-04-25" -H 'Bearer:6c5bf168b3d7854a0bdd36283e744b20992a2313736'
Ответ в формате JSON
{ "ok": true, "data": [ { "domain": "alphadomain.ru", "delivered": 2, "messages_sent": 0, "deleted_read": 1, "spam": 0, "read": 2, "spam_percent": 0.0, "probably_spam_percent": 0.0, "complaints": 0, "deleted_unread": 0, "probably_spam": 0 }, { "domain": "betadomain.ru", "delivered": 0, "messages_sent": 0, "deleted_read": 0, "spam": 0, "read": 0, "spam_percent": 0.0, "probably_spam_percent": 0.0, "complaints": 0, "deleted_unread": 0, "probably_spam": 0 }, { "domain": "gammadomain.ru", "delivered": 19, "messages_sent": 29, "deleted_read": 0, "spam": 10, "read": 22, "spam_percent": 0.0, "probably_spam_percent": 0.0, "complaints": 0, "deleted_unread": 4, "probably_spam": 0 } ] }
Вывод статистики по домену alphadomain.ru за период с 25.04.2018 по 01.05.2018. Вызов с параметрами domain и date_from, date_to
Пример вызова с помощью curl
curl -k -X GET "https://postmaster.mail.ru/ext-api/stat-list/?domain=alphadomain.ru&date_from=2018-04-25&date_to=2018-05-01" -H 'Bearer: 6c5bf168b3d7854a0bdd36283e744b20992a2313736'
Ответ в формате JSON
{ "ok": true, "data": [ { "domain": "alphadomain.ru", "delivered": 46, "messages_sent": 46, "deleted_read": 221, "spam": 0, "read": 212, "spam_percent": 0.0, "probably_spam_percent": 0.0, "complaints": 1, "deleted_unread": 960, "probably_spam": 0 } ] }
Вывод статистики по домену alphadomain.ru и тегу “hotnews” за выбранный период. Вызов с параметрами domain, date_from, date_to и msgtype
Пример вызова с помощью curl
curl -k -X GET "https://postmaster.mail.ru/ext-api/stat-list/?domain=alphadomain.ru&date_from=2018-04-25&date_to=2018-05-01&msgtype=hotnews" -H 'Bearer: 6c5bf168b3d7854a0bdd36283e744b20992a2313736'
Ответ в формате JSON
{ "ok": true, "data": [ { "domain": "alphadomain.ru", "delivered": 26, "messages_sent": 26, "deleted_read": 21, "spam": 0, "read": 20, "spam_percent": 0.0, "probably_spam_percent": 0.0, "complaints": 0, "deleted_unread": 12, "probably_spam": 0 } ] }
/ext-api/stat-list-detailed/
- Выводит детальную статистику (разбиение по дням) по заданному периоду, домену, тегу.
- Параметры
- date_from — обязателен, начальная дата, начиная с которой(включительно) выводится статистика. Задается в виде YYYY-MM-DD (пример: 2018-06-14). Разница между date_from и текущей датой не должна составлять более 1 года.
- date_to — необязателен, конечная дата, по которую (включительно) выводится статистика. Задается в виде YYYY-MM-DD. Если не указана — берётся текущая дата.
- domain — имя домена, по которому необходимо вывести статистику. По дефолту статистика выводится по всем подтверждённым доменам.
- msgtype — имя тега, по которому необходимо вывести статистику. Статистика передаётся по письмам, содержащим данный тег в заголовках X-Mailru-Msgtype/X-Postmaster-Msgtype, об использовании этих заголовков можно прочитать здесь. Указывается только совместно с именем домена.
Вывод детальной статистики по домену alphadomain.ru за период с 23.04.2018 по 25.04.2018. Вызов с параметрами domain и date_from, date_to
Пример вызова с помощью curl
curl -k -X GET "https://postmaster.mail.ru/ext-api/stat-list-detailed/?domain=alphadomain.ru&date_from=2018-04-23&date_to=2018-04-25" -H 'Bearer:6c5bf168b3d7854a0bdd36283e744b20992a2313736'
Ответ в формате JSON
{ "ok": true, "data": [ { "domain": "alphadomain.ru", "data": [ { "delivered": 4980696, "messages_sent": 4980699, "deleted_read": 75309, "spam": 0, "read": 327158, "spam_percent": 0, "date": "2018-04-25", "reputation": 0.0457271469759617, "complaints": 1877, "deleted_unread": 148685, "probably_spam": 3, "trend": -8.50375076175999, "probably_spam_percent": 0.00006023250953330045 }, { "delivered": 5205823, "messages_sent": 5205828, "deleted_read": 79964, "spam": 0, "read": 331509, "spam_percent": 0, "date": "2018-04-24", "reputation": 0.0459325440733408, "complaints": 1868, "deleted_unread": 169365, "probably_spam": 5, "trend": -7.67667312958405, "probably_spam_percent": 0.00009604620052756257 }, { "delivered": 5043425, "messages_sent": 5043434, "deleted_read": 91322, "spam": 0, "read": 294812, "spam_percent": 0, "date": "2018-04-23", "reputation": 0.0452646935881204, "complaints": 2294, "deleted_unread": 173716, "probably_spam": 9, "trend": -4.854289596974, "probably_spam_percent": 0.00017844984191326782 } ] } ] }
Вывод статистики по домену alphadomain.ru и тегу “hotnews” за выбранный период. Вызов с параметрами domain, date_from, date_to и msgtype
Пример вызова с помощью curl
curl -k -X GET "https://postmaster.mail.ru/ext-api/stat-list-detailed/?domain=alphadomain.ru&date_from=2018-04-23&date_to=2018-04-25&msgtype=hotnews" -H 'Bearer:6c5bf168b3d7854a0bdd36283e744b20992a2313736'
Ответ в формате JSON
{ "ok": true, "data": [ { "domain": "alphadomain.ru", "data": [ { "delivered": 8143, "messages_sent": 8143, "deleted_read": 707, "spam": 0, "read": 1152, "spam_percent": 0, "date": "2018-04-25", "reputation": 0, "complaints": 14, "deleted_unread": 3094, "probably_spam": 0, "trend": 0, "probably_spam_percent": 0 }, { "delivered": 10165, "messages_sent": 10165, "deleted_read": 800, "spam": 0, "read": 1286, "spam_percent": 0, "date": "2018-04-24", "reputation": 0, "complaints": 4, "deleted_unread": 3863, "probably_spam": 0, "trend": 0, "probably_spam_percent": 0 }, { "delivered": 9703, "messages_sent": 9703, "deleted_read": 802, "spam": 0, "read": 1303, "spam_percent": 0, "date": "2018-04-23", "reputation": 0, "complaints": 6, "deleted_unread": 3826, "probably_spam": 0, "trend": 0, "probably_spam_percent": 0 } ] } ] }
Лимиты
- Время жизни
access_token
– 1 час. - Количество запросов для каждой из групп (/ext-api/reg-list/, /ext-api/troubles-list/) и (/ext-api/stat-list/, /ext-api/stat-list/detailed) составляет 10 обращений в минуту по каждому домену с одного аккаунта
Возможные ошибки
- HTTP status “403 Forbidden” означает проблему в авторизации (например истёк access_token ). В этом случае необходимо получить свежий access_token, используя полученный в refresh_token.
- Ошибка “Token not found” , вида { “error”:“token not found”, “error_code”:6, “error_description”:“token not found”} означает неверно указанный refresh_token.
- Ошибка “429 Unknown Status Code” вида {“detail”: “Запрос был проигнорирован. Expected available in N seconds.”} означает, что было превышено количество запросов для одной из групп (/ext-api/reg-list/, /ext-api/troubles-list/) и (/ext-api/stat-list/, /ext-api/stat-list/detailed).
- Ошибка в JSON вида { “error”: “…” } означает, что произошла ошибка на стороне API (были переданы неверные параметры для запроса, несуществующий домен, отсутствует статистика). Описания ошибок различаются для разных методов API.
- Ошибка “error”: “Wrong param: date_from, older than 1 year” означает, что разница между date_from и текущей датой превышает 1 год.
- Ошибка “error”: “Wrong param: date_from > date_to” означает, что в date_to указана более ранняя дата, чем в date_from.