Войти

API

REST API для интеграции с системой фильтрации почты Спаморез.

Основы API

Endpoint

https://my.spamorez.ru/panelv32/api/?token=ВАШ_API_ТОКЕН

Формат запроса

Запросы отправляются методом POST с телом в формате JSON. Поддерживается также GET с параметрами в URL.

POST body (JSON)
{ "request": "имя_модуля", "action": "действие", "параметры": "значения" }

Авторизация

Токен передаётся в параметре URL token. Сгенерировать токен можно в панели управления → «Токены доступа».

Поддерживаемые модули

requestОписание
trackerИстория обработки писем
messageДетали конкретного письма
queueОчередь отправки
domainsСписок доменов
domainУправление одним доменом
boxesСписок ящиков
boxУправление одним ящиком
whitelistsБелый список
blacklistsЧёрный список
statsСтатистика

Трекер

История обработки почтовых сообщений.

Список писем

Запрос
{ "request": "tracker", "action": "list", "status": "quarant", "date": "day", "mail_to": "example.com" }
ПараметрОписаниеПример
statusСтатус письмаquarant, deliv, reject, error
dateПериодday, lastday, week, month
subjectТема письма"Акция"
mail_fromОтправитель"sender@domain.com"
mail_toПолучатель"user@example.com"
smidID письма"2508200002183574501"
ip_fromIP отправителя"192.168.1.1"
perpageЗаписей на странице50
pageНомер страницы1
Ответ
{ "perpage": "50", "page": 1, "records": 453, "pages": 10, "rows": { "1": { "byid": {"key": "byid", "val": "2508200002183574501"}, "status": {"key": "status", "val": "zonde", "view": "Ловушки СПАМ"}, "date": {"key": "date", "val": "сегодня в 00:02, Ср"}, "subject": {"key": "subject", "val": "Тендер ПАО «ЛУКОЙЛ»"}, "mail_from": {"key": "mail_from","val": "srm@lukoil.com"}, "mail_to": {"key": "mail_to", "val": "yuri@mydomain.ru"}, "status_info": {"key": "status_info","val": "237"} } } }

Детальная информация о письме

Запрос
{ "request": "message", "action": "view", "byid": "2508200324264421504" }
ПолеОписание
byidУникальный ID письма
smidSpamorez Message ID
dateДата и время обработки
heloEHLO приветствие отправителя
ip_fromIP-адрес отправителя
mail_fromEmail отправителя
mail_toEmail получателя
subjectТема письма
msizeРазмер письма
quarantineФлаг карантина (0/1)
statusКод статуса обработки
status_textТекстовое описание статуса
headЗаголовки письма (raw)
logЛог обработки письма
Ответ (успех)
{ "records": 1, "code": "success", "rows": { "1": { "byid": {"key":"byid","val":"2508200324264421504"}, "smid": {"key":"smid","val":"2508200324264421504"}, "date": {"key":"date","val":"20 Августа в 03:24:26"}, "ip_from": {"key":"ip_from","val":"10.255.7.3"}, "mail_from": {"key":"mail_from","val":"sender@example.com"}, "mail_to": {"key":"mail_to","val":"sn@mydomain.ru"}, "subject": {"key":"subject","val":"Тема письма"}, "msize": {"key":"msize","val":"2.5 Kb"}, "quarantine": {"key":"quarantine","val":"0"}, "status_text": {"key":"status_text", "val":"Письмо доставлено по назначению"}, "head": {"key":"head","val":"Заголовки письма..."}, "log": {"key":"log","val":"Лог обработки..."} } } }
Ответ (ошибка)
{ "records": 0, "code": "failed", "error": "notfound", "text": "Запись не найдена", "module": "tracker", "request": "view" }

Очередь писем

Список очереди
{ "request": "queue", "action": "list", "mail_from": "sn@mov.ru", "date": "day", "perpage": 50, "page": 1 }
Принудительная отправка всех
{ "request": "queue", "action": "sendall" }
Частое использование sendall может привести к блокировке со стороны принимающих серверов из-за интенсивной отправки.
Ответ (список)
{ "records": 1, "code": "success", "rows": { "1": { "byid": {"key":"byid","val":"2508221749084133220"}, "status": {"key":"status","val":"queue", "view":"В очереди"}, "date": {"key":"date","val":"сегодня в 17:49, Пт"}, "mail_from": {"key":"mail_from","val":"sn@mov.ru"}, "mail_to": {"key":"mail_to", "val":"recipient@example.com"}, "status_info":{"key":"status_info","val":"340"} } }, "actions": ["list", "sendall"], "module": "tracker", "request": "list" }
Ответ (sendall)
{ "code": "success", "message": "Все письма из очереди отправлены", "sent_count": 15, "module": "tracker", "request": "sendall" }

Управление доменами

Список доменов

Запрос
{ "request": "domains", "action": "list", "active": "1", "domain": "example" }
Ответ
{ "records": 1, "code": "success", "rows": { "1": { "byid": {"key":"byid","val":"mydomain.ru"}, "status": {"key":"status","val":"normal", "view":"Активные"}, "domain": {"key":"domain","val":"mydomain.ru"}, "emailcnt": {"key":"emailcnt","val":"31"}, "mx_fail": {"key":"mx_fail","val":"0"}, "mxs_mx": {"key":"mxs_mx", "val":"001:mx.spamorez.ru;020:mx1.spamorez.ru"}, "spamlevel": {"key":"spamlevel","val":"6982 (90 %)"} } } }

Просмотр настроек домена

Запрос
{"request":"domain","action":"view","byid":"mydomain.ru"}
ПолеОписание
smtpserverОсновной SMTP-сервер доставки
smtpserver2Резервный SMTP-сервер
portПорт SMTP-сервера
databytesЛимит размера писем
num1Уровень спам-фильтрации (1–10)
boxtypeТип управления ящиками (add_safe / manual)
masquaradeМаскировка отправителя (yes/no)
weblearnВеб-обучение антиспама (enable/disable)
dkim_selectorDKIM-селектор
dkim_pubDKIM-публичный ключ

Добавление домена

Запрос
{ "request": "domain", "action": "add", "domain": "newdomain.ru", "smtpserver": "mx.yandex.ru", "boxtype": "add_safe", "masquarade": "yes" }
ПараметрОбязательный
domainДа
smtpserverДа
smtpserver2Нет
portНет
boxtypeНет
masquaradeНет
commentНет
Ответ (успех)
{ "code": "success", "rows": {"byid": 1855}, "actions": ["view","save","add","delete","check"], "module": "domain", "request": "add" }
Ошибка валидации
{ "code": "failed", "error": "fields", "rows": { "smtpserver": { "errors": [{"error":"badhost", "error_text":"Хост указан неверно"}] } }, "text": "Ошибка при заполнении полей" }

Изменение домена

Запрос
{ "request": "domain", "action": "save", "byid": "mydomain.ru", "smtpserver": "mx1.yandex.ru", "num1": "7.00" }

Ответ содержит изменённые поля с указанием старого и нового значения:

{"code":"success","rows":[{ "field":"smtpserver","old":"mx.yandex.ru","val":"mx1.yandex.ru" }]}

Удаление домена

Запрос
{ "request": "domain", "action": "delete", "byid": "example.ru" }
Перед удалением необходимо удалить все почтовые ящики домена. Операция необратима.
Код ошибкиОписание
notfoundДомен не найден
access_deniedНет прав на удаление
has_mailboxesНа домене есть ящики
has_aliasesНа домене есть алиасы
system_domainСистемный домен

Управление ящиками

Список ящиков
{ "request": "boxes", "action": "list", "domain": "mydomain.ru", "status": "active", "email": "admin@", "perpage": 100, "page": 1 }
Просмотр ящика
{ "request": "box", "action": "view", "byid": "user@mydomain.ru" }
Добавление ящика
{ "request": "box", "action": "add", "email": "newuser@mydomain.ru", "password": "securepassword123" }
Изменение ящика
{ "request": "box", "action": "save", "byid": "user@mydomain.ru", "comment": "Администратор", "password": "newpassword456" }
Удаление ящика
{ "request": "box", "action": "delete", "byid": "user@mydomain.ru" }
Поле ответаОписание
byidEmail ящика (ID)
statusactive / disabled / zonde
emailПолный email адрес
emailcntКоличество писем
boxunusedФлаг неиспользуемого
boxnospamОтключение фильтрации
commentКомментарий
spamlevelУровень спама
Код ошибкиОписание
notfoundЯщик не найден
already_existsЯщик уже существует
invalid_emailНеверный формат email
domain_not_existsДомен не существует
password_too_weakСлишком слабый пароль
quota_exceededПревышена квота ящиков

Белый список

Список записей
{ "request": "whitelists", "action": "list", "status": "personal", "address": "gmail.com", "to_address": "user@mydomain.ru" }
Добавление записи
{ "request": "whitelists", "action": "add", "address": "partner@company.com", "to_address": "user@mydomain.ru", "status": "personal", "comment": "Надежный партнер" }
Изменение / удаление
{ "request": "whitelists", "action": "save", "byid": "61539", "comment": "Новый комментарий" } {"request":"whitelists","action":"delete","byid":"61539"}
Пример ответа списка
{ "records": 483, "code": "success", "rows": { "1": { "byid": {"key":"byid","val":"61539"}, "status": {"key":"status","val":"personal", "view":"Персональные"}, "address": {"key":"address", "val":"partner@gmail.com"}, "to_address": {"key":"to_address", "val":"eg@mydomain.ru"}, "comment": {"key":"comment", "val":"ООО Партнёр"} } } }
Записи с to_address: "(для всех)" применяются ко всем получателям домена. Добавление целого домена (gmail.com) может значительно снизить уровень фильтрации.

Чёрный список

Список записей
{ "request": "blacklists", "action": "list", "status": "domain", "address": "*.ru" }
Добавление записи
{ "request": "blacklists", "action": "add", "address": "*.spammer.com", "to_address": "(для всех)", "status": "domain", "comment": "Известный спаммер" }
Изменение / удаление
{"request":"blacklists","action":"save", "byid":"192605","comment":"Обновлено"} {"request":"blacklists","action":"delete","byid":"192605"}
ТипПример address
Emailspammer@example.com
Домен*.example.com
IP192.168.1.1
IP-диапазон192.168.1.*
statusОписание
personalПерсональная запись
domainДля всего домена
ipПо IP-адресу

Статистика

Получение статистики
{ "request": "stats", "action": "list", "period": "month", "domain": "example.com" }
Детальная статистика
{ "request": "stats", "action": "view", "byid": "2024-08", "domain": "example.com" }
ПараметрОписание
periodday, week, month, year
domainФильтр по домену
date_fromНачало периода (YYYY-MM-DD)
date_toКонец периода (YYYY-MM-DD)

Коды ошибок

HTTPСтатусОписание
200SuccessЗапрос выполнен успешно
400Bad RequestНеверный синтаксис запроса
401UnauthorizedНеверный или отсутствующий токен
403ForbiddenДоступ запрещён
404Not FoundОбъект не найден
500Internal ErrorВнутренняя ошибка сервера
errorОписание
notfoundЗапись не найдена
access_deniedНет доступа
deniedНет прав на операцию
fieldsОшибки валидации полей
requiredОбязательное поле не заполнено
badhostНеверный формат хоста
invalid_emailНеверный формат email
invalid_domainНеверный формат домена
invalid_addressНеверный формат адреса
invalid_ipНеверный формат IP
already_existsЗапись уже существует
domain_existsДомен уже существует
has_mailboxesДомен содержит ящики
quota_exceededПревышена квота
password_too_weakСлишком слабый пароль
queue_emptyОчередь пуста
database_errorОшибка базы данных

Примеры запросов

GET-запрос с параметрами в URL

cURL
curl -X GET \ 'https://my.spamorez.ru/panelv32/api/?token=YOUR_TOKEN&request=tracker&action=list&mail_from=newsletter@company.com&date=week&status=quarant' \ -H 'Content-Type: application/json'

POST-запрос с JSON-телом

cURL
curl -X POST \ 'https://my.spamorez.ru/panelv32/api/?token=YOUR_TOKEN' \ -H 'Content-Type: application/json' \ -d '{ "request": "tracker", "action": "list", "mail_from": "billing@service.com", "date": "month", "status": "deliv", "subject": "Счет", "perpage": 100, "page": 1 }'

Python

import requests, json TOKEN = "ВАШ_API_ТОКЕН" URL = f"https://my.spamorez.ru/panelv32/api/?token={TOKEN}" def api(payload): r = requests.post(URL, json=payload, headers={"Content-Type": "application/json"}) return r.json() # Список писем в карантине print(api({"request":"tracker","action":"list","status":"quarant","date":"day"})) # Добавить домен print(api({"request":"domain","action":"add", "domain":"example.ru","smtpserver":"mail.example.ru"})) # Работа с очередью queue = api({"request":"queue","action":"list","perpage":100}) if queue.get("records", 0) > 0: api({"request":"queue","action":"sendall"})