Документация

MAILCORE · MANAGEMENT API

API управления аккаунтом

Управляйте организациями, доменами, почтой и проектами Email API через ограниченный ключ — из своей интеграции или ИИ-агента.

Management API v1 · 24.10.2026OpenAPIPostman

Быстрый старт

Создайте токен в кабинете: Настройки аккаунта → API-токены. Выберите готовый набор прав, нужные ресурсы и срок действия. Секрет показывается один раз. Сохраните его в хранилище секретов вашей интеграции.

Bearer · cURL
# MAILCORE_MANAGEMENT_TOKEN is supplied by your secret store.
curl --fail-with-body https://mailcore.uz/api/management/v1/token/verify \
  --header "Authorization: Bearer $MAILCORE_MANAGEMENT_TOKEN" \
  --header 'Accept: application/json'

curl --fail-with-body https://mailcore.uz/api/management/v1 \
  --header "Authorization: Bearer $MAILCORE_MANAGEMENT_TOKEN"

Ключ управления начинается с mcm_. Ключи отправки mck_ работают с отдельным Email API. Чтобы отправлять письма, создайте ключ отправки для нужного проекта и потока с правом email_keys.write.

Для ИИ-агента укажите ссылку на OpenAPI и имя переменной окружения MAILCORE_MANAGEMENT_TOKEN. Агент сначала проверяет токен и доступные ресурсы, затем выполняет согласованные с вами изменения. Сам ключ в текст задания вставлять не нужно.

Доступ и ресурсы

  • Аккаунт: все организации и ресурсы, к которым у создателя токена есть действующий доступ.
  • Организации: только выбранные организации и разрешённые действия внутри них.
  • Домены: только выбранные домены, их почта и связанные проекты Email API.
  • Проекты: только выбранные проекты Email API с публичными ID eaw_….

Права ключа всегда ограничены текущими правами его создателя. Удаление из организации, понижение роли, отзыв или истечение токена прекращают соответствующий доступ. Доступ к оплате, команде, ключам отправки и вебхукам задаётся отдельно. Ключ домена или проекта не даёт доступ к финансам всей организации.

Права на действия

Чтение позволяет получать ресурсы и списки. Изменение включает чтение и доступные операции создания и обновления. Для каждой команды справочник указывает отдельное обязательное право; наличие доступа к домену само по себе не даёт доступ к почтовым ящикам или ключам отправки.

Permission groups
account · organizations · team · domains · mailboxes · aliases
email_projects · email_activity · email_keys · webhooks · billing · audit

<group>.read / <group>.write

Журнал действий доступен только для чтения: audit.read. Изменять или удалять его через ключ нельзя.

Подключение домена и почты

  • Создайте или выберите организацию и добавьте домен. Ответ содержит идентификаторы домена и подключения.
  • Получите подключение по явным ID организации, домена и заказа. Добавьте выданную TXT-запись у своего DNS-провайдера и запустите проверку владения.
  • Выберите тариф и параметры хранения, получите ссылку на оплату и проверьте статус платежа. Для финансовых действий нужно billing.write.
  • Запустите создание почты. Проверяйте состояние операции и подключения, затем добавьте требуемые MX/SPF/DKIM/DMARC-записи и запустите финальную проверку.

API возвращает необходимые DNS-записи и проверяет их. Сами записи меняются у DNS-провайдера. Авторизация банковской карты и банковский код подтверждения выполняются на защищённой странице оплаты; API возвращает требуемое действие и ссылку.

Проекты Email API

Создайте проект на подтверждённом домене организации. Маркетинговый поток включается отдельно. Настройте DNS, запустите проверку, создайте ключ отправки и вебхук. История писем, пакетных отправок и очередь доступны с правом email_activity.read отдельно для потоков transactional и marketing.

Пакеты, их стоимость и остаток отправок: GET /organizations/{organization_id}/email-api/billing с правом billing.read. Этот метод возвращает только финансовые сведения. Покупка пакета требует billing.write.

Повторные запросы и фоновые задачи

Каждый POST требует Idempotency-Key. Для новой намеренной операции используйте новое значение; при сетевом сбое повторяйте тот же запрос с прежним значением. Другие данные с тем же ключом вызывают конфликт. Перед повтором создания секрета проверьте результат: потерянный секрет нельзя запросить повторно.

Изменения почты и ресурсов выполняются через ограниченную очередь. Успех HTTP-запроса может означать постановку задачи, а не её завершение. Проверяйте возвращённый статус операции. Перед исполнением ещё не начатой задачи сервер повторно проверяет токен и права создателя; отзыв токена не отменяет уже завершённое изменение.

Соблюдайте Retry-After, повторяйте временные ошибки с увеличивающейся задержкой и не запускайте частый опрос из нескольких параллельных циклов. По умолчанию доступно до 120 запросов в минуту на токен и 600 на аккаунт. Отправка писем имеет собственные лимиты и очередь.

Состояние конкретной операции с ящиком или псевдонимом: GET /organizations/{organization_id}/domains/{domain_id}/operations/{operation_id}. Промежуточные состояния — queued, leased, retry; завершение — done, ошибка — dead. Повторяйте операцию только если ответ разрешает canRetry; для сброса пароля может потребоваться новый пароль.

Ошибки и журнал

Ответы содержат requestId; заголовок X-Request-Id помогает найти обращение в поддержке. 401 — ключ недействителен; 403 — действие или ресурс не разрешены; 409 — конфликт состояния или версии; 422 — неверные поля; 429 — лимит запросов. Временную недоступность зависимости API сообщает отдельно. Перед изменением проверяйте актуальную версию ресурса.

Журнал действий организации доступен с правом audit.read. Для обращения в поддержку достаточно ID запроса, кода ошибки и времени. Не передавайте токен, пароли, банковские коды или тело запроса с секретами.

Справочник методов

Базовый адрес: https://mailcore.uz/api/management/v1. Все ресурсы адресуются явно; API не переключает выбранную организацию в браузере. В таблице приведены действующие методы и требуемые права. Поля запросов и перечисления доступны в OpenAPI.

МетодПутьПраво
GET/accountaccount.read
GET/organizationsorganizations.read
POST/organizationsorganizations.write
GET/organizations/{organization_id}organizations.read
GET/organizations/{organization_id}/teamteam.read
POST/organizations/{organization_id}/team/invitationsteam.write
POST/organizations/{organization_id}/team/members/{account_id}team.write
POST/organizations/{organization_id}/team/invitations/{invitation_id}/revoketeam.write
POST/organizations/{organization_id}/team/invitations/{invitation_id}/resendteam.write
GET/account/invitationsaccount.read
POST/account/invitations/{invitation_id}/acceptaccount.write
GET/organizations/{organization_id}/domainsdomains.read
POST/organizations/{organization_id}/domainsdomains.write
GET/organizations/{organization_id}/domains/{domain_id}domains.read
POST/organizations/{organization_id}/domains/{domain_id}/servicesdomains.write
POST/organizations/{organization_id}/domains/{domain_id}/mail-readiness/checkdomains.write
POST/organizations/{organization_id}/domains/{domain_id}/orders/{order_id}/ownership/renewdomains.write
GET/organizations/{organization_id}/domains/{domain_id}/orders/{order_id}domains.read
POST/organizations/{organization_id}/domains/{domain_id}/orders/{order_id}/ownership/verifydomains.write
POST/organizations/{organization_id}/domains/{domain_id}/orders/{order_id}/dns/setup-modedomains.write
POST/organizations/{organization_id}/domains/{domain_id}/orders/{order_id}/dns/domain-connectdomains.write
POST/organizations/{organization_id}/domains/{domain_id}/orders/{order_id}/planbilling.write
POST/organizations/{organization_id}/domains/{domain_id}/orders/{order_id}/checkoutbilling.write
POST/organizations/{organization_id}/domains/{domain_id}/orders/{order_id}/provisionmailboxes.write
POST/organizations/{organization_id}/domains/{domain_id}/orders/{order_id}/provision/recovermailboxes.write
POST/organizations/{organization_id}/domains/{domain_id}/orders/{order_id}/dns/verifydomains.write
GET/organizations/{organization_id}/domains/{domain_id}/mailboxesmailboxes.read
POST/organizations/{organization_id}/domains/{domain_id}/mailboxesmailboxes.write
POST/organizations/{organization_id}/domains/{domain_id}/mailboxes/{mailbox_id}/suspendmailboxes.write
POST/organizations/{organization_id}/domains/{domain_id}/mailboxes/{mailbox_id}/resumemailboxes.write
POST/organizations/{organization_id}/domains/{domain_id}/mailboxes/{mailbox_id}/password-resetsmailboxes.write
GET/organizations/{organization_id}/domains/{domain_id}/aliasesaliases.read
POST/organizations/{organization_id}/domains/{domain_id}/aliasesaliases.write
POST/organizations/{organization_id}/domains/{domain_id}/aliases/{alias_id}/retargetaliases.write
POST/organizations/{organization_id}/domains/{domain_id}/aliases/{alias_id}/offboardaliases.write
POST/organizations/{organization_id}/domains/{domain_id}/operations/{operation_id}/retrymailboxes.write|aliases.write
GET/organizations/{organization_id}/domains/{domain_id}/operations/{operation_id}mailboxes.read|aliases.read
GET/organizations/{organization_id}/domains/{domain_id}/capacity-quotebilling.read
POST/organizations/{organization_id}/domains/{domain_id}/capacity-increasesbilling.write
GET/organizations/{organization_id}/domains/{domain_id}/capacity-increases/{change_id}billing.read
GET/organizations/{organization_id}/domains/{domain_id}/storage-quotebilling.read
POST/organizations/{organization_id}/domains/{domain_id}/storage-increasesbilling.write
GET/organizations/{organization_id}/domains/{domain_id}/storage-increases/{entitlement_id}billing.read
GET/organizations/{organization_id}/subscriptionbilling.read
POST/organizations/{organization_id}/subscription/{subscription_id}/cancelbilling.write
POST/organizations/{organization_id}/subscription/{subscription_id}/resumebilling.write
POST/organizations/{organization_id}/subscription/card/authorizebilling.write
GET/organizations/{organization_id}/invoices/{invoice_id}billing.read
POST/organizations/{organization_id}/invoices/{invoice_id}/checkoutbilling.write
GET/organizations/{organization_id}/payment-attempts/{attempt_id}billing.read
GET/organizations/{organization_id}/email-apiemail_projects.read
GET/organizations/{organization_id}/email-api/billingbilling.read
POST/organizations/{organization_id}/email-api/checkoutsbilling.write
POST/organizations/{organization_id}/email-api/projectsemail_projects.write
GET/organizations/{organization_id}/email-api/projects/{project_id}email_projects.read
POST/organizations/{organization_id}/email-api/projects/{project_id}/checkemail_projects.write
POST/organizations/{organization_id}/email-api/projects/{project_id}/marketing/enableemail_projects.write
GET/organizations/{organization_id}/email-api/projects/{project_id}/{stream}/keysemail_keys.read
POST/organizations/{organization_id}/email-api/projects/{project_id}/{stream}/keysemail_keys.write
POST/organizations/{organization_id}/email-api/projects/{project_id}/{stream}/keys/revokeemail_keys.write
GET/organizations/{organization_id}/email-api/projects/{project_id}/{stream}/webhookswebhooks.read
POST/organizations/{organization_id}/email-api/projects/{project_id}/{stream}/webhookswebhooks.write
POST/organizations/{organization_id}/email-api/projects/{project_id}/{stream}/webhooks/disablewebhooks.write
GET/organizations/{organization_id}/email-api/projects/{project_id}/{stream}/activity/overviewemail_activity.read
GET/organizations/{organization_id}/email-api/projects/{project_id}/{stream}/activity/messagesemail_activity.read
GET/organizations/{organization_id}/email-api/projects/{project_id}/{stream}/activity/messages/{message_id}email_activity.read
GET/organizations/{organization_id}/email-api/projects/{project_id}/{stream}/activity/batchesemail_activity.read
GET/organizations/{organization_id}/email-api/projects/{project_id}/{stream}/activity/batches/{batch_id}email_activity.read
GET/organizations/{organization_id}/auditaudit.read

Скачать

Импортируйте контракт в инструменты разработки. Примеры — обычный код, а не официальный SDK.

OpenAPI 3.1Postman CollectionДокументация для AI-инструментов