Skip to content
Coritan Docs

Run Mail Hosting for your customers

See the mail your customers host through your organization, and manage their domains, mailboxes and sending.

View as Markdown

Every Mail Hosting or SMTP Relay service a customer orders from your organization runs as a mail tenant: its own domains, mailboxes, credentials and sending reputation. The Mail Services page lists your tenants and shows which ones need attention. To work inside a tenant, your team opens it in the staff console, or uses the API on this page, which offers the same operations the customer has on their own service.

  • Any member of the organization can open the Mail Services page and call the two list routes.
  • Opening or changing a single tenant takes the owner, admin or support_tier3 role. Other roles get 403 Staff access required. Roles and permissions lists who holds which role.
  1. Go to Organizations, open your organization, then Hosting, then Mail Services.

  2. Read the four figures at the top:

    • Tenants counts every tenant that has not been terminated, with how many are Mail Hosting and how many SMTP Relay.
    • Sending frozen counts the tenants whose outgoing mail we have paused.
    • Under review counts the tenants flagged for a look at their sending.
    • Domains pending counts the domains still waiting for their MX, SPF or DKIM records to verify.

    Select Sending frozen or Under review to list only those tenants, and select it again to list them all.

  3. Read the Mail tenants table. Each row is one tenant:

    • Tenant shows its name, its product and its domains.
    • Customer shows the customer who owns it.
    • Status shows where the service stands, with a Sending frozen or Under review badge when its reputation needs attention.
    • Reputation shows its sending tier with its bounce and complaint rates.
    • Usage shows its mailboxes against the plan's limit, its aliases and its storage, or for SMTP Relay its credentials and the messages a month it may send.
    • Since shows the date the tenant was created.
  4. To find a tenant, type part of its name, one of its domains, its customer's name, email or company, or the tenant's or the customer's number in the search box. Beside it, choose a product in place of Both products, or a state in place of Any state: a status, Sending frozen or Under review. Each choice says how many tenants it would show. The table shows 50 tenants to a page, newest first, and the search and the choices cover every tenant, not only the page on screen. The search, the choices, the page and the column you sort by stay in the page's address, so a reload or a shared link keeps them. The column headers sort the table while every tenant fits on one page. Select Refresh to load the latest figures.

  5. Select a row to open the service the customer bought. The menu at the end of the row also has Open the customer and Open in the staff console.

A tenant that we have flagged or frozen shows the reason under its row.

We check each tenant's bounce and complaint rates over a recent window of its sending:

  • A tenant whose rates cross the review threshold is flagged, and the table shows Under review. It keeps sending.
  • A tenant whose rates cross the freeze threshold stops sending, and the table shows Sending frozen. The note under the row gives the rates that caused it.
  • Only Coritan can lift a freeze. Clean up the list the tenant sends to, add the addresses that bounced to its suppression list, then contact support.

The tier decides which pool of sending addresses carries the tenant's mail. New tenants start on probation; the other tiers are established and dedicated. A review once a day promotes a tenant from probation after 14 clean days or 5,000 clean messages. A tenant under review cannot leave probation, and an established one goes back to it at the next daily review. Your customers do not see tiers or pools. Sending reputation and deliverability explains what they see, and when their sending pauses.

You know which tenants are frozen, under review or waiting on DNS records, and which customer owns each one.

403 Staff access required
Your role can read the tenant list but cannot open a tenant. Ask an owner or an admin to do the work, or to change your role.
404 Mail service not found in this organization
The tenant ID does not belong to this organization. Take the id from the tenant list.
A domain stays in Domains pending
Read the records the domain needs with GET .../domains/{domain_id}/records, publish them at the domain's DNS host, then call POST .../domains/{domain_id}/verify. Mail DNS records explains each record.

Every call takes a member's access token as Authorization: Bearer $CORITAN_TOKEN.

Shell
curl "https://api.coritan.com/api/v1/orgs/acme/mail/tenants?kind=relay&q=example.com" \
  -H "Authorization: Bearer $CORITAN_TOKEN"
Parameter Meaning
kind hosting for Mail Hosting or relay for SMTP Relay.
state frozen for the tenants whose sending is frozen, review for those under review, or a status: provisioning, active or suspended.
customer_id Only the tenants of this customer.
q Part of the tenant's name or a domain, the customer's email, name or company, or the tenant's or the customer's number, up to 120 characters.
limit and offset A page of the newest tenants: limit is 1–500, 100 by default. Every filter applies to all your tenants before the page is cut.

The answer is {"items": [...], "total": n, "limit": 100, "offset": 0, "counts": {...}, "kinds": {...}}. total is how many tenants match, however many pages that is. counts has all, frozen, review and one number for each status, for the other filters, and kinds has hosting and relay, so each choice can say how many tenants it holds. Terminated tenants are not listed. Each item carries the tenant's id, kind, status, tier, bounce_rate_pct, complaint_rate_pct, sending_frozen, review_flag, reputation_note and plan limits, plus domains, the owning customer (id, email, name), the linked org_service (id, status, hostname) and counts of mailboxes, aliases, groups, relay credentials and domains.

GET /api/v1/orgs/acme/mail/overview answers the counts behind the figures, over the tenants the list shows: tenants, sending_frozen, under_review, domains_pending and kinds (hosting and relay).

Every route below starts with /api/v1/orgs/acme/mail/tenants/{tenant_id} and needs the owner, admin or support_tier3 role. GET on that path alone answers the tenant's summary.

Area Routes and request fields
Domains GET and POST /domains (domain, primary); GET /domains/{domain_id}/records; POST /domains/{domain_id}/verify; PATCH /domains/{domain_id}/dmarc (stage is none, quarantine or reject; pinned); DELETE /domains/{domain_id}
Mailboxes GET and POST /mailboxes (domain_id, local_part, and optionally password of 12–128 characters, display_name, quota_bytes of at least 100 MiB); POST /mailboxes/{account_id}/password; PATCH /mailboxes/{account_id}/quota (quota_bytes); PATCH /mailboxes/{account_id}/enabled (enabled); DELETE /mailboxes/{account_id}
Mailbox security GET, POST (label) and DELETE /mailboxes/{account_id}/app-passwords/{credential_id}; POST and DELETE /mailboxes/{account_id}/totp; GET /mailboxes/{account_id}/sessions, DELETE one session or all of them
Imports GET and POST /mailboxes/{account_id}/imports (host, username, password, folders, since, until); POST .../imports/oauth (provider is google or microsoft); POST .../imports/upload as a multipart form with file; POST .../imports/{import_id}/pause, resume or cancel
Aliases GET and POST /aliases (domain_id, local_part, targets of 1–50 addresses); DELETE /aliases/{account_id}
SMTP credentials GET and POST /credentials (domain_id, label); POST /credentials/{account_id}/rotate; PATCH /credentials/{account_id}/enabled; DELETE /credentials/{account_id}
API keys GET and POST /api-keys (label); DELETE /api-keys/{key_id}
Sending PATCH /category (default_category is transactional or marketing); POST /messages (from, to, subject, text or html); GET, POST (address) and DELETE /suppressions/{suppression_id}; GET, POST (url, events) and DELETE /webhooks/{webhook_id}
Reports GET /events (category, recipient, hours of 1–2160, limit of 1–500); GET /usage (days of 1–365); GET /reputation (limit of 1–200)

POST /limits/increase-request exists on this path too, but it answers 400 for staff. A customer asks for a higher hourly limit from their own portal, and only Coritan can raise it; see Pass on a request for a higher limit.

A password reset with no password in the body sets a random password and returns it in the answer. For a mailbox it also turns off two-factor authentication and signs out every webmail session. For example, to add a mailbox:

Shell
curl -X POST "https://api.coritan.com/api/v1/orgs/acme/mail/tenants/42/mailboxes" \
  -H "Authorization: Bearer $CORITAN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domain_id": 7, "local_part": "alex", "display_name": "Alex"}'

Each area behaves as it does for the customer, so the mail pages explain the details: mailboxes, aliases, moving mail in, SMTP credentials, suppressions and webhooks. The full request and response shapes are in the API reference.

API operations on this page

MethodPathWhat it does
GET/api/v1/orgs/{org_slug}/mail/tenantsThe organization's mail tenants but the terminated ones, newest first
GET/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}Get summary
GET/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/aliasesList aliases
POST/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/aliasesCreate alias
DELETE/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/aliases/{account_id}Delete alias
GET/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/api-keysList API keys
POST/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/api-keysCreate API key
DELETE/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/api-keys/{key_id}Revoke API key
PATCH/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/categorySet category
GET/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/credentialsList credentials
POST/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/credentialsCreate credential
DELETE/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/credentials/{account_id}Delete credential
PATCH/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/credentials/{account_id}/enabledCredential enabled
POST/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/credentials/{account_id}/rotateRotate credential
GET/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/domainsList domains
POST/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/domainsAdd domain
DELETE/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/domains/{domain_id}Remove domain
PATCH/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/domains/{domain_id}/dmarcSet DMARC
GET/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/domains/{domain_id}/recordsDomain records
POST/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/domains/{domain_id}/verifyVerify domain
GET/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/eventsList events
POST/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/limits/increase-requestRequest limit increase
GET/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/mailboxesList mailboxes
POST/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/mailboxesCreate mailbox
DELETE/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/mailboxes/{account_id}Delete mailbox
GET/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/mailboxes/{account_id}/app-passwordsMailbox app passwords
POST/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/mailboxes/{account_id}/app-passwordsMailbox app password create
DELETE/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/mailboxes/{account_id}/app-passwords/{credential_id}Mailbox app password delete
PATCH/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/mailboxes/{account_id}/enabledMailbox enabled
GET/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/mailboxes/{account_id}/importsMailbox imports
POST/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/mailboxes/{account_id}/importsMailbox import start
POST/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/mailboxes/{account_id}/imports/oauthMailbox import sign in
POST/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/mailboxes/{account_id}/imports/uploadMailbox import upload
POST/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/mailboxes/{account_id}/imports/{import_id}/{action}Mailbox import steer
POST/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/mailboxes/{account_id}/passwordMailbox password
PATCH/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/mailboxes/{account_id}/quotaMailbox quota
GET/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/mailboxes/{account_id}/sessionsMailbox sessions
DELETE/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/mailboxes/{account_id}/sessionsMailbox sessions end
DELETE/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/mailboxes/{account_id}/sessions/{session_id}Mailbox session end
POST/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/mailboxes/{account_id}/totpMailbox totp enable
DELETE/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/mailboxes/{account_id}/totpMailbox totp disable
POST/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/messagesSend message
GET/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/migrationsList the service's migrations
POST/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/migrations/cpanelMove a cPanel account's mail here
POST/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/migrations/cpanel/discoverFind what a cPanel account holds and what moving it here would do
GET/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/migrations/{migration_id}Get one migration and how far each of its mailboxes has got
POST/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/migrations/{migration_id}/finishFinish a migration and forget the old mailboxes' passwords
POST/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/migrations/{migration_id}/syncBring in what reached the old mailboxes since the migration started
GET/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/reputationReputation report
GET/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/suppressionsList suppressions
POST/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/suppressionsAdd suppression
DELETE/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/suppressions/{suppression_id}Remove suppression
GET/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/usageUsage report
GET/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/webhooksList webhooks
POST/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/webhooksCreate webhook
DELETE/api/v1/orgs/{org_slug}/mail/tenants/{tenant_id}/webhooks/{webhook_id}Delete webhook
GET/api/v1/orgs/{org_slug}/mail/overviewOrg mail overview