Обзор REST API TrekMail для разработчиков
Узнайте, как работает REST API TrekMail: аутентификация с bearer-токенами, доступ по тарифам, лимиты запросов и форматы ответов.
Сведения о статье
Тип, сложность, тарифы и дата последнего обновления.
▼
Сведения о статье
Тип, сложность, тарифы и дата последнего обновления.
- Тип
- Справочная статья
- Сложность
- Средний уровень
- Тарифы
- Nano · Starter · Pro · Agency
- Обновлено
- 23 авг 2026 г.
API TrekMail позволяет управлять доменами, почтовыми ящиками, переадресацией, DNS, переносом почты и операциями веб-почты из HTTP-клиента или с помощью ИИ-агента. Сюда входят чтение и отправка писем, черновики, планирование отправки, папки, контакты, календари, идентификаторы отправителя, шаблоны и заблокированные отправители. Аутентифицированные запросы используют bearer-токен, ответы возвращаются в JSON, а действия API регистрируются в журнале аудита.
Что вы получаете
- REST API v1 с форматом запросов и ответов JSON.
- Аутентификация с bearer-токеном: для аутентифицированных вызовов API не используются cookie или сессии.
- Ключи идемпотентности для операций записи, где они обязательны, чтобы повторные попытки не создавали дубликаты.
- Ограничение частоты запросов для каждого токена с заголовками
Retry-After. - Журнал аудита, доступный в панели управления в разделе ИИ-агенты и API → Журнал аудита.
- Сервер MCP с каталогом, отфильтрованным по учетным данным, транспорту и настройкам безопасности текущего подключения. Поэтому узкое подключение проекта видит только доступные ему инструменты.
- Псевдонимы доменов: связывайте адреса только для приема на дополнительном домене с теми же локальными частями на основном домене, учитывая сохраненное и фактическое состояния доставки и безопасное отключение. См. Псевдонимы доменов через API и MCP.
- Архитектура с двумя токенами: отдельные операционные токены для инфраструктуры и токены сообщений для полного набора почтовых операций, включая чтение, отправку, создание черновиков, планирование, контакты, календари, идентификаторы отправителя, шаблоны и папки.
- Данные об исходящей доставляемости и возвратах: получайте сводку об отправленных, доставленных, окончательно и временно возвращенных письмах из панели управления, а также SMTP-коды и ответы для каждого получателя. См. Доставляемость и возвраты.
- Использование хранилища почтовых ящиков:
list_mailboxesиget_mailboxвозвращаютused_mb,quota_mb,allocation_mbиis_pooled, поэтому агент может обнаружить ящики, приближающиеся к лимиту, без доступа к панели управления. - Администрирование White Label: проверяйте настройку, управляйте брендингом для каждого домена, приглашайте клиентов, контролируйте роли и домены, приостанавливайте или восстанавливайте доступ и просматривайте активность через API или MCP. См. руководство по брендингу и руководство по управлению командой.
API Drive и автоматизация файлов
Drive входит в общедоступную поверхность API. Она охватывает пространство Drive аккаунта и пространства Drive почтовых ящиков, использование хранилища, просмотр папок, загрузку, управление файлами и папками, корзину, массовые действия, публичные ссылки общего доступа, управление паролями устройств синхронизации и доступный только для чтения статус дополнения Drive Storage.
Drive использует одиннадцать областей действия операционного токена: drive:account:read, drive:account:write, drive:account:share, drive:account:purge, drive:mailbox:read, drive:mailbox:write, drive:mailbox:share, drive:mailbox:purge, drive:addon:read, drive:devices:read и drive:devices:write. Операции оплаты для дополнения Drive, включая покупку, изменение размера и отмену, остаются доступными только в панели управления и не предоставляются как операции записи API или MCP.
Начните с обзора API Drive или быстрого старта API Drive.
Архитектура с двумя токенами
API использует два независимых типа токенов. В зависимости от задачи можно использовать один или оба:
| Тип токена | Префикс | Что он открывает |
|---|---|---|
| Операционный токен | tm_live_ |
Инструменты аккаунта и инфраструктуры: White Label, домены, DNS, почтовые ящики, приглашения, Drive, переносы, SMTP, обращения, оплата и Cloudflare |
| Токен сообщений | tm_msg_ |
Операции веб-почты: сообщения, папки, вложения, черновики, запланированная отправка, отметки спама и не спама, массовые действия, контакты, группы контактов, календарь, помощники составления писем, идентификаторы отправителя, шаблоны и заблокированные отправители |
У операционных токенов и токенов сообщений разные области действия и отдельные лимиты запросов. Один агент может одновременно использовать оба токена, если настроить их в окружении сервера MCP.
Токены сообщений доступны на тарифах Pro и Agency.
Перед началом работы
- Все тарифы имеют доступ к API:
- Nano: Email Verifier. Подключите дополнение Drive Storage для полного доступа к API и MCP Drive.
- Starter: полный Drive, полный Email Verifier и доступ только для чтения во всех остальных областях инфраструктуры. Для соответствующих операций записи используйте панель управления.
- Pro / Agency: полный доступ к базовому API, включая токены сообщений. Области действия White Label добавляются, пока действует пробный период или платное дополнение.
- Подключаете ИИ-агента? Добавьте
https://trekmail.net/mcpкак удаленный сервер MCP в любом совместимом клиенте. Если клиент поддерживает авторизацию через браузер, токен вручную не нужен. В статье Подключение ИИ-агентов (MCP) описаны удаленный вариант, CLI/приложение для компьютера, мост и самостоятельный хостинг. - Создаете собственную интеграцию? Создайте токен
tm_live_в разделе ИИ-агенты и API → Токены → Создать токен и передавайте его какAuthorization: Bearer …. См. Создание токенов API и управление ими. - Впервые работаете с API? Нажмите Начать обзор в верхней части страницы ИИ-агенты и API, чтобы пройти краткое знакомство со способами подключения, управлением токенами, подключенными приложениями и журналом аудита.
Как работает аутентификация
Каждый запрос должен содержать ваш токен в заголовке Authorization:
Authorization: Bearer tm_live_abc123...
Операционные токены начинаются с tm_live_, а токены сообщений с tm_msg_. Оба показываются один раз при создании и больше не могут быть отображены.
Если токен отсутствует, отозван или просрочен, API возвращает 401 с кодом ошибки unauthenticated.
Базовый URL и управление версиями
Все конечные точки находятся по адресу:
https://trekmail.net/api/v1
Базовый URL указан в разделе Краткая справка панели ИИ-агенты и API. Версия входит в путь URL. Если когда-либо появится v2, v1 продолжит работать.
Формат ответа
Успешные ответы возвращают JSON с ключом data для одного ресурса или список с постраничной навигацией:
{
"data": [
{ "id": 1, "domain": "example.com", "status": "active" }
],
"links": { "next": "...", "prev": null },
"meta": { "current_page": 1, "last_page": 1, "total": 1 }
}
Ответы с ошибками имеют единообразную структуру:
{
"error": {
"code": "unauthenticated",
"message": "Invalid or expired API token",
"hint": "Check that your token is correct and has not been revoked.",
"request_id": "req_abc123",
"retryable": false
}
}
Идентификаторы запросов
Каждый ответ содержит заголовок X-Request-Id. Также можно передать собственный идентификатор в заголовке запроса X-Request-Id. Он будет возвращен в ответе и записан в журнал аудита.
Лимиты запросов
Для каждого токена действует поминутное ограничение частоты запросов. При достижении лимита API возвращает 429 с заголовком Retry-After, который указывает, когда можно повторить запрос.
Для разрушительных операций (намерений удаления) установлен дополнительный дневной лимит на токен и пауза между последовательными удалениями.
Для операций записи при переносе (запуск, отмена, повторная попытка) действует отдельный лимит в 10 запросов в минуту на токен, а также общий лимит одновременных операций на сервере, который возвращает 503, если во всей системе выполняется слишком много переносов.
Токены сообщений используют отдельные лимиты. По умолчанию разрешено 30 запросов чтения в минуту на токен, 60 запросов отправки в минуту на токен, 5,000 успешных чтений в день на токен и 100 отправок через API в день для одного почтового ящика. Второй счетчик безопасности отправки по умолчанию допускает 500 операций на токен в день; обычно раньше срабатывает меньший лимит почтового ящика. Эти меры безопасности API не заменяют ограничения управляемого SMTP вашего тарифа или собственные ограничения внешнего поставщика.
Идемпотентность
Конечные точки, изменяющие состояние и отмеченные как идемпотентные, требуют заголовок Idempotency-Key. Сюда относятся операции создания, обновления, отправки и удаления, где автоматическая повторная попытка иначе могла бы продублировать работу. Подобные чтению действия POST, например определение поставщика или проверка подключения, не требуют этого заголовка; уточняйте в таблице конечных точек или спецификации OpenAPI. Если отправить тот же ключ с тем же телом, API воспроизведет исходный ответ без создания дубликатов.
Idempotency-Key: create-mailbox-alice-2024
Если отправить тот же ключ с другим телом, API вернет 409 Conflict.
Распределение хранилища почтового ящика
Каждая конечная точка, создающая почтовый ящик или приглашение, POST /api/v1/mailboxes, /api/v1/mailboxes:bulk, /api/v1/mailboxes/invites, /api/v1/mailboxes/invites:bulk, принимает необязательное целое число storage_allocation_mb.
| Значение | Значение параметра |
|---|---|
Не указано (или null) |
Почтовый ящик использует общий пул аккаунта (по умолчанию). |
| Положительное целое число (MB) | Почтовый ящик получает выделенное хранилище. Указанный объем резервируется из пула аккаунта только для этого ящика. |
Распределение проверяется по фактическому свободному пулу с вычетом существующих выделенных почтовых ящиков и ожидающих выделенных приглашений. Массовые конечные точки дополнительно проверяют сумму объемов во всей партии и отклоняют всю партию с ошибкой 422 storage_pool_exceeded, если она приведет к перерасходу. Пул обновляется после удаления выделенного почтового ящика, активации приглашения (объем переходит новому ящику) и истечения срока ожидающего приглашения.
Для приглашений объем записывается в коде доступа и при активации копируется в новый почтовый ящик. Если к моменту активации в пуле уже недостаточно места для запрошенного объема (например, другой администратор тем временем увеличил выделенный объем), новый ящик без ошибки переводится на общий пул вместо отказа, а получатель видит уведомление на странице успешной активации.
Доступ почтового ящика к Drive
У каждого почтового ящика есть уровень drive_access, определяющий доступ пользователя к Drive в веб-почте. Он возвращается в ресурсе почтового ящика и задается через PATCH /api/v1/mailboxes/{id} или для нескольких ящиков сразу через POST /api/v1/mailboxes:drive-access.
| Значение | Значение параметра |
|---|---|
full |
Все возможности: вкладка Drive, загрузка файлов и общий доступ, поиск файлов и синхронизация с компьютером. Значение по умолчанию. |
attachments_only |
В веб-почте нет Drive и синхронизации. Отправка продолжает работать: файл больше порога уходит как ссылка для скачивания, а его копия удаляется после срока хранения. |
disabled |
Drive недоступен, а файл больше порога вообще нельзя прикрепить. |
Хранилище объединено в общий пул аккаунта, поэтому этот параметр определяет, какую часть пула один пользователь может заполнить файлами.
Приостановка входа в почтовый ящик
Вход в почтовый ящик можно приостановить, сохранив прием почты: веб-почта, IMAP, SMTP и пароли устройств перестают работать, а открытые сессии завершаются, но доставка не меняется, поэтому возвратов нет и все письма будут ждать восстановления входа. Установите это через POST /api/v1/mailboxes/{id}:suspend-login (а отмените через :resume-login) или для нескольких ящиков через POST /api/v1/mailboxes:login-access.
Ресурс почтового ящика сообщает об этом полями login_suspended, login_suspended_at и login_suspended_reason. Проверяйте login_suspended, чтобы узнать, может ли пользователь войти, а status, чтобы узнать, работает ли сам ящик: приостановленный ящик сохраняет состояние active, поскольку продолжает принимать почту. :pause действует иначе: устанавливает status в disabled и также останавливает доставку.
См. Приостановка входа в почтовый ящик через API.
Массовая конечная точка принимает ровно один селектор, mailbox_ids, domain_id или all, и возвращает результат своих действий:
{ "data": { "drive_access": "attachments_only", "matched": 24, "updated": 21, "skipped_shared": 3 } }
Используйте domain_id как селектор, когда один домен соответствует одному клиенту. Почтовые ящики, уже имеющие запрошенный уровень, учитываются как matched, но не как updated, поэтому вызов можно безопасно повторять.
Общие почтовые ящики отклоняются одиночной конечной точкой с ошибкой 422 drive_access_not_applicable, а массовая конечная точка пропускает и подсчитывает их: у них нет собственного пользователя веб-почты, участники открывают их со своим уровнем доступа, поэтому значение в строке общего ящика ничего бы не изменило.
Ограничение действует и в API, и в интерфейсе. Пространство Drive ограниченного почтового ящика отсутствует в GET /api/v1/drive/spaces, его файлы возвращают 404 при запросе по идентификатору, а создать для него устройство синхронизации нельзя.
Адреса переадресации
GET /api/v1/domains/{id}/forwarding-addresses возвращает не только список, поскольку два свойства адреса переадресации не видны в самом адресе:
{
"data": [ { "id": 8, "address": "sales@acme.com", "local_part": "sales",
"domain_id": 4, "recipients": ["team@example.net"], "is_active": true } ],
"limits": { "used": 1, "max": 100, "recipients_per_address": 15 },
"delivery": { "active": true, "requires_plan": "pro",
"paused_until": null, "paused_reason": null }
}
limits.maxзадается для домена и зависит от тарифа: 100 на Pro, 300 на Agency и 25 сохраненных, но неактивных адресов на Nano или Starter.delivery.activeпоказывает, пересылают ли эти правила почту прямо сейчас. Значение равноfalseна тарифе нижеrequires_planи остаетсяfalse, пока установленоpaused_until(аккаунт превысил почасовой лимит отправки; см. Лимиты отправки по тарифам). Правило может иметьis_active: trueи все равно не доставлять почту, поэтому перед сообщением о работе переадресации проверяйтеdelivery, а не толькоis_active.
Создание разрешено даже на тарифе, который не поддерживает доставку, и возвращает 201: правило сохраняется и начинает работать после повышения тарифа. Так же работает панель управления, где такие правила отображаются как сохраненные и неактивные.
Отказы возвращаются с кодом 422, а error.code получает значение validation_error или limit_exceeded. Причиной может быть уже занятый в домене адрес, получатель в том же домене (что создало бы цикл), домен получателя без рабочего MX или исчерпанный лимит домена.
Запросы POST и DELETE к этим конечным точкам требуют Idempotency-Key, а PATCH не требует.
История доставки
GET /api/v1/domains/{id}/forwarding-addresses/{addressId}/log возвращает фактический результат обработки недавней почты, начиная с самых новых событий:
{
"data": [
{ "id": 91, "occurred_at": "2026-07-27T09:12:04+00:00", "outcome": "delivered",
"from": "rfq@northgatesupply.com", "to": "sales@example.net",
"smtp_code": "2.0.0", "smtp_response": "250 2.0.0 OK" }
],
"address": "sales@acme.com",
"window": { "retention_days": 30, "max_events": 200 }
}
Значение outcome может быть delivered, deferred (временная ошибка, попытки продолжаются), failed (сервер получателя отклонил письмо) или blocked. Последнее означает, что наш спам-фильтр остановил сообщение до переадресации, поэтому оно вообще не дошло до получателя. Если считать blocked возвратом, кто-то будет искать на принимающем сервере проблему, возникшую на нашей стороне.
limit (от 1 до 200, по умолчанию 100) является единственным параметром. Окно соответствует сроку хранения тарифа: 30 дней на Agency и 7 дней на остальных тарифах. Более старых данных нет, поскольку события переадресации удаляются.
Общие почтовые ящики команды
Общий почтовый ящик представляет собой командный входящий ящик, например support@ или sales@, который участники открывают через свои обычные аккаунты почтовых ящиков в Webmail, а при включенном нативном доступе также как делегированную папку IMAP. У него нет общего пароля или отдельного входа. Доступ одинаков для всех: каждый участник может читать, а единый флаг can_send определяет, может ли он отвечать от имени адреса (true) или имеет доступ только для чтения (false). Ролей участников нет.
GET /api/v1/mailboxes и GET /api/v1/mailboxes/{id} теперь возвращают mailbox_type ("user" или "shared") и логическое поле is_shared; общие почтовые ящики также содержат shared_member_count. Используйте эти поля, чтобы отличить командный входящий ящик от обычного перед вызовом конечных точек участников.
| Конечная точка | Метод | Требуемая область | Что она делает |
|---|---|---|---|
/api/v1/mailboxes/{id}/members |
GET | mailboxes:read |
Перечисляет участников общего почтового ящика (для каждого: member_mailbox_id, email, can_read, can_send) |
/api/v1/mailboxes/{id}/members |
POST | mailboxes:write |
Добавляет участника, тело {member_mailbox_id, can_send?} (по умолчанию can_send равно true) |
/api/v1/mailboxes/{id}/members/{member} |
PATCH | mailboxes:write |
Переключает право участника отвечать, тело {can_send} |
/api/v1/mailboxes/{id}/members/{member} |
DELETE | mailboxes:write |
Удаляет участника (в общем почтовом ящике всегда остается хотя бы один) |
/api/v1/shared-mailboxes |
POST | mailboxes:create |
Создает общий почтовый ящик, тело {domain_id, local_part, display_name, member_mailbox_ids[], storage_shared?, storage_mb?} |
/api/v1/mailboxes/{id}/convert-to-shared |
POST | mailboxes:write |
Преобразует существующий почтовый ящик в общий, тело {member_mailbox_ids[]} (меняет старый пароль, чтобы с ним больше нельзя было войти; возвращает 202 conversion_pending с автоматической повторной попыткой, если синхронизация серверной части еще не подтверждена) |
/api/v1/mailboxes/{id}/convert-to-regular |
POST | mailboxes:write |
Преобразует общий почтовый ящик обратно в обычный, тело {password} (удаляет участников и устанавливает новый пароль для входа) |
Конечные точки участников используют существующие области mailboxes:read / mailboxes:write. Отдельной области для общих почтовых ящиков нет.
Чтобы узнать о нативном доступе из почтового приложения, вызовите GET /api/v1/mailboxes/{member_mailbox_id}/client-setup для обычного почтового ящика участника. Объект shared_mailboxes сообщает устойчивую готовность нативного доступа, фактическую готовность Send As и ее причину, точные пути Inbox/Sent/Archive/Junk и разрешенные операции. can_send означает назначенное разрешение Может отвечать, но не доказывает, что SMTP сейчас готов. Конечная точка никогда не возвращает пароль. Вызов с идентификатором общего почтового ящика возвращает 422 direct_login_unavailable, потому что общий адрес не может проходить аутентификацию напрямую.
Удаление участника, изменение can_send или преобразование общего почтового ящика в обычный синхронизирует разрешения почтового сервера, когда включен нативный доступ. Ответ 503 native_access_sync_failed можно повторить; он гарантирует, что членство, разрешение или тип почтового ящика остались неизменными, а операция не была применена частично.
Доступные конечные точки
Для Drive существует отдельный справочник, который здесь не повторяется, см. Обзор API Drive. Конечные точки SMTP на уровне аккаунта, сохраненные для обратной совместимости, описаны в разделе Маршрутизация SMTP для домена, а не перечислены как актуальные.
| Конечная точка | Метод | Требуемая область |
|---|---|---|
/api/v1/domains |
GET | domains:read |
/api/v1/domains/{id} |
GET | domains:read |
/api/v1/domains/{id}/matching-addresses |
GET | domains:read |
/api/v1/domains/{id}/matching-addresses |
PUT | domains:write |
/api/v1/domains/{id}/matching-addresses |
DELETE | domains:write |
/api/v1/domains/{id}/dns-requirements |
GET | domains:dns:read |
/api/v1/domains/{id}/dns-recheck |
POST | domains:dns:recheck |
/api/v1/domains/{id}/spam-metrics |
GET | domains:read |
/api/v1/domains/{id}/spam-metrics/summary |
GET | domains:read |
/api/v1/domains/{id}/deliverability |
GET | domains:read |
/api/v1/domains/{id}/bounces |
GET | domains:read |
/api/v1/domains/{id}/signature |
GET | domains:read |
/api/v1/domains/{id}/forwarding-addresses |
GET | domains:read |
/api/v1/domains/{id}/forwarding-addresses/{addressId}/log |
GET | domains:read |
/api/v1/dns-checks/{id} |
GET | domains:dns:read |
/api/v1/mailboxes |
GET | mailboxes:read |
/api/v1/mailboxes |
POST | mailboxes:create |
/api/v1/mailboxes/{id} |
PATCH | mailboxes:write |
/api/v1/mailboxes/invites |
POST | mailboxes:invites:create |
/api/v1/mailboxes/invites:bulk |
POST | mailboxes:invites:create |
/api/v1/mailboxes:bulk |
POST | mailboxes:create |
/api/v1/mailboxes/{id}/forwarding |
GET | mailboxes:forwarding:read |
/api/v1/mailboxes/{id}/forwarding |
PUT | mailboxes:forwarding:write |
/api/v1/mailboxes/{id}/rules |
GET | mailboxes:rules:read |
/api/v1/mailboxes/{id}/rules |
POST | mailboxes:rules:write |
/api/v1/mailboxes/{id}/rules/{ruleId} |
GET | mailboxes:rules:read |
/api/v1/mailboxes/{id}/rules/{ruleId} |
PUT | mailboxes:rules:write |
/api/v1/mailboxes/{id}/rules/{ruleId} |
DELETE | mailboxes:rules:write |
/api/v1/mailboxes/{id}/rules/reorder |
PATCH | mailboxes:rules:write |
/api/v1/mailboxes/{id}/auto-reply |
GET | mailboxes:auto-reply:read |
/api/v1/mailboxes/{id}/auto-reply |
PUT | mailboxes:auto-reply:write |
/api/v1/mailboxes/{id}/sieve |
GET | mailboxes:rules:read |
/api/v1/mailboxes/{id}/sieve |
PUT | mailboxes:rules:write |
/api/v1/mailboxes/{id}:delete-intent |
POST | mailboxes:delete |
/api/v1/delete-intents/{id}:confirm |
POST | mailboxes:delete |
/api/v1/me |
GET | (любой действительный операционный токен) |
/api/v1/mailboxes/{id}/message-tokens |
POST | mailboxes:message-tokens:manage |
/api/v1/mailboxes/{id}/message-tokens |
GET | mailboxes:message-tokens:manage |
/api/v1/message-tokens/{id} |
DELETE | mailboxes:message-tokens:manage |
/api/v1/messages |
GET | messages:read (токен сообщений) |
/api/v1/messages/{uid} |
GET | messages:read (токен сообщений) |
/api/v1/messages/{uid} |
PATCH | messages:write (токен сообщений) |
/api/v1/messages/send |
POST | messages:send (токен сообщений) |
/api/v1/messages/_ping |
GET | messages:read (токен сообщений, диагностика) |
/api/v1/messages/{uid}/attachments/{index} |
GET | messages:read (токен сообщений) |
/api/v1/messages/{uid}/attachments |
GET | messages:read (токен сообщений) |
/api/v1/messages/{uid}/raw |
GET | messages:read (токен сообщений; возвращает raw_base64, encoding, content_type, size_bytes) |
/api/v1/messages/folders |
POST | messages:write (токен сообщений) |
/api/v1/messages/folders/{path} |
PATCH | messages:write (токен сообщений) |
/api/v1/messages/folders/{path} |
DELETE | messages:write (токен сообщений) |
/api/v1/messages/{uid}:spam |
POST | messages:write (токен сообщений) |
/api/v1/messages/{uid}:ham |
POST | messages:write (токен сообщений) |
/api/v1/messages/bulk |
POST | messages:write (токен сообщений) |
/api/v1/messages/folders:empty |
POST | messages:write (токен сообщений) |
/api/v1/messages/drafts |
POST | messages:write (токен сообщений); возвращает uid + uidvalidity |
/api/v1/messages/drafts/{uid} |
PUT | messages:write (токен сообщений); требует uidvalidity черновика |
/api/v1/messages/scheduled |
POST | messages:send (токен сообщений) |
/api/v1/messages/scheduled |
GET | messages:read (токен сообщений) |
/api/v1/messages/scheduled/{id} |
PATCH | messages:send (токен сообщений) |
/api/v1/messages/scheduled/{id} |
DELETE | messages:send (токен сообщений) |
/api/v1/messages/contacts |
GET | messages:read (токен сообщений) |
/api/v1/messages/contacts |
POST | messages:write (токен сообщений) |
/api/v1/messages/contacts/{id} |
PATCH | messages:write (токен сообщений) |
/api/v1/messages/contacts/{id} |
DELETE | messages:write (токен сообщений) |
/api/v1/messages/contacts/import |
POST | messages:write (токен сообщений) |
/api/v1/messages/contacts/export |
GET | messages:read (токен сообщений) |
/api/v1/messages/contact-groups |
GET | messages:read (токен сообщений) |
/api/v1/messages/contact-groups/{id}/members |
GET | messages:read (токен сообщений) |
/api/v1/messages/external-accounts |
GET | messages:read (токен сообщений) |
/api/v1/messages/external-accounts |
POST | messages:write (токен сообщений) |
/api/v1/messages/external-accounts/{id} |
PATCH | messages:write (токен сообщений) |
/api/v1/messages/external-accounts/{id} |
DELETE | messages:write (токен сообщений) |
/api/v1/messages/external-accounts/detect |
POST | messages:read (токен сообщений) |
/api/v1/messages/external-accounts/test |
POST | messages:write (токен сообщений) |
/api/v1/messages/external-accounts/{id}/test |
POST | messages:write (токен сообщений) |
/api/v1/messages/_me |
GET | любой токен сообщений (самопроверка) |
/api/v1/messages/calendar/events |
GET | messages:read (токен сообщений) |
/api/v1/messages/calendar/events |
POST | messages:write (токен сообщений) |
/api/v1/messages/calendar/events/{id} |
PATCH | messages:write (токен сообщений) |
/api/v1/messages/calendar/events/{id} |
DELETE | messages:write (токен сообщений) |
/api/v1/messages/{uid}/reply |
GET | messages:read (токен сообщений) |
/api/v1/messages/{uid}/reply-all |
GET | messages:read (токен сообщений) |
/api/v1/messages/{uid}/forward |
GET | messages:read (токен сообщений) |
/api/v1/messages/contact-groups |
POST | messages:write (токен сообщений) |
/api/v1/messages/contact-groups/{id} |
PATCH | messages:write (токен сообщений) |
/api/v1/messages/contact-groups/{id} |
DELETE | messages:write (токен сообщений) |
/api/v1/messages/contact-groups/{id}/members |
POST | messages:write (токен сообщений) |
/api/v1/messages/contact-groups/{id}/members |
DELETE | messages:write (токен сообщений) |
/api/v1/messages/identities |
GET | messages:read (токен сообщений) |
/api/v1/messages/identities |
POST | messages:write (токен сообщений) |
/api/v1/messages/identities/reply-policy |
PATCH | messages:write (токен сообщений) |
/api/v1/messages/identities/{id} |
PATCH | messages:write (токен сообщений) |
/api/v1/messages/identities/{id} |
DELETE | messages:write (токен сообщений) |
/api/v1/messages/templates |
GET | messages:read (токен сообщений) |
/api/v1/messages/templates |
POST | messages:write (токен сообщений) |
/api/v1/messages/templates/{id} |
PATCH | messages:write (токен сообщений) |
/api/v1/messages/templates/{id} |
DELETE | messages:write (токен сообщений) |
/api/v1/messages/blocked-senders |
GET | messages:read (токен сообщений) |
/api/v1/messages/blocked-senders |
POST | messages:write (токен сообщений) |
/api/v1/messages/blocked-senders/{id} |
DELETE | messages:write (токен сообщений) |
/api/v1/mailboxes/{id}/enable-imap |
POST | mailboxes:write (операционный токен) |
/api/v1/migrations/test-connection |
POST | migrations:write |
/api/v1/migrations |
GET | migrations:read |
/api/v1/migrations/{id} |
GET | migrations:read |
/api/v1/migrations |
POST | migrations:write |
/api/v1/migrations/{id}:cancel |
POST | migrations:write |
/api/v1/migrations/{id}:retry |
POST | migrations:write |
/api/v1/migrations/{id} |
DELETE | migrations:write |
/api/v1/migrations/bulk/preview |
POST | migrations:write |
/api/v1/migrations/bulk |
POST | migrations:write |
/api/v1/migrations/bulk |
GET | migrations:read |
/api/v1/migrations/bulk/{batch} |
GET | migrations:read |
/api/v1/migrations/bulk/{batch}:cancel |
POST | migrations:write |
/api/v1/migrations/bulk/{batch}:retry |
POST | migrations:write |
/api/v1/migrations/bulk/{batch}:resume |
POST | migrations:write |
/api/v1/migrations/bulk/{batch} |
DELETE | migrations:write |
/api/v1/migrations/bulk/{batch}/jobs/{job}/password |
PATCH | migrations:write |
/api/v1/account |
GET | account:read |
/api/v1/billing/status |
GET | billing:read |
/api/v1/billing/invoices |
GET | billing:read |
/api/v1/domains |
POST | domains:create |
/api/v1/domains/{id} |
DELETE | domains:delete |
/api/v1/domains/{id}/catch-all |
PATCH | domains:write |
/api/v1/domains/{id}/mail-hosting |
PATCH | domains:write |
/api/v1/domains/{id}/forwarding-addresses |
POST | domains:write |
/api/v1/domains/{id}/forwarding-addresses/{addressId} |
PATCH | domains:write |
/api/v1/domains/{id}/forwarding-addresses/{addressId} |
DELETE | domains:write |
/api/v1/domains/{id}/dkim:retry |
POST | domains:write |
/api/v1/domains/{id}/note |
PATCH | domains:write |
/api/v1/domains/{id}/signature |
PATCH | domains:write |
/api/v1/domains/{id}/branding |
GET | domains:read |
/api/v1/domains/{id}/branding |
PATCH | domains:write |
/api/v1/domains/{id}/branding/logo/{slot} |
PUT | domains:write |
/api/v1/domains/{id}/branding/logo/{slot} |
DELETE | domains:write |
/api/v1/domains/{id}/branding/verify-dns |
POST | domains:write |
/api/v1/domains/{id}/branding/preview |
POST | domains:write |
/api/v1/domains/{id}/branding |
DELETE | domains:write |
/api/v1/domains:bulk-add |
POST | domains:create |
/api/v1/mailboxes/{id} |
GET | mailboxes:read |
/api/v1/mailboxes/{id}/client-setup |
GET | mailboxes:read |
/api/v1/mailboxes/{id}/apple-mail-profile |
GET | mailboxes:read |
/api/v1/mailboxes/{id}/bounces |
GET | mailboxes:read |
/api/v1/mailboxes/{id}/password |
POST | mailboxes:write |
/api/v1/mailboxes/{id}/note |
PATCH | mailboxes:write |
/api/v1/mailboxes/{id}:pause |
POST | mailboxes:write |
/api/v1/mailboxes/{id}:restore |
POST | mailboxes:delete |
/api/v1/mailboxes/{id}:resume |
POST | mailboxes:write |
/api/v1/mailboxes/{id}:suspend-login |
POST | mailboxes:write |
/api/v1/mailboxes/{id}:resume-login |
POST | mailboxes:write |
/api/v1/mailboxes:login-access |
POST | mailboxes:write |
/api/v1/mailboxes:drive-access |
POST | mailboxes:write |
/api/v1/mailboxes/{id}/members |
GET | mailboxes:read |
/api/v1/mailboxes/{id}/members |
POST | mailboxes:write |
/api/v1/mailboxes/{id}/members/{member} |
PATCH | mailboxes:write |
/api/v1/mailboxes/{id}/members/{member} |
DELETE | mailboxes:write |
/api/v1/shared-mailboxes |
POST | mailboxes:create |
/api/v1/mailboxes/{id}/convert-to-shared |
POST | mailboxes:write |
/api/v1/mailboxes/{id}/convert-to-regular |
POST | mailboxes:write |
/api/v1/tickets |
GET | tickets:read |
/api/v1/tickets/{id} |
GET | tickets:read |
/api/v1/tickets/{id}/messages |
GET | tickets:read |
/api/v1/tickets |
POST | tickets:write |
/api/v1/tickets/{id}:mark-seen |
POST | tickets:write |
/api/v1/tickets/{id}/reply |
POST | tickets:write |
/api/v1/tickets/{id}:close |
POST | tickets:write |
/api/v1/domains/{id}/smtp |
GET | smtp:read |
/api/v1/domains/{id}/smtp |
PUT | smtp:write |
/api/v1/domains/{id}/smtp/profiles |
GET | smtp:read |
/api/v1/domains/{id}/smtp/profiles |
POST | smtp:write |
/api/v1/domains/{id}/smtp/profiles/{connectionId} |
PUT | smtp:write |
/api/v1/domains/{id}/smtp/profiles/{connectionId} |
DELETE | smtp:write |
/api/v1/domains/{id}/smtp:test |
POST | smtp:write |
/api/v1/domains/{id}/smtp:test-status/{jobId} |
GET | smtp:read |
/api/v1/smtp/default |
GET | smtp:read |
/api/v1/smtp/default |
PUT | smtp:write |
/api/v1/smtp (устаревшая, для обратной совместимости) |
GET | smtp:read |
/api/v1/smtp (устаревшая, для обратной совместимости) |
PUT | smtp:write |
/api/v1/smtp/{id} (устаревшая, для обратной совместимости) |
DELETE | smtp:write |
/api/v1/smtp:test (устаревшая, для обратной совместимости) |
POST | smtp:write |
/api/v1/smtp:test-status/{jobId} (устаревшая, для обратной совместимости) |
GET | smtp:read |
/api/v1/messages/{uid} |
DELETE | messages:write (токен сообщений) |
/api/v1/messages/{uid}:move |
POST | messages:write (токен сообщений) |
/api/v1/messages/folders |
GET | messages:read (токен сообщений) |
/api/v1/mailboxes/{id}/aliases |
GET | mailboxes:read |
/api/v1/mailboxes/{id}/aliases |
POST | mailboxes:write |
/api/v1/mailboxes/{id}/aliases/{aliasId} |
PATCH | mailboxes:write |
/api/v1/mailboxes/{id}/aliases/{aliasId} |
DELETE | mailboxes:write |
/api/v1/verify |
POST | verify:write |
/api/v1/verify/bulk |
POST | verify:write |
/api/v1/verify/bulk/{jobId} |
GET | verify:read |
/api/v1/verify/bulk/{jobId}/download |
GET | verify:read |
/api/v1/verify/credits |
GET | verify:read |
/api/v1/verify/bulk |
GET | verify:read |
/api/v1/verify/bulk/{jobId}/cancel |
POST | verify:write |
/api/v1/verify/bulk/{jobId} |
DELETE | verify:write |
/api/v1/cloudflare/validate-token |
POST | cloudflare:read |
/api/v1/cloudflare/zones |
POST | cloudflare:read |
/api/v1/cloudflare/connect |
POST | cloudflare:write |
/api/v1/cloudflare/preview |
POST | cloudflare:read |
/api/v1/cloudflare/apply |
POST | cloudflare:write |
/api/v1/cloudflare/tokens |
GET | cloudflare:read |
/api/v1/cloudflare/tokens/{id} |
DELETE | cloudflare:delete |
Конечные точки Cloudflare повторяют процесс из панели управления: проверка токена, перечисление зон, подключение доменов, предварительный просмотр изменений DNS и их применение. И /cloudflare/preview, и /cloudflare/apply принимают два необязательных параметра для каждого домена:
included_records: список разрешенных к изменению записей с ключами по идентификатору домена:{ "123": ["mx_primary", "spf_record"] }. Пропущенные записи не затрагиваются, поэтому можно применить только MX и SPF, а к DKIM вернуться позже. Не указывайте поле, чтобы применить все записи.confirmed_conflicts: когда предварительный просмотр отмечает существующую запись с другим значением, укажите здесь ее идентификатор (в той же форме{ domain_id: [record_ids] }), чтобы разрешить замену.
Идентификаторы записей (mx_primary, spf_record, dkim_primary, dmarc_main, …) поступают непосредственно из ответа предварительного просмотра, поэтому обычный агент сначала вызывает предварительный просмотр и передает выбранные идентификаторы обратно в операцию применения:
POST /api/v1/cloudflare/apply
{
"domain_ids": [123],
"included_records": { "123": ["mx_primary", "spf_record"] },
"confirmed_conflicts": { "123": ["dmarc_main"] }
}
Маршрутизация SMTP для домена и настройка аккаунта по умолчанию
SMTP настраивается для каждого домена. Каждый домен выбирает один из трех маршрутов: управляемую отправку платформы, сохраненный профиль SMTP (ваш собственный поставщик, многократно используемый для разных доменов) или вариант «не настроено». Единая настройка аккаунта по умолчанию определяет начальный маршрут новых доменов.
Конечные точки домена (smtp:read / smtp:write):
| Конечная точка | Метод | Что она делает |
|---|---|---|
/api/v1/domains/{id}/smtp |
GET | Текущий маршрут: smtp_mode, effective_smtp_mode, profile, effective_profile |
/api/v1/domains/{id}/smtp |
PUT | Устанавливает маршрут, тело {smtp_mode: platform|profile|not_configured|inherit, smtp_connection_id?, set_account_default?, apply_to_all?} |
/api/v1/domains/{id}/smtp/profiles |
GET | Перечисляет сохраненные профили SMTP аккаунта |
/api/v1/domains/{id}/smtp/profiles/{connectionId}/usage |
GET | Перечисляет конкретные домены и адреса Send As, использующие профиль (без учетных данных) |
/api/v1/domains/{id}/smtp/profiles |
POST | Создает профиль и использует его для этого домена |
/api/v1/domains/{id}/smtp/profiles/{connectionId} |
PUT | Обновляет профиль (влияет на каждый использующий его домен) |
/api/v1/domains/{id}/smtp/profiles/{connectionId} |
DELETE | Удаляет профиль (использующие его домены переводятся на настройку аккаунта по умолчанию) |
/api/v1/domains/{id}/smtp:test |
POST | Проверяет маршрут, возвращает {job_id, poll_url} |
/api/v1/domains/{id}/smtp:test-status/{jobId} |
GET | Проверяет состояние тестовой задачи |
Несколько замечаний о теле маршрута:
smtp_mode=platformвыбирает управляемую отправку;smtp_mode=profileтребуетsmtp_connection_id;not_configuredочищает маршрут.smtp_mode=inheritзаставляет домен в реальном времени следовать настройке аккаунта по умолчанию: при каждом ее изменении этот домен меняется вместе с ней. Веб-интерфейс всегда записывает конкретные маршруты, но серверная часть по-прежнему поддерживаетinherit, поэтомуGETвозвращаетeffective_smtp_mode, показывающий текущее фактическое значениеinherit.set_account_default: trueявляется эквивалентом переключателя Сделать настройкой аккаунта по умолчанию в панели управления (новые домены начинают с этого маршрута).apply_to_all: trueсоответствует кнопке Применить ко всем доменам (однократно переводит каждый домен на этот маршрут).
Конечные точки настройки аккаунта по умолчанию (smtp:read / smtp:write):
| Конечная точка | Метод | Что она делает |
|---|---|---|
/api/v1/smtp/default |
GET | Возвращает default_smtp_mode (null, пока значение не задано), effective_default_smtp_mode (базовый вариант тарифа, используемый при отсутствии настройки), default_smtp_connection_id и profile |
/api/v1/smtp/default |
PUT | Устанавливает настройку по умолчанию, тело {smtp_mode: platform|profile|not_configured, smtp_connection_id?, apply_to_all?} |
Удаление профиля, который был настройкой аккаунта по умолчанию, сбрасывает ее на базовый вариант тарифа.
Устаревшие конечные точки. Операции GET/PUT /api/v1/smtp на уровне аккаунта (а также DELETE /api/v1/smtp/{id}, POST /api/v1/smtp:test, GET /api/v1/smtp:test-status/{jobId}) сохраняются для обратной совместимости, но больше не управляют маршрутизацией для доменов: используйте конечные точки домена и /smtp/default, описанные выше. Устаревшие инструменты MCP get_smtp_config / update_smtp_config не рекомендуются по той же причине.
Брендинг White Label, клиенты и доступ команды
Брендинг настраивается для каждого домена с областями branding:read / branding:write. Домен использует собственный бренд (mode=custom), наследует настройку аккаунта по умолчанию (mode=inherit) или отключает брендинг. Требуется активный пробный период White Label или платное дополнение. После отмены владелец сохраняет доступ только для чтения и восстановления в течение показанного льготного периода. Прочитайте dns_records домена и опубликуйте именно возвращенные записи. Не выводите имена хостов или целевые значения CNAME из примера.
| Конечная точка | Метод | Что она делает |
|---|---|---|
/api/v1/domains/{id}/branding |
GET | Читает брендинг: mode, white_label_addon_active, brand, hosts, записи dns_records, которые нужно создать, cname_target и mail_zone |
/api/v1/domains/{id}/branding |
PATCH | Частичное обновление со слиянием: mode, name, primary_color/accent_color, dashboard_enabled/dashboard_label, webmail_enabled/webmail_label, mail_zone_enabled, support_email, support_url, sender_email, scope |
/api/v1/domains/{id}/branding/logo/{slot} |
PUT | Загружает логотип в base64 (slot = light|dark|favicon; PNG/JPG, ICO для favicon, ≤1 MB, без SVG). Значение scope=domain по умолчанию требует режима custom; явно заданное scope=account_default для домена inherit требует токена без ограничений. |
/api/v1/domains/{id}/branding/logo/{slot} |
DELETE | Удаляет ячейку логотипа. Использует те же правила области домена или настройки аккаунта по умолчанию; DELETE принимает scope как параметр запроса. |
/api/v1/domains/{id}/branding/verify-dns |
POST | Ставит проверку DNS для брендированных хостов и почтовой зоны бренда в очередь |
/api/v1/domains/{id}/branding/preview |
POST | Создает краткосрочный URL для предварительного просмотра (422 no_brand, если брендинг не настроен) |
/api/v1/domains/{id}/branding?scope=domain|all |
DELETE | Очищает брендинг этого домена или всего аккаунта |
PATCH выполняет частичное слияние, поэтому пропущенные поля сохраняются. Если брендинг сейчас отключен, передайте mode, чтобы включить его снова. Пользовательский sender_email должен принадлежать домену с подтвержденным ключом DKIM. mail_zone_enabled обслуживает почтовые приложения и синхронизацию DAV на собственном домене бренда. Параметр относится к бренду, а не к отдельному домену, поэтому требует mode=custom или scope=account_default; домен inherit возвращает 422 inherited_brand. Для отслеживания подготовки читайте mail_zone.dns_status, mail_zone.client_hosts_status, mail_zone.records, mail_zone.dav_url и mail_zone.dav_ready и используйте только готовый адрес DAV. Полный процесс для агента описан в руководстве по API и MCP для брендинга White Label.
Поверхность White Label на уровне аккаунта добавляет 13 маршрутов в /api/v1/white-label: состояние и прогресс настройки, актуальный каталог доступа, список участников и действия жизненного цикла, активность аккаунта и историю действий и входов каждого участника. Она использует members:read, members:write и activity:read. Доступ всегда представляет собой пересечение прав аккаунта, текущего членства пользователя, разрешений учетных данных и ограничений домена. Таблица маршрутов и переходы состояний приведены в статье Управление командами White Label с помощью API и MCP.
Спецификация OpenAPI доступна по адресу /api/openapi.json для импорта в Postman, Insomnia или генераторы кода.
Быстрые решения
- 401 "unauthenticated": Проверьте наличие заголовка
Authorization: Bearer <token>и убедитесь, что токен не отозван и не просрочен. - 403 "plan_api_disabled": Запрошенная область недоступна на вашем тарифе. Nano включает Email Verifier (и Drive, если приобретено дополнение Drive Storage). Для остальной части API перейдите на Starter или более высокий тариф.
- 403 "token_scope_blocked_by_plan": У токена есть области, недоступные на текущем тарифе. Отзовите токен и создайте новый с разрешенными областями.
- 403 "scope_blocked_by_entitlement": Сохраненное разрешение White Label недоступно, поскольку дополнение неактивно или в льготный период выполняется операция записи. Повторно активируйте White Label, затем заново выдайте или авторизуйте учетные данные.
- 403 "scope_blocked_by_membership": Текущая роль участника уже, чем запрошенное действие. Попросите владельца изменить ее; одной повторной авторизацией расширить членство нельзя.
- 422 "missing_idempotency_key": Добавьте заголовок
Idempotency-Keyк операции записи, указанной в справочнике конечных точек. - 403 "mailbox_sending_paused": Отправка из этого почтового ящика остановлена, потому что исходящая почта перестала быть похожа на письма владельца, обычно из-за попадания пароля в чужие руки. Чтение, перечисление и все остальные конечные точки продолжают работать; отклоняется только отправка, и повторные попытки не снимут блокировку. Нужно изменить пароль почтового ящика, после чего поддержка снова включает отправку. См. Почему я не могу отправлять письма?.
- Ограничение частоты 429: Перед повторной попыткой подождите время, указанное в заголовке
Retry-After.
Отправка писем: тело, заголовки и доставляемость
POST /api/v1/messages/send принимает запрос вида {to, subject, body: {text, html}, attachments, reply_to_message_id, headers}.
body.textиbody.htmlнеобязательны, но нужно указать хотя бы одно из них. Если передан толькоbody.text, мы автоматически создаем альтернативу HTML с абзацами<p>(пустые строки разделяют абзацы, одиночные переводы строк становятся<br>), чтобы письмо отображалось как обычное во всех современных клиентах. Если нужен моноширинный текст, передайте буквальный<pre>...</pre>вbody.html.headersявляется необязательным объектом пользовательских заголовков исходящей почты. Список разрешенных значений включаетList-Unsubscribe,List-Unsubscribe-Post,Reply-Toи любой пользовательский заголовок отслеживанияX-*. Остальные имена (From,Subject,Message-Id,Authentication-Resultsи другие) управляются платформой и отклоняются с кодом422. Значения с CR/LF также отклоняются для защиты от внедрения заголовков. Длина каждого значения ограничена 998 символами согласно RFC 2822.- Для массовой отправки и автоматизации см. раздел Заголовки доставляемости для массовых отправителей, где описана настройка
List-Unsubscribeи общий для аккаунта переключательauto_list_unsubscribe.
Связанные статьи
Похожие статьи
Перейдите к близким руководствам, которые продолжают рабочий процесс.