Skip to content
Coritan Docs

Internal mail tenants

How the platform's own mail tenants appear on the owning account's dashboard, and what their owner and staff can each change.

View as Markdown

An internal mail tenant is a Mail Hosting or SMTP Relay setup that belongs to the platform itself, such as the relay that sends the platform's own emails or the team mailboxes on its own domains. The platform's seed file declares each one. An internal tenant has no order and no bill, so it is not a service.

Only the account that the platform's mail belongs to sees internal tenants. They appear on that account's Email page with its ordinary services. On any other account, a link to one opens the page-not-found screen.

How an internal tenant appears

Section titled How an internal tenant appears

In the Email list, internal tenants come first. The line under each one's domain gives the tenant's name followed by internal, no billing. Select the row to open the tenant.

The tenant's page looks like a service's page, with these differences:

  • The header shows an Internal badge beside the status and the product, and the tenant's number, such as Tenant #12, where a service shows its service number.
  • A note below the header, One of the platform's own tenants, says that it has no order or bill, that staff set its limits, and that only staff can remove what the seed file declares.
  • A Mail Hosting tenant has the tabs Overview, Domains, Mailboxes, Aliases and Settings. An SMTP Relay tenant has Overview, Domains, Credentials, API keys, Webhooks, Suppressions, Events and Send. Neither has a Billing tab.
  • On the Overview tab, the Tenant card takes the place of the Service card. Its Plan reads Internal, no billing, it shows the Tenant ID, and it has no renewal date. The tab has no Tags card.
  • An SMTP Relay tenant's Overview tab has no Sending IPs card. When the monthly allowance runs out, its warning says We refuse further emails until the next month starts or staff raise the allowance. and has no Change plan button.

Open webmail at the top of a Mail Hosting tenant opens webmail, as it does on a service. The Sending is paused and Under review notes appear on a tenant as they do on a service (Sending reputation and deliverability).

The owning account uses each tab as it would on a service of the same kind, within the tenant's limits:

A mailbox that the platform created for a tenant starts with a password that nobody has seen. Set one with Reset password… in the mailbox's menu on the Mailboxes tab before anyone signs in (Reset a mailbox password).

The seed file can also name a domain without adding it, so that the owning account decides when the domain's mail moves. Add it on the Domains tab when you are ready (Move a domain that already receives mail).

We record every change the owning account makes to an internal tenant, from the dashboard or through the API, in the platform's audit log.

Staff make these changes from the admin console:

A domain that the seed file declares
Only staff can remove it. The domain's page on the Domains tab shows The platform's seed file declares this domain, so only staff can remove it, from the admin console. under Remove this domain, and greys out Remove domain…. The Remove domain… button in the Danger zone card on the Settings tab is not greyed out, but the removal fails with the same message. Once you add a domain that the seed file names, it is locked in the same way.
The credential the platform sends its own mail with
On an SMTP Relay tenant, the credential's row on the Credentials tab shows The platform sends its own mail with this credential. You can rotate it, but only staff can disable or delete it. Its Enabled switch is greyed out, and Revoke credential… shows Staff only. Rotate password… works: the platform's own mail uses the new password from its next message (Rotate a password).
The tenant's limits
Staff set how many domains, mailboxes and credentials a tenant may hold, the storage for each mailbox, the monthly allowance and the hourly limit. On the Hourly limit card, Request limit increase… is greyed out, with the note Staff set the limits of an internal tenant, from the admin console. The limits the seed file declares apply again each time the platform starts.

The routes under /api/v1/client/platform-mail/{tenant_id} are the same as a mail service's under /api/v1/client/mail/{service_id} and /api/v1/client/smtp-relay/{service_id}. They take the tenant ID where a service's routes take the service ID, and each operation takes the same body and answers in the same shape as on a service. The pages linked above document each operation. As on a service, an operation that belongs to the other product answers with a message that says so, such as Not an SMTP Relay service.

There is no list under platform-mail. GET /api/v1/client/mail/services lists internal tenants first, each with "internal": true, "service_id": null and its tenant_id (Email).

GET /api/v1/client/platform-mail/{tenant_id} returns the tenant's summary, as the summary of a Mail Hosting or SMTP Relay service does. kind is hosting or relay, label is the tenant's name and service is null.

Set the default message category with PATCH /api/v1/client/platform-mail/{tenant_id}/category:

Shell
curl -X PATCH https://api.coritan.com/api/v1/client/platform-mail/12/category \
  -H "Authorization: Bearer $CORITAN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"default_category": "marketing"}'
JSON
{"default_category": "marketing"}

default_category is transactional or marketing, and any other value answers 422.

In the answers to GET /api/v1/client/platform-mail/{tenant_id}/domains and GET /api/v1/client/platform-mail/{tenant_id}/credentials, each item carries locked. It holds the reason when only staff can remove the item, and null otherwise.

Request Status detail
DELETE …/domains/{domain_id} for a domain the seed file declares 409 The platform's seed file declares this domain, so only staff can remove it, from the admin console.
PATCH …/credentials/{account_id}/enabled with "enabled": false, or DELETE …/credentials/{account_id}, for the platform's sending credential 409 The platform sends its own mail with this credential. You can rotate it, but only staff can disable or delete it.
POST …/limits/increase-request 409 Staff set the limits of an internal tenant, from the admin console.
Any request with a tenant ID that is not an internal tenant of your account 404 Mail service not found

API operations on this page

MethodPathWhat it does
GET/api/v1/client/platform-mail/{tenant_id}Get summary
GET/api/v1/client/platform-mail/{tenant_id}/domainsList domains
POST/api/v1/client/platform-mail/{tenant_id}/domainsAdd domain
DELETE/api/v1/client/platform-mail/{tenant_id}/domains/{domain_id}Remove domain
PATCH/api/v1/client/platform-mail/{tenant_id}/domains/{domain_id}/dmarcSet DMARC
GET/api/v1/client/platform-mail/{tenant_id}/domains/{domain_id}/recordsDomain records
POST/api/v1/client/platform-mail/{tenant_id}/domains/{domain_id}/verifyVerify domain
PATCH/api/v1/client/platform-mail/{tenant_id}/categorySet category
GET/api/v1/client/platform-mail/{tenant_id}/mailboxesList mailboxes
POST/api/v1/client/platform-mail/{tenant_id}/mailboxesCreate mailbox
DELETE/api/v1/client/platform-mail/{tenant_id}/mailboxes/{account_id}Delete mailbox
GET/api/v1/client/platform-mail/{tenant_id}/mailboxes/{account_id}/app-passwordsMailbox app passwords
POST/api/v1/client/platform-mail/{tenant_id}/mailboxes/{account_id}/app-passwordsMailbox app password create
DELETE/api/v1/client/platform-mail/{tenant_id}/mailboxes/{account_id}/app-passwords/{credential_id}Mailbox app password delete
PATCH/api/v1/client/platform-mail/{tenant_id}/mailboxes/{account_id}/enabledMailbox enabled
GET/api/v1/client/platform-mail/{tenant_id}/mailboxes/{account_id}/importsMailbox imports
POST/api/v1/client/platform-mail/{tenant_id}/mailboxes/{account_id}/importsMailbox import start
POST/api/v1/client/platform-mail/{tenant_id}/mailboxes/{account_id}/imports/oauthMailbox import sign in
POST/api/v1/client/platform-mail/{tenant_id}/mailboxes/{account_id}/imports/uploadMailbox import upload
POST/api/v1/client/platform-mail/{tenant_id}/mailboxes/{account_id}/imports/{import_id}/{action}Mailbox import steer
POST/api/v1/client/platform-mail/{tenant_id}/mailboxes/{account_id}/passwordMailbox password
PATCH/api/v1/client/platform-mail/{tenant_id}/mailboxes/{account_id}/quotaMailbox quota
GET/api/v1/client/platform-mail/{tenant_id}/mailboxes/{account_id}/sessionsMailbox sessions
DELETE/api/v1/client/platform-mail/{tenant_id}/mailboxes/{account_id}/sessionsMailbox sessions end
DELETE/api/v1/client/platform-mail/{tenant_id}/mailboxes/{account_id}/sessions/{session_id}Mailbox session end
POST/api/v1/client/platform-mail/{tenant_id}/mailboxes/{account_id}/totpMailbox totp enable
DELETE/api/v1/client/platform-mail/{tenant_id}/mailboxes/{account_id}/totpMailbox totp disable
GET/api/v1/client/platform-mail/{tenant_id}/aliasesList aliases
POST/api/v1/client/platform-mail/{tenant_id}/aliasesCreate alias
DELETE/api/v1/client/platform-mail/{tenant_id}/aliases/{account_id}Delete alias
GET/api/v1/client/platform-mail/{tenant_id}/credentialsList credentials
POST/api/v1/client/platform-mail/{tenant_id}/credentialsCreate credential
DELETE/api/v1/client/platform-mail/{tenant_id}/credentials/{account_id}Delete credential
PATCH/api/v1/client/platform-mail/{tenant_id}/credentials/{account_id}/enabledCredential enabled
POST/api/v1/client/platform-mail/{tenant_id}/credentials/{account_id}/rotateRotate credential
GET/api/v1/client/platform-mail/{tenant_id}/api-keysList API keys
POST/api/v1/client/platform-mail/{tenant_id}/api-keysCreate API key
DELETE/api/v1/client/platform-mail/{tenant_id}/api-keys/{key_id}Revoke API key
GET/api/v1/client/platform-mail/{tenant_id}/suppressionsList suppressions
POST/api/v1/client/platform-mail/{tenant_id}/suppressionsAdd suppression
DELETE/api/v1/client/platform-mail/{tenant_id}/suppressions/{suppression_id}Remove suppression
GET/api/v1/client/platform-mail/{tenant_id}/webhooksList webhooks
POST/api/v1/client/platform-mail/{tenant_id}/webhooksCreate webhook
DELETE/api/v1/client/platform-mail/{tenant_id}/webhooks/{webhook_id}Delete webhook
POST/api/v1/client/platform-mail/{tenant_id}/messagesSend message
GET/api/v1/client/platform-mail/{tenant_id}/eventsList events
GET/api/v1/client/platform-mail/{tenant_id}/usageUsage report
GET/api/v1/client/platform-mail/{tenant_id}/reputationReputation report
POST/api/v1/client/platform-mail/{tenant_id}/limits/increase-requestRequest limit increase