MAILCORE · MANAGEMENT API
API управления аккаунтом
Управляйте организациями, доменами, почтой и проектами Email API через ограниченный ключ — из своей интеграции или ИИ-агента.
Быстрый старт
Создайте токен в кабинете: Настройки аккаунта → API-токены. Выберите готовый набор прав, нужные ресурсы и срок действия. Секрет показывается один раз. Сохраните его в хранилище секретов вашей интеграции.
# 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_….
Права ключа всегда ограничены текущими правами его создателя. Удаление из организации, понижение роли, отзыв или истечение токена прекращают соответствующий доступ. Доступ к оплате, команде, ключам отправки и вебхукам задаётся отдельно. Ключ домена или проекта не даёт доступ к финансам всей организации.
Права на действия
Чтение позволяет получать ресурсы и списки. Изменение включает чтение и доступные операции создания и обновления. Для каждой команды справочник указывает отдельное обязательное право; наличие доступа к домену само по себе не даёт доступ к почтовым ящикам или ключам отправки.
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 | /account | account.read |
| GET | /organizations | organizations.read |
| POST | /organizations | organizations.write |
| GET | /organizations/{organization_id} | organizations.read |
| GET | /organizations/{organization_id}/team | team.read |
| POST | /organizations/{organization_id}/team/invitations | team.write |
| POST | /organizations/{organization_id}/team/members/{account_id} | team.write |
| POST | /organizations/{organization_id}/team/invitations/{invitation_id}/revoke | team.write |
| POST | /organizations/{organization_id}/team/invitations/{invitation_id}/resend | team.write |
| GET | /account/invitations | account.read |
| POST | /account/invitations/{invitation_id}/accept | account.write |
| GET | /organizations/{organization_id}/domains | domains.read |
| POST | /organizations/{organization_id}/domains | domains.write |
| GET | /organizations/{organization_id}/domains/{domain_id} | domains.read |
| POST | /organizations/{organization_id}/domains/{domain_id}/services | domains.write |
| POST | /organizations/{organization_id}/domains/{domain_id}/mail-readiness/check | domains.write |
| POST | /organizations/{organization_id}/domains/{domain_id}/orders/{order_id}/ownership/renew | domains.write |
| GET | /organizations/{organization_id}/domains/{domain_id}/orders/{order_id} | domains.read |
| POST | /organizations/{organization_id}/domains/{domain_id}/orders/{order_id}/ownership/verify | domains.write |
| POST | /organizations/{organization_id}/domains/{domain_id}/orders/{order_id}/dns/setup-mode | domains.write |
| POST | /organizations/{organization_id}/domains/{domain_id}/orders/{order_id}/dns/domain-connect | domains.write |
| POST | /organizations/{organization_id}/domains/{domain_id}/orders/{order_id}/plan | billing.write |
| POST | /organizations/{organization_id}/domains/{domain_id}/orders/{order_id}/checkout | billing.write |
| POST | /organizations/{organization_id}/domains/{domain_id}/orders/{order_id}/provision | mailboxes.write |
| POST | /organizations/{organization_id}/domains/{domain_id}/orders/{order_id}/provision/recover | mailboxes.write |
| POST | /organizations/{organization_id}/domains/{domain_id}/orders/{order_id}/dns/verify | domains.write |
| GET | /organizations/{organization_id}/domains/{domain_id}/mailboxes | mailboxes.read |
| POST | /organizations/{organization_id}/domains/{domain_id}/mailboxes | mailboxes.write |
| POST | /organizations/{organization_id}/domains/{domain_id}/mailboxes/{mailbox_id}/suspend | mailboxes.write |
| POST | /organizations/{organization_id}/domains/{domain_id}/mailboxes/{mailbox_id}/resume | mailboxes.write |
| POST | /organizations/{organization_id}/domains/{domain_id}/mailboxes/{mailbox_id}/password-resets | mailboxes.write |
| GET | /organizations/{organization_id}/domains/{domain_id}/aliases | aliases.read |
| POST | /organizations/{organization_id}/domains/{domain_id}/aliases | aliases.write |
| POST | /organizations/{organization_id}/domains/{domain_id}/aliases/{alias_id}/retarget | aliases.write |
| POST | /organizations/{organization_id}/domains/{domain_id}/aliases/{alias_id}/offboard | aliases.write |
| POST | /organizations/{organization_id}/domains/{domain_id}/operations/{operation_id}/retry | mailboxes.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-quote | billing.read |
| POST | /organizations/{organization_id}/domains/{domain_id}/capacity-increases | billing.write |
| GET | /organizations/{organization_id}/domains/{domain_id}/capacity-increases/{change_id} | billing.read |
| GET | /organizations/{organization_id}/domains/{domain_id}/storage-quote | billing.read |
| POST | /organizations/{organization_id}/domains/{domain_id}/storage-increases | billing.write |
| GET | /organizations/{organization_id}/domains/{domain_id}/storage-increases/{entitlement_id} | billing.read |
| GET | /organizations/{organization_id}/subscription | billing.read |
| POST | /organizations/{organization_id}/subscription/{subscription_id}/cancel | billing.write |
| POST | /organizations/{organization_id}/subscription/{subscription_id}/resume | billing.write |
| POST | /organizations/{organization_id}/subscription/card/authorize | billing.write |
| GET | /organizations/{organization_id}/invoices/{invoice_id} | billing.read |
| POST | /organizations/{organization_id}/invoices/{invoice_id}/checkout | billing.write |
| GET | /organizations/{organization_id}/payment-attempts/{attempt_id} | billing.read |
| GET | /organizations/{organization_id}/email-api | email_projects.read |
| GET | /organizations/{organization_id}/email-api/billing | billing.read |
| POST | /organizations/{organization_id}/email-api/checkouts | billing.write |
| POST | /organizations/{organization_id}/email-api/projects | email_projects.write |
| GET | /organizations/{organization_id}/email-api/projects/{project_id} | email_projects.read |
| POST | /organizations/{organization_id}/email-api/projects/{project_id}/check | email_projects.write |
| POST | /organizations/{organization_id}/email-api/projects/{project_id}/marketing/enable | email_projects.write |
| GET | /organizations/{organization_id}/email-api/projects/{project_id}/{stream}/keys | email_keys.read |
| POST | /organizations/{organization_id}/email-api/projects/{project_id}/{stream}/keys | email_keys.write |
| POST | /organizations/{organization_id}/email-api/projects/{project_id}/{stream}/keys/revoke | email_keys.write |
| GET | /organizations/{organization_id}/email-api/projects/{project_id}/{stream}/webhooks | webhooks.read |
| POST | /organizations/{organization_id}/email-api/projects/{project_id}/{stream}/webhooks | webhooks.write |
| POST | /organizations/{organization_id}/email-api/projects/{project_id}/{stream}/webhooks/disable | webhooks.write |
| GET | /organizations/{organization_id}/email-api/projects/{project_id}/{stream}/activity/overview | email_activity.read |
| GET | /organizations/{organization_id}/email-api/projects/{project_id}/{stream}/activity/messages | email_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/batches | email_activity.read |
| GET | /organizations/{organization_id}/email-api/projects/{project_id}/{stream}/activity/batches/{batch_id} | email_activity.read |
| GET | /organizations/{organization_id}/audit | audit.read |
Скачать
Импортируйте контракт в инструменты разработки. Примеры — обычный код, а не официальный SDK.
OpenAPI 3.1Postman CollectionДокументация для AI-инструментов