# Let customers use Mail Hosting and SMTP Relay

> The portal API for a customer's mail domains, mailboxes and aliases, and for sending through SMTP Relay.

Source: https://docs.coritan.com/organizations/storefront/portal-mail/

These portal routes let a customer run the [Mail Hosting](/mail/mail-hosting/) and [SMTP Relay](/mail/smtp-relay/) services they bought from you: add their domains, create mailboxes and aliases, move old mail in, and send through a relay. They are the customer mail API from the [Email](/mail/) section on a different path. A route that is `/api/v1/client/mail/{service_id}/mailboxes` there is `/api/v1/orgs/acme/portal/mail/{service_id}/mailboxes` here, with the same request body and the same answer. This page lists what differs and walks through the tasks a storefront needs most.

## Before you begin

- Get a customer token as [Sign customers in to your storefront](/organizations/storefront/customer-sign-in/) describes. Every call on this page sends it as `Authorization: Bearer $CUSTOMER_TOKEN`. Only the customer who bought a mail service can use it.
- Sell Mail Hosting or SMTP Relay plans in your catalogue, as [Set up products and pricing](/organizations/products-and-pricing/) explains. Customers order them like any other plan; see [Take an order](/organizations/storefront/storefront-api/#take-an-order).
- Ask [support](https://www.coritan.com/dashboard/support) to set your organization's mail host names before you sell mail. Your customers' mail apps connect to these names. Your settings show them in a read-only card, as [Change organization settings](/organizations/settings/#choose-how-your-email-leaves) describes, and any name you have not set falls back to one of ours.

## How the portal differs from the customer API

- The paths start with `/api/v1/orgs/{org_slug}/portal/mail/{service_id}` or `/api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}`. Both accept either kind of service. A route only a relay has, such as sending, answers `404 Not an SMTP Relay service` on a Mail Hosting service under either path.
- `service_id` is the id in `service_id` from `GET /portal/mail/services`. It differs from the `id` in `GET /portal/services`, which the list returns as `org_service_id` and which the billing routes take, such as [Change a plan](/organizations/storefront/customer-portal/#change-a-plan) and [Cancel a service](/organizations/storefront/customer-portal/#cancel-a-service).
- Host names come from your organization. `hostnames` in the summary and `smtp` in a credential's answer carry your names, with ours in place of any you have not set. The summary's `cluster` block always names our servers, and `product_name` in the service list is the name of our plan behind the service, so show your customers `hostnames` and the product name from `GET /portal/services` instead.
- When a mailbox turns on two-factor authentication, the authenticator app lists it under your organization's name.
- A request for a higher hourly limit opens a conversation in your organization's support inbox. See [Pass on a request for a higher limit](#pass-on-a-request-for-a-higher-limit).
- An import that signs in to Gmail or Microsoft 365 starts only when your storefront calls the API on a storefront host we serve for you. See [Move old mail in](#move-old-mail-in).

## Find the customer's mail services

```bash
curl "https://api.coritan.com/api/v1/orgs/acme/portal/mail/services" \
  -H "Authorization: Bearer $CUSTOMER_TOKEN"
```

The answer is `{"items": [...], "total": n}`, newest first. It leaves out cancelled and terminated services, and dedicated IP add-ons, which show in their relay's summary under `dedicated_ips`. Each item has these fields:

| Field | What it holds |
| --- | --- |
| `service_id` | The id every other route on this page takes. |
| `org_service_id` | The service's id in your organization, for the billing routes. |
| `module_name` | `mail` for Mail Hosting, `smtp_relay` for SMTP Relay. |
| `product_name` | The name of our plan behind the service. |
| `status` | Where the service stands, such as `active` or `suspended`. |
| `hostname` | The service's name. |
| `tenant` | The mail service itself: its `id`, `kind` (`hosting` or `relay`), `status`, plan limits and reputation. It is `null` while we set the service up. |
| `created_at` | When the customer ordered the service. |

Read one service's summary:

```bash
curl "https://api.coritan.com/api/v1/orgs/acme/portal/mail/4812" \
  -H "Authorization: Bearer $CUSTOMER_TOKEN"
```

The answer is the summary that [How Mail Hosting works](/mail/mail-hosting/#with-the-api) and [How SMTP Relay works](/mail/smtp-relay/#with-the-api) describe: `kind`, `status`, the plan's limits, `counts`, `used_bytes` and `hostnames`, plus `month_to_date_sent`, `limits` and `dedicated_ips` for a relay. It also carries `org_service_id`. `hostnames` holds these fields:

| Field | What it holds |
| --- | --- |
| `smtp_host`, `imap_host` | The servers mail apps connect to. |
| `jmap_host` | Always one of ours. |
| `mx_hostname_base` | The mail server suffix your organization presents. The MX records a domain needs always name our servers, so take them from the domain's `records`. |
| `webmail_url` | Where a mailbox signs in to webmail. |
| `webmail_mode` | `unset` when we do not serve webmail at `webmail_url`. Hide your webmail link then. |
| `display_name`, `support_url`, `postmaster_address`, `user_mailbox_domain` | Values from your organization's mail settings, or `null`. |

## Add a customer's domain

```bash
curl -X POST "https://api.coritan.com/api/v1/orgs/acme/portal/mail/4812/domains" \
  -H "Authorization: Bearer $CUSTOMER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domain": "example.com", "primary": true}'
```

`domain` is 3–253 characters. The answer is `201` with the domain and `records`, the DNS records it needs. What happens next depends on where the domain's DNS is hosted:

- When we host the domain's zone and it belongs to the customer, we publish the records and the domain proves itself at once. That covers a name the customer claimed under one of your free suffixes, as [Offer free names under your domain](/organizations/storefront/portal-networking/#offer-free-names-under-your-domain) describes, and a DNS zone they ordered from you as a service.
- Any other domain waits until its records are published. The customer publishes them at their DNS provider. A zone in your organization's own DNS account proves nothing for a customer either, so your staff publish the records there on the **DNS** tab, as [Host DNS zones for your organization](/organizations/dns/) shows.

Once the records are published, check the domain:

```bash
curl -X POST "https://api.coritan.com/api/v1/orgs/acme/portal/mail/4812/domains/311/verify" \
  -H "Authorization: Bearer $CUSTOMER_TOKEN"
```

The answer holds the `domain` with its new `status`, and `result` with each check. `GET .../domains/{domain_id}/records` lists the records again, and `DELETE .../domains/{domain_id}` removes the domain. [Add a domain to Mail Hosting](/mail/mail-hosting/add-a-domain/) and [Add a sending domain to SMTP Relay](/mail/smtp-relay/add-a-sending-domain/) explain each check and each refusal, and [Mail DNS records](/mail/dns-records/) explains each record.

To hold a domain's DMARC policy at one stage, or to move it, send `stage` (`none`, `quarantine` or `reject`), `pinned`, or both:

```bash
curl -X PATCH "https://api.coritan.com/api/v1/orgs/acme/portal/mail/4812/domains/311/dmarc" \
  -H "Authorization: Bearer $CUSTOMER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"stage": "quarantine", "pinned": true}'
```

[How the DMARC stage ramp works](/mail/dmarc/) explains the stages.

## Create mailboxes and aliases

```bash
curl -X POST "https://api.coritan.com/api/v1/orgs/acme/portal/mail/4812/mailboxes" \
  -H "Authorization: Bearer $CUSTOMER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domain_id": 311, "local_part": "alex", "display_name": "Alex Morgan"}'
```

`local_part` is the part before the @, 1–64 characters. `password` is optional, 12–128 characters, and `quota_bytes` is optional, at least 100 MiB. Leave out `password` and we generate one: the answer is `201` with the mailbox, and `password` holds the generated password this once. Show it to the customer then, because we cannot show it again.

Every path below starts with `/api/v1/orgs/acme/portal/mail/{service_id}`:

| Route | Body | What it does |
| --- | --- | --- |
| `GET /mailboxes` | | Lists the mailboxes. |
| `POST /mailboxes/{account_id}/password` | `{"password": "..."}`, or `{}` | Sets the password you send, or generates one and returns it. A generated password also turns off two-factor authentication. Either way, every webmail session ends and app passwords keep working. |
| `PATCH /mailboxes/{account_id}/quota` | `{"quota_bytes": 10737418240}` | Changes the mailbox's share of the plan's storage. |
| `PATCH /mailboxes/{account_id}/enabled` | `{"enabled": false}` | Turns the mailbox off or on. |
| `DELETE /mailboxes/{account_id}` | | Deletes the mailbox. |
| `GET /aliases` | | Lists the aliases. |
| `POST /aliases` | `{"domain_id": 311, "local_part": "sales", "targets": ["alex@example.com"]}` | Creates an address that delivers to 1–50 other addresses. |
| `DELETE /aliases/{account_id}` | | Deletes an alias. |

[Create and manage mailboxes](/mail/mail-hosting/mailboxes/#with-the-api) and [Forward addresses with aliases](/mail/mail-hosting/aliases/) give the full fields and refusals.

## Secure a mailbox

Every path below starts with `/api/v1/orgs/acme/portal/mail/{service_id}/mailboxes/{account_id}`:

| Route | What it does |
| --- | --- |
| `GET /app-passwords` | Lists the mailbox's app passwords, which mail apps sign in with. |
| `POST /app-passwords` | Creates one. Send `label`, 1–64 characters. The password is in `secret`, shown this once. |
| `DELETE /app-passwords/{credential_id}` | Revokes one. |
| `POST /totp` | Turns on two-factor authentication and returns `otpauth_uri` and `secret` once, for the customer's authenticator app. Every webmail session ends. |
| `DELETE /totp` | Answers `400`, because it needs the mailbox's password and takes none. To turn two-factor authentication off, send `{}` to `POST .../password` instead. |
| `GET /sessions` | Lists the browsers signed in to webmail as the mailbox. |
| `DELETE /sessions/{session_id}` | Signs one browser out. The answer is `204`. |
| `DELETE /sessions` | Signs every browser out. The answer is `204`. |

The issuer in `otpauth_uri` is your organization's name. [Secure a mailbox](/mail/mail-hosting/mailbox-security/#with-the-api) explains app passwords, two-factor authentication and sessions.

## Move old mail in

The import routes sit under `/api/v1/orgs/acme/portal/mail/{service_id}/mailboxes/{account_id}/imports` and work as [Move existing mail into a mailbox](/mail/mail-hosting/move-mail-in/) describes:

| Route | What it does |
| --- | --- |
| `GET .../imports` | Lists the mailbox's imports with their status and counts. It also returns the providers you can offer in `presets`, the sign-ins on offer in `oauth`, and the largest file an upload takes in `max_upload_mb`. |
| `POST .../imports` | Copies mail from another server over IMAP. Send `username`, `password`, and a `preset` from the list or a `host`. |
| `POST .../imports/upload` | Imports a file, sent as a multipart form with the file in `file`. |
| `POST .../imports/oauth` | Starts a sign-in to Gmail or Microsoft 365 and answers `{"url": "..."}`. |
| `POST .../imports/{import_id}/pause` | Pauses an import. `resume` and `cancel` in place of `pause` resume or cancel it. |

For example, to copy the mail from another server:

```bash
curl -X POST "https://api.coritan.com/api/v1/orgs/acme/portal/mail/4812/mailboxes/5120/imports" \
  -H "Authorization: Bearer $CUSTOMER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"preset": "other", "host": "imap.example.com", "username": "alex@example.com", "password": "the-old-password"}'
```

For a sign-in, send `provider` (`google` or `microsoft`) and `return_path`, a path on your storefront, then send the customer's browser to `url`. After the sign-in, the browser comes back to that path with `import=started`, or `import_error` and the reason, in the query.

A sign-in comes back only to the host your storefront called the API on, so it works only when that host is one we serve for your organization. Called on `api.coritan.com`, the route answers `422` with the code `oauth_origin`. A storefront that calls the API there can offer the server import and the file upload, which work on any host.

## Send through SMTP Relay

Sending, SMTP credentials and send API keys need an SMTP Relay service. The paths below start with `/api/v1/orgs/acme/portal/smtp-relay/{service_id}`.

1. For an application that sends over SMTP, create a credential on one of the relay's domains:

   ```bash
   curl -X POST "https://api.coritan.com/api/v1/orgs/acme/portal/smtp-relay/4812/credentials" \
     -H "Authorization: Bearer $CUSTOMER_TOKEN" \
     -H "Content-Type: application/json" \
     -d '{"domain_id": 311, "label": "billing app"}'
   ```

   The answer is `201` with the credential: the username in `address`, the `password` this once, and `smtp`, the host names with your organization's names in them. [Send over SMTP with credentials](/mail/smtp-relay/credentials/) gives the ports and the routes that rotate, turn off and revoke a credential.

2. For an application that sends over HTTPS, create a send API key:

   ```bash
   curl -X POST "https://api.coritan.com/api/v1/orgs/acme/portal/smtp-relay/4812/api-keys" \
     -H "Authorization: Bearer $CUSTOMER_TOKEN" \
     -H "Content-Type: application/json" \
     -d '{"label": "shop"}'
   ```

   The answer is `201`, and `key` holds the key this once. The application sends with it to `POST /api/v1/mail/send`, as [Send email over HTTPS](/mail/smtp-relay/send-with-the-api/) shows. A relay holds up to 20 keys that are not revoked. `GET /api-keys` lists them and `DELETE /api-keys/{key_id}` revokes one.

3. To send from your storefront with the customer's token, post the message:

   ```bash
   curl -X POST "https://api.coritan.com/api/v1/orgs/acme/portal/smtp-relay/4812/messages" \
     -H "Authorization: Bearer $CUSTOMER_TOKEN" \
     -H "Content-Type: application/json" \
     -d '{"from": "receipts@example.com", "to": ["alex@example.com"], "subject": "Your receipt", "text": "Thanks for your order."}'
   ```

   The body and the `202` answer are those of the send API.

The other sending routes:

| Route | Fields | What it does |
| --- | --- | --- |
| `PATCH /category` | `default_category`: `transactional` or `marketing` | Sets the category a message takes when it names none. See [Transactional and marketing mail](/mail/smtp-relay/message-categories/). |
| `GET /suppressions`, `POST /suppressions`, `DELETE /suppressions/{suppression_id}` | `address` | Lists, adds or removes addresses the relay does not send to. See [Manage the suppression list](/mail/smtp-relay/suppressions/). |
| `GET /webhooks`, `POST /webhooks`, `DELETE /webhooks/{webhook_id}` | `url` (`https://` only), `events` | Posts delivery events to the customer's URL, up to 10 webhooks a service. The answer to `POST` holds the signing `secret` once. See [Receive delivery events with webhooks](/mail/smtp-relay/webhooks/). |
| `GET /events` | `category`, `recipient`, `hours` (1–2160, default 24), `limit` (1–500, default 100) | Lists message events, newest first. See [Look up message events](/mail/smtp-relay/events/). |
| `GET /usage` | `days` (1–365, default 30) | Returns the messages sent each day, and the month's total against the plan. |
| `GET /reputation` | `limit` (1–200, default 50) | Returns bounce and complaint rates against our thresholds, each domain's checks, and the reports receiving servers sent. See [Sending reputation and deliverability](/mail/smtp-relay/deliverability/). |

Suppressions, webhooks, events, usage and reputation work on a Mail Hosting service too.

## Pass on a request for a higher limit

A relay sends up to its hourly limit, which [How SMTP Relay sending limits work](/mail/smtp-relay/sending-limits/) explains. When a customer needs more, send the number they want and why:

```bash
curl -X POST "https://api.coritan.com/api/v1/orgs/acme/portal/smtp-relay/4812/limits/increase-request" \
  -H "Authorization: Bearer $CUSTOMER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"requested_per_hour": 2000, "reason": "Order receipts for a seasonal sale"}'
```

`requested_per_hour` is 10–1,000,000 and must be above the current limit. `reason` is up to 2,000 characters. The answer is `201` with `conversation_id`, `current_per_hour` and `requested_per_hour`.

The request opens a conversation from the customer in your organization's support inbox, with the relay's sending figures in its first message; [Answer customer conversations](/organizations/staff-console/support-inbox/) shows where to find it. Only Coritan can raise a relay's limit, so [contact support](https://www.coritan.com/dashboard/support) with the relay's `service_id` and the number, then answer the customer. A second request for the same relay on the same day (UTC) returns the conversation the first one opened.

## Result

The customer's domains are verified, their mailboxes and aliases receive mail, and their relay sends with a credential or an API key. Your staff can open the same services from the organization API; see [Run Mail Hosting for your customers](/organizations/mail/).

## Troubleshooting

`404 Mail service not found`
: The id is not one of this customer's mail services, or the service was terminated. Take `service_id` from `GET /portal/mail/services`, not the `id` from `GET /portal/services`.

`409 This mail service is still provisioning`
: We are still setting the service up. Try again once the service shows a `tenant` in `GET /portal/mail/services`.

`404 Not an SMTP Relay service`
: The route needs an SMTP Relay service, and this one is Mail Hosting. A mailbox sends through its own SMTP sign-in instead; see [Connect a mail app to Mail Hosting](/mail/mail-hosting/connect-a-mail-app/).

`409 Service is not active`
: The service is suspended or not ready, so it cannot add a domain or send. [Suspend or unsuspend a service](/organizations/customer-services/#suspend-or-unsuspend-a-service) explains suspension.

`400 example.com is one of the platform's own domains, so it cannot be added to this service`
: The name is in one of our own zones. Use a domain the customer owns, or a name they claimed under one of your free suffixes.

`409 The DMARC record for example.com in your DNS was not added by us. Change its p= value in the zone instead.`
: The zone already holds a DMARC record that someone wrote by hand. Change its policy in the zone.

`503 The zone is busy with another change. Check the domain again in a minute.`
: Another change to the domain's zone was being saved. Check the domain again.

`400 Turning two-factor login off needs the mailbox password; reset the password to clear it instead`
: `DELETE .../totp` cannot turn two-factor authentication off. Send `{}` to `POST .../mailboxes/{account_id}/password`, and give the customer the new password.

`422` with the code `oauth_origin`
: The sign-in import was called on a host we do not serve for your organization, such as `api.coritan.com`. Use the server import or a file upload.

`422` with the code `oauth_unavailable`
: We cannot start a sign-in with that provider. The message says why. Use the server import instead.

`429 Monthly sending allowance reached; upgrade the plan to continue`
: The relay has sent the messages its plan allows this month. A plan with a buffer answers `Monthly allowance and its … buffer are used up` instead. Move the customer to a larger plan, as [Change a plan](/organizations/storefront/customer-portal/#change-a-plan) shows.

`422 The relay may already send 500 an hour`
: `requested_per_hour` is not above the relay's current limit.

`502` with a message that starts `Mail engine error:`
: Something failed on our side. Try again, and [contact support](https://www.coritan.com/dashboard/support) if it keeps failing.

## Related

- [Run Mail Hosting for your customers](/organizations/mail/)
- [How Mail Hosting works](/mail/mail-hosting/)
- [How SMTP Relay works](/mail/smtp-relay/)
- [Build the customer account area](/organizations/storefront/customer-portal/)
- [Let customers manage IPs, protection and domains](/organizations/storefront/portal-networking/)

## API

- `GET /api/v1/orgs/{org_slug}/portal/mail/services`: List services (https://docs.coritan.com/api/reference/organizations/customer-portal/mail/#op-get-api-v1-orgs-org-slug-portal-mail-services)
- `GET /api/v1/orgs/{org_slug}/portal/mail/{service_id}`: Get summary (https://docs.coritan.com/api/reference/organizations/customer-portal/mail/#op-get-api-v1-orgs-org-slug-portal-mail-service-id)
- `GET /api/v1/orgs/{org_slug}/portal/mail/{service_id}/aliases`: List aliases (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-aliases/#op-get-api-v1-orgs-org-slug-portal-mail-service-id-aliases)
- `POST /api/v1/orgs/{org_slug}/portal/mail/{service_id}/aliases`: Create alias (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-aliases/#op-post-api-v1-orgs-org-slug-portal-mail-service-id-aliases)
- `DELETE /api/v1/orgs/{org_slug}/portal/mail/{service_id}/aliases/{account_id}`: Delete alias (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-aliases/#op-delete-api-v1-orgs-org-slug-portal-mail-service-id-aliases-account-id)
- `GET /api/v1/orgs/{org_slug}/portal/mail/{service_id}/api-keys`: List API keys (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-api-keys/#op-get-api-v1-orgs-org-slug-portal-mail-service-id-api-keys)
- `POST /api/v1/orgs/{org_slug}/portal/mail/{service_id}/api-keys`: Create API key (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-api-keys/#op-post-api-v1-orgs-org-slug-portal-mail-service-id-api-keys)
- `DELETE /api/v1/orgs/{org_slug}/portal/mail/{service_id}/api-keys/{key_id}`: Revoke API key (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-api-keys/#op-delete-api-v1-orgs-org-slug-portal-mail-service-id-api-keys-key-id)
- `PATCH /api/v1/orgs/{org_slug}/portal/mail/{service_id}/category`: Set category (https://docs.coritan.com/api/reference/organizations/customer-portal/mail/#op-patch-api-v1-orgs-org-slug-portal-mail-service-id-category)
- `GET /api/v1/orgs/{org_slug}/portal/mail/{service_id}/credentials`: List credentials (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-credentials/#op-get-api-v1-orgs-org-slug-portal-mail-service-id-credentials)
- `POST /api/v1/orgs/{org_slug}/portal/mail/{service_id}/credentials`: Create credential (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-credentials/#op-post-api-v1-orgs-org-slug-portal-mail-service-id-credentials)
- `DELETE /api/v1/orgs/{org_slug}/portal/mail/{service_id}/credentials/{account_id}`: Delete credential (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-credentials/#op-delete-api-v1-orgs-org-slug-portal-mail-service-id-credentials-account-id)
- `PATCH /api/v1/orgs/{org_slug}/portal/mail/{service_id}/credentials/{account_id}/enabled`: Credential enabled (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-credentials/#op-patch-api-v1-orgs-org-slug-portal-mail-service-id-credentials-account-id-enabled)
- `POST /api/v1/orgs/{org_slug}/portal/mail/{service_id}/credentials/{account_id}/rotate`: Rotate credential (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-credentials/#op-post-api-v1-orgs-org-slug-portal-mail-service-id-credentials-account-id-rotate)
- `GET /api/v1/orgs/{org_slug}/portal/mail/{service_id}/domains`: List domains (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-domains/#op-get-api-v1-orgs-org-slug-portal-mail-service-id-domains)
- `POST /api/v1/orgs/{org_slug}/portal/mail/{service_id}/domains`: Add domain (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-domains/#op-post-api-v1-orgs-org-slug-portal-mail-service-id-domains)
- `DELETE /api/v1/orgs/{org_slug}/portal/mail/{service_id}/domains/{domain_id}`: Remove domain (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-domains/#op-delete-api-v1-orgs-org-slug-portal-mail-service-id-domains-domain-id)
- `PATCH /api/v1/orgs/{org_slug}/portal/mail/{service_id}/domains/{domain_id}/dmarc`: Set DMARC (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-domains/#op-patch-api-v1-orgs-org-slug-portal-mail-service-id-domains-domain-id-dmarc)
- `GET /api/v1/orgs/{org_slug}/portal/mail/{service_id}/domains/{domain_id}/records`: Domain records (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-domains/#op-get-api-v1-orgs-org-slug-portal-mail-service-id-domains-domain-id-records)
- `POST /api/v1/orgs/{org_slug}/portal/mail/{service_id}/domains/{domain_id}/verify`: Verify domain (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-domains/#op-post-api-v1-orgs-org-slug-portal-mail-service-id-domains-domain-id-verify)
- `GET /api/v1/orgs/{org_slug}/portal/mail/{service_id}/events`: List events (https://docs.coritan.com/api/reference/organizations/customer-portal/mail/#op-get-api-v1-orgs-org-slug-portal-mail-service-id-events)
- `POST /api/v1/orgs/{org_slug}/portal/mail/{service_id}/limits/increase-request`: Request limit increase (https://docs.coritan.com/api/reference/organizations/customer-portal/mail/#op-post-api-v1-orgs-org-slug-portal-mail-service-id-limits-increase-request)
- `GET /api/v1/orgs/{org_slug}/portal/mail/{service_id}/mailboxes`: List mailboxes (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-mailboxes/#op-get-api-v1-orgs-org-slug-portal-mail-service-id-mailboxes)
- `POST /api/v1/orgs/{org_slug}/portal/mail/{service_id}/mailboxes`: Create mailbox (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-mailboxes/#op-post-api-v1-orgs-org-slug-portal-mail-service-id-mailboxes)
- `DELETE /api/v1/orgs/{org_slug}/portal/mail/{service_id}/mailboxes/{account_id}`: Delete mailbox (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-mailboxes/#op-delete-api-v1-orgs-org-slug-portal-mail-service-id-mailboxes-account-id)
- `GET /api/v1/orgs/{org_slug}/portal/mail/{service_id}/mailboxes/{account_id}/app-passwords`: Mailbox app passwords (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-mailboxes/#op-get-api-v1-orgs-org-slug-portal-mail-service-id-mailboxes-account-id-app-passwor)
- `POST /api/v1/orgs/{org_slug}/portal/mail/{service_id}/mailboxes/{account_id}/app-passwords`: Mailbox app password create (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-mailboxes/#op-post-api-v1-orgs-org-slug-portal-mail-service-id-mailboxes-account-id-app-passwo)
- `DELETE /api/v1/orgs/{org_slug}/portal/mail/{service_id}/mailboxes/{account_id}/app-passwords/{credential_id}`: Mailbox app password delete (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-mailboxes/#op-delete-api-v1-orgs-org-slug-portal-mail-service-id-mailboxes-account-id-app-pass)
- `PATCH /api/v1/orgs/{org_slug}/portal/mail/{service_id}/mailboxes/{account_id}/enabled`: Mailbox enabled (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-mailboxes/#op-patch-api-v1-orgs-org-slug-portal-mail-service-id-mailboxes-account-id-enabled)
- `GET /api/v1/orgs/{org_slug}/portal/mail/{service_id}/mailboxes/{account_id}/imports`: Mailbox imports (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-mailboxes/#op-get-api-v1-orgs-org-slug-portal-mail-service-id-mailboxes-account-id-imports)
- `POST /api/v1/orgs/{org_slug}/portal/mail/{service_id}/mailboxes/{account_id}/imports`: Mailbox import start (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-mailboxes/#op-post-api-v1-orgs-org-slug-portal-mail-service-id-mailboxes-account-id-imports)
- `POST /api/v1/orgs/{org_slug}/portal/mail/{service_id}/mailboxes/{account_id}/imports/oauth`: Mailbox import sign in (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-mailboxes/#op-post-api-v1-orgs-org-slug-portal-mail-service-id-mailboxes-account-id-imports-oa)
- `POST /api/v1/orgs/{org_slug}/portal/mail/{service_id}/mailboxes/{account_id}/imports/upload`: Mailbox import upload (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-mailboxes/#op-post-api-v1-orgs-org-slug-portal-mail-service-id-mailboxes-account-id-imports-up)
- `POST /api/v1/orgs/{org_slug}/portal/mail/{service_id}/mailboxes/{account_id}/imports/{import_id}/{action}`: Mailbox import steer (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-mailboxes/#op-post-api-v1-orgs-org-slug-portal-mail-service-id-mailboxes-account-id-imports-im)
- `POST /api/v1/orgs/{org_slug}/portal/mail/{service_id}/mailboxes/{account_id}/password`: Mailbox password (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-mailboxes/#op-post-api-v1-orgs-org-slug-portal-mail-service-id-mailboxes-account-id-password)
- `PATCH /api/v1/orgs/{org_slug}/portal/mail/{service_id}/mailboxes/{account_id}/quota`: Mailbox quota (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-mailboxes/#op-patch-api-v1-orgs-org-slug-portal-mail-service-id-mailboxes-account-id-quota)
- `GET /api/v1/orgs/{org_slug}/portal/mail/{service_id}/mailboxes/{account_id}/sessions`: Mailbox sessions (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-mailboxes/#op-get-api-v1-orgs-org-slug-portal-mail-service-id-mailboxes-account-id-sessions)
- `DELETE /api/v1/orgs/{org_slug}/portal/mail/{service_id}/mailboxes/{account_id}/sessions`: Mailbox sessions end (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-mailboxes/#op-delete-api-v1-orgs-org-slug-portal-mail-service-id-mailboxes-account-id-sessions)
- `DELETE /api/v1/orgs/{org_slug}/portal/mail/{service_id}/mailboxes/{account_id}/sessions/{session_id}`: Mailbox session end (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-mailboxes/#op-delete-api-v1-orgs-org-slug-portal-mail-service-id-mailboxes-account-id-sessions)
- `POST /api/v1/orgs/{org_slug}/portal/mail/{service_id}/mailboxes/{account_id}/totp`: Mailbox totp enable (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-mailboxes/#op-post-api-v1-orgs-org-slug-portal-mail-service-id-mailboxes-account-id-totp)
- `DELETE /api/v1/orgs/{org_slug}/portal/mail/{service_id}/mailboxes/{account_id}/totp`: Mailbox totp disable (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-mailboxes/#op-delete-api-v1-orgs-org-slug-portal-mail-service-id-mailboxes-account-id-totp)
- `POST /api/v1/orgs/{org_slug}/portal/mail/{service_id}/messages`: Send message (https://docs.coritan.com/api/reference/organizations/customer-portal/mail/#op-post-api-v1-orgs-org-slug-portal-mail-service-id-messages)
- `GET /api/v1/orgs/{org_slug}/portal/mail/{service_id}/reputation`: Reputation report (https://docs.coritan.com/api/reference/organizations/customer-portal/mail/#op-get-api-v1-orgs-org-slug-portal-mail-service-id-reputation)
- `GET /api/v1/orgs/{org_slug}/portal/mail/{service_id}/suppressions`: List suppressions (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-suppressions/#op-get-api-v1-orgs-org-slug-portal-mail-service-id-suppressions)
- `POST /api/v1/orgs/{org_slug}/portal/mail/{service_id}/suppressions`: Add suppression (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-suppressions/#op-post-api-v1-orgs-org-slug-portal-mail-service-id-suppressions)
- `DELETE /api/v1/orgs/{org_slug}/portal/mail/{service_id}/suppressions/{suppression_id}`: Remove suppression (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-suppressions/#op-delete-api-v1-orgs-org-slug-portal-mail-service-id-suppressions-suppression-id)
- `GET /api/v1/orgs/{org_slug}/portal/mail/{service_id}/usage`: Usage report (https://docs.coritan.com/api/reference/organizations/customer-portal/mail/#op-get-api-v1-orgs-org-slug-portal-mail-service-id-usage)
- `GET /api/v1/orgs/{org_slug}/portal/mail/{service_id}/webhooks`: List webhooks (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-webhooks/#op-get-api-v1-orgs-org-slug-portal-mail-service-id-webhooks)
- `POST /api/v1/orgs/{org_slug}/portal/mail/{service_id}/webhooks`: Create webhook (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-webhooks/#op-post-api-v1-orgs-org-slug-portal-mail-service-id-webhooks)
- `DELETE /api/v1/orgs/{org_slug}/portal/mail/{service_id}/webhooks/{webhook_id}`: Delete webhook (https://docs.coritan.com/api/reference/organizations/customer-portal/mail-webhooks/#op-delete-api-v1-orgs-org-slug-portal-mail-service-id-webhooks-webhook-id)
- `GET /api/v1/orgs/{org_slug}/portal/smtp-relay/services`: List services (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay/#op-get-api-v1-orgs-org-slug-portal-smtp-relay-services)
- `GET /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}`: Get summary (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay/#op-get-api-v1-orgs-org-slug-portal-smtp-relay-service-id)
- `GET /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/aliases`: List aliases (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-aliases/#op-get-api-v1-orgs-org-slug-portal-smtp-relay-service-id-aliases)
- `POST /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/aliases`: Create alias (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-aliases/#op-post-api-v1-orgs-org-slug-portal-smtp-relay-service-id-aliases)
- `DELETE /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/aliases/{account_id}`: Delete alias (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-aliases/#op-delete-api-v1-orgs-org-slug-portal-smtp-relay-service-id-aliases-account-id)
- `GET /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/api-keys`: List API keys (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-api-keys/#op-get-api-v1-orgs-org-slug-portal-smtp-relay-service-id-api-keys)
- `POST /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/api-keys`: Create API key (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-api-keys/#op-post-api-v1-orgs-org-slug-portal-smtp-relay-service-id-api-keys)
- `DELETE /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/api-keys/{key_id}`: Revoke API key (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-api-keys/#op-delete-api-v1-orgs-org-slug-portal-smtp-relay-service-id-api-keys-key-id)
- `PATCH /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/category`: Set category (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay/#op-patch-api-v1-orgs-org-slug-portal-smtp-relay-service-id-category)
- `GET /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/credentials`: List credentials (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-credentials/#op-get-api-v1-orgs-org-slug-portal-smtp-relay-service-id-credentials)
- `POST /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/credentials`: Create credential (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-credentials/#op-post-api-v1-orgs-org-slug-portal-smtp-relay-service-id-credentials)
- `DELETE /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/credentials/{account_id}`: Delete credential (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-credentials/#op-delete-api-v1-orgs-org-slug-portal-smtp-relay-service-id-credentials-account-id)
- `PATCH /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/credentials/{account_id}/enabled`: Credential enabled (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-credentials/#op-patch-api-v1-orgs-org-slug-portal-smtp-relay-service-id-credentials-account-id-e)
- `POST /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/credentials/{account_id}/rotate`: Rotate credential (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-credentials/#op-post-api-v1-orgs-org-slug-portal-smtp-relay-service-id-credentials-account-id-ro)
- `GET /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/domains`: List domains (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-domains/#op-get-api-v1-orgs-org-slug-portal-smtp-relay-service-id-domains)
- `POST /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/domains`: Add domain (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-domains/#op-post-api-v1-orgs-org-slug-portal-smtp-relay-service-id-domains)
- `DELETE /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/domains/{domain_id}`: Remove domain (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-domains/#op-delete-api-v1-orgs-org-slug-portal-smtp-relay-service-id-domains-domain-id)
- `PATCH /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/domains/{domain_id}/dmarc`: Set DMARC (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-domains/#op-patch-api-v1-orgs-org-slug-portal-smtp-relay-service-id-domains-domain-id-dmarc)
- `GET /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/domains/{domain_id}/records`: Domain records (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-domains/#op-get-api-v1-orgs-org-slug-portal-smtp-relay-service-id-domains-domain-id-records)
- `POST /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/domains/{domain_id}/verify`: Verify domain (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-domains/#op-post-api-v1-orgs-org-slug-portal-smtp-relay-service-id-domains-domain-id-verify)
- `GET /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/events`: List events (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay/#op-get-api-v1-orgs-org-slug-portal-smtp-relay-service-id-events)
- `POST /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/limits/increase-request`: Request limit increase (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay/#op-post-api-v1-orgs-org-slug-portal-smtp-relay-service-id-limits-increase-request)
- `GET /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/mailboxes`: List mailboxes (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-mailboxes/#op-get-api-v1-orgs-org-slug-portal-smtp-relay-service-id-mailboxes)
- `POST /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/mailboxes`: Create mailbox (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-mailboxes/#op-post-api-v1-orgs-org-slug-portal-smtp-relay-service-id-mailboxes)
- `DELETE /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/mailboxes/{account_id}`: Delete mailbox (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-mailboxes/#op-delete-api-v1-orgs-org-slug-portal-smtp-relay-service-id-mailboxes-account-id)
- `GET /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/mailboxes/{account_id}/app-passwords`: Mailbox app passwords (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-mailboxes/#op-get-api-v1-orgs-org-slug-portal-smtp-relay-service-id-mailboxes-account-id-app-p)
- `POST /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/mailboxes/{account_id}/app-passwords`: Mailbox app password create (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-mailboxes/#op-post-api-v1-orgs-org-slug-portal-smtp-relay-service-id-mailboxes-account-id-app)
- `DELETE /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/mailboxes/{account_id}/app-passwords/{credential_id}`: Mailbox app password delete (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-mailboxes/#op-delete-api-v1-orgs-org-slug-portal-smtp-relay-service-id-mailboxes-account-id-ap)
- `PATCH /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/mailboxes/{account_id}/enabled`: Mailbox enabled (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-mailboxes/#op-patch-api-v1-orgs-org-slug-portal-smtp-relay-service-id-mailboxes-account-id-ena)
- `GET /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/mailboxes/{account_id}/imports`: Mailbox imports (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-mailboxes/#op-get-api-v1-orgs-org-slug-portal-smtp-relay-service-id-mailboxes-account-id-impor)
- `POST /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/mailboxes/{account_id}/imports`: Mailbox import start (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-mailboxes/#op-post-api-v1-orgs-org-slug-portal-smtp-relay-service-id-mailboxes-account-id-impo)
- `POST /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/mailboxes/{account_id}/imports/oauth`: Mailbox import sign in (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-mailboxes/#op-post-api-v1-orgs-org-slug-portal-smtp-relay-service-id-mailboxes-account-id-impo)
- `POST /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/mailboxes/{account_id}/imports/upload`: Mailbox import upload (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-mailboxes/#op-post-api-v1-orgs-org-slug-portal-smtp-relay-service-id-mailboxes-account-id-impo)
- `POST /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/mailboxes/{account_id}/imports/{import_id}/{action}`: Mailbox import steer (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-mailboxes/#op-post-api-v1-orgs-org-slug-portal-smtp-relay-service-id-mailboxes-account-id-impo)
- `POST /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/mailboxes/{account_id}/password`: Mailbox password (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-mailboxes/#op-post-api-v1-orgs-org-slug-portal-smtp-relay-service-id-mailboxes-account-id-pass)
- `PATCH /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/mailboxes/{account_id}/quota`: Mailbox quota (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-mailboxes/#op-patch-api-v1-orgs-org-slug-portal-smtp-relay-service-id-mailboxes-account-id-quo)
- `GET /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/mailboxes/{account_id}/sessions`: Mailbox sessions (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-mailboxes/#op-get-api-v1-orgs-org-slug-portal-smtp-relay-service-id-mailboxes-account-id-sessi)
- `DELETE /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/mailboxes/{account_id}/sessions`: Mailbox sessions end (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-mailboxes/#op-delete-api-v1-orgs-org-slug-portal-smtp-relay-service-id-mailboxes-account-id-se)
- `DELETE /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/mailboxes/{account_id}/sessions/{session_id}`: Mailbox session end (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-mailboxes/#op-delete-api-v1-orgs-org-slug-portal-smtp-relay-service-id-mailboxes-account-id-se)
- `POST /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/mailboxes/{account_id}/totp`: Mailbox totp enable (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-mailboxes/#op-post-api-v1-orgs-org-slug-portal-smtp-relay-service-id-mailboxes-account-id-totp)
- `DELETE /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/mailboxes/{account_id}/totp`: Mailbox totp disable (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-mailboxes/#op-delete-api-v1-orgs-org-slug-portal-smtp-relay-service-id-mailboxes-account-id-to)
- `POST /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/messages`: Send message (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay/#op-post-api-v1-orgs-org-slug-portal-smtp-relay-service-id-messages)
- `GET /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/reputation`: Reputation report (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay/#op-get-api-v1-orgs-org-slug-portal-smtp-relay-service-id-reputation)
- `GET /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/suppressions`: List suppressions (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-suppressions/#op-get-api-v1-orgs-org-slug-portal-smtp-relay-service-id-suppressions)
- `POST /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/suppressions`: Add suppression (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-suppressions/#op-post-api-v1-orgs-org-slug-portal-smtp-relay-service-id-suppressions)
- `DELETE /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/suppressions/{suppression_id}`: Remove suppression (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-suppressions/#op-delete-api-v1-orgs-org-slug-portal-smtp-relay-service-id-suppressions-suppressio)
- `GET /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/usage`: Usage report (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay/#op-get-api-v1-orgs-org-slug-portal-smtp-relay-service-id-usage)
- `GET /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/webhooks`: List webhooks (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-webhooks/#op-get-api-v1-orgs-org-slug-portal-smtp-relay-service-id-webhooks)
- `POST /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/webhooks`: Create webhook (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-webhooks/#op-post-api-v1-orgs-org-slug-portal-smtp-relay-service-id-webhooks)
- `DELETE /api/v1/orgs/{org_slug}/portal/smtp-relay/{service_id}/webhooks/{webhook_id}`: Delete webhook (https://docs.coritan.com/api/reference/organizations/customer-portal/smtp-relay-webhooks/#op-delete-api-v1-orgs-org-slug-portal-smtp-relay-service-id-webhooks-webhook-id)
