Run Mail Hosting for your customers
See the mail your customers host through your organization, and manage their domains, mailboxes and sending.
In the dashboard
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.
Before you begin
Section titled Before you begin- 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,adminorsupport_tier3role. Other roles get403 Staff access required. Roles and permissions lists who holds which role.
Read the Email tab
Section titled Read the Email tab- Go to Organizations, open your organization and choose Email.
- 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.
- 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.
- 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.
How sending reputation works
Section titled How sending reputation worksWe 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.
Result
Section titled ResultYou know which tenants are frozen, under review or waiting on DNS records, and which customer owns each one.
Troubleshooting
Section titled Troubleshooting403 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
idfrom 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 callPOST .../domains/{domain_id}/verify. Mail DNS records explains each record.
Related
Section titled Related- How Mail Hosting works
- How SMTP Relay works
- Mail DNS records
- Customer services
- Let customers use Mail Hosting and SMTP Relay
With the API
Section titled With the APIEvery call takes a member's access token as Authorization: Bearer $CORITAN_TOKEN.
List tenants
Section titled List tenantscurl "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.
Work inside a tenant
Section titled Work inside a tenantEvery 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:
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.