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 Email tab lists your tenants and shows which ones need attention. To work inside a tenant, your staff use 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 Email tab 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 and choose Email.
  2. Read the four cards at the top:
    • Tenants counts every tenant that has not been terminated.
    • Sending frozen counts the tenants whose outgoing mail we have paused.
    • Domains pending counts the domains still waiting for their MX, SPF or DKIM records to verify.
    • Frozen share is the frozen tenants as a percentage of all tenants.
  3. Read the Mail tenants table. Each row is one tenant:
    • Tenant shows its name, its kind 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.
    • Since shows the date the tenant was created.
  4. To find a tenant, type part of a domain or a tenant ID in the search box, or narrow the list by kind. Choose Refresh to load the latest figures.

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. Sending reputation and deliverability explains the thresholds and the tiers.

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.
customer_id Only the tenants of this customer.
q Part of a domain name or a tenant ID, up to 120 characters.
limit How many of the newest tenants to read, 1–500. The default is 100, and q searches within them.

The answer is {"items": [...], "total": n}. 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 three counts behind the cards: tenants, sending_frozen and domains_pending.

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/tenantsList org tenants
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}/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