# Forward addresses with aliases

> Create an alias that delivers to one or more mailboxes, or a catch-all that takes every unknown address on a domain.

Source: https://www.coritan.com/docs/mail/mail-hosting/aliases/

In the dashboard:

- /dashboard/mail/…/aliases: https://www.coritan.com/dashboard/mail

An *alias* is an address with no storage of its own that delivers its mail to mailboxes on the same service. Use one for a role address such as `sales@example.com`, or for a *catch-all* that takes the mail sent to every address on a domain that has no mailbox or alias. Aliases do not count against the plan's mailboxes.

An alias takes one of three forms, decided by what you enter:

| You enter | The alias |
| --- | --- |
| A name and one mailbox | Delivers to that mailbox. |
| A name and several mailboxes | Delivers a copy to each of them, up to 50. |
| `*` and one mailbox | Is the domain's catch-all. A domain can have one. |

An alias delivers only to mailboxes on the same Mail Hosting service. To send a mailbox's mail on to an address somewhere else, its user sets up forwarding in webmail; see [Forward your mail to another address](/docs/mail/webmail/forwarding/).

## Before you begin

- A verified domain on the service. See [Add a domain to Mail Hosting](/docs/mail/mail-hosting/add-a-domain/).
- The mailboxes the alias delivers to. See [Create and manage mailboxes](/docs/mail/mail-hosting/mailboxes/).

## Create an alias

1. In the dashboard, go to [**Email**](https://www.coritan.com/dashboard/mail), open the Mail Hosting service, then the **Aliases** tab.
2. Select **Create alias…**.
3. In **Alias**, enter the part before the @, such as `sales`. The hint under the field shows the full address.
4. In **Domain**, choose the domain. Only verified domains are listed.
5. In **Delivers to**, enter a mailbox's address and press <kbd>Enter</kbd>, or select it under **Mailboxes here**. Repeat for each mailbox.
6. Select **Create alias**.

The alias appears in the list with its **Delivers to** addresses and the date it was **Created**. Mail sent to it arrives in each of those mailboxes.

## Create a catch-all

A catch-all takes mail for any address on the domain that is not a mailbox or an alias, such as a mistyped name. It also takes spam sent to made-up addresses, so check its mailbox now and then.

1. On the **Aliases** tab, select **Create alias…**.
2. In **Alias**, enter `*`.
3. In **Domain**, choose the domain.
4. In **Delivers to**, add exactly one mailbox.
5. Select **Create alias**.

The alias shows as `*@example.com` with a **Catch-all** badge.

## Change where an alias delivers

An alias cannot be edited. To change its mailboxes, [delete the alias](#delete-an-alias), then [create it again](#create-an-alias) with the new list. Mail sent to the address in between does not arrive, so do both steps together.

## Delete an alias

> [!WARNING]
> Once you delete an alias, mail sent to its address bounces back to the sender, or goes to the domain's catch-all if it has one. The mailboxes it delivered to, and the mail already in them, stay as they are.

1. On the **Aliases** tab, select **Delete…** on the alias's row.
2. Type the alias's address to confirm, then select **Delete alias**.

The alias leaves the list. Deleting a catch-all makes mail to unknown addresses on the domain bounce again.

## Troubleshooting

`Destinations must be mailboxes on this service`
: One of the **Delivers to** addresses is not a mailbox on this service. The hint under the field suggests addresses elsewhere work, but they do not. Remove the address, or [create the mailbox](/docs/mail/mail-hosting/mailboxes/#create-a-mailbox) first. To reach an address elsewhere, use [forwarding in webmail](/docs/mail/webmail/forwarding/).

`A catch-all forwards to exactly one mailbox`
: A `*` alias has more than one address in **Delivers to**. Keep one.

`That address already exists`
: The address is already a mailbox or an alias, or the domain already has a catch-all. Choose another name, or delete the existing alias first.

`Use only letters, digits, dots, dashes, plus signs and underscores, or * for a catch-all.`
: The name has another character, or starts or ends with a dot, dash, plus sign or underscore. Names are at most 64 characters and are stored in lower case.

**Verify a domain first**
: The service has no verified domain yet. [Verify a domain](/docs/mail/mail-hosting/add-a-domain/#verify-the-domain), then create the alias.

`The domain is not registered in the mail engine yet; check the domain again in a minute`
: The domain was verified moments ago and its setup is not finished. Select **Verify now** on the domain's page, then try again.

An alias delivers nothing
: A mailbox it delivered to was deleted. An alias to one mailbox then delivers nowhere, and an alias to several stops delivering to the deleted one. [Delete the alias](#delete-an-alias) and create it again with mailboxes that exist.

## Related

- [Create and manage mailboxes](/docs/mail/mail-hosting/mailboxes/)
- [Forward your mail to another address](/docs/mail/webmail/forwarding/)
- [Add a domain to Mail Hosting](/docs/mail/mail-hosting/add-a-domain/)

## With the API

Create an alias that delivers to two mailboxes:

```bash
curl -X POST https://api.coritan.com/api/v1/client/mail/4812/aliases \
  -H "Authorization: Bearer $CORITAN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domain_id": 311, "local_part": "sales", "targets": ["alex@example.com", "sam@example.com"]}'
```

The body takes these fields:

`domain_id`
: The domain, from `GET /client/mail/{service_id}/domains`. The API accepts a domain as soon as its ownership check has passed, before it is verified.

`local_part`
: The part before the @, 1–64 characters: letters, digits and `.` `_` `+` `-`, starting and ending with a letter or digit. `*` makes the domain's catch-all.

`targets`
: 1–50 addresses of mailboxes on this service. We lower-case them and drop duplicates. A catch-all takes exactly one.

The answer is `201` with the alias:

```json
{
  "id": 5133,
  "tenant_id": 902,
  "domain_id": 311,
  "kind": "alias",
  "address": "sales@example.com",
  "local_part": "sales",
  "display_name": null,
  "quota_bytes": null,
  "targets": ["alex@example.com", "sam@example.com"],
  "status": "active",
  "password_set_at": null,
  "created_at": "2026-09-16T11:04:27.160358+00:00",
  "totp_enabled": false,
  "app_passwords": 0,
  "frozen_reason": null,
  "user_id": null
}
```

The other operations:

| Operation | Answer |
| --- | --- |
| `GET /client/mail/{service_id}/aliases` | `{"items": [...]}`, each alias as above with `locked` set to `null` |
| `DELETE /client/mail/{service_id}/aliases/{account_id}` | `{"ok": true}` |

A refused request answers `400` with one of the messages in [Troubleshooting](#troubleshooting), with `Use letters, digits and . _ + - for the part before @`, with `An alias needs at least one destination address` when no target contains an @, or with `Domain not found on this service`. A body outside the field ranges answers `422`, an `account_id` that is not an alias on the service answers `404` `Not found`, and a failure on our side answers `502` with a message that starts `Mail engine error:`.

On an SMTP Relay service the same paths exist under `/client/smtp-relay/{service_id}/aliases`: `GET` answers `{"items": []}`, `POST` answers `400` `Aliases are only available on Mail Hosting services`, and `DELETE` answers `404` `Not found`.

## API

- `GET /api/v1/client/mail/{service_id}/aliases`: List aliases (https://www.coritan.com/docs/api/reference/client/mail/mail-aliases/#op-get-api-v1-client-mail-service-id-aliases)
- `POST /api/v1/client/mail/{service_id}/aliases`: Create alias (https://www.coritan.com/docs/api/reference/client/mail/mail-aliases/#op-post-api-v1-client-mail-service-id-aliases)
- `DELETE /api/v1/client/mail/{service_id}/aliases/{account_id}`: Delete alias (https://www.coritan.com/docs/api/reference/client/mail/mail-aliases/#op-delete-api-v1-client-mail-service-id-aliases-account-id)
- `GET /api/v1/client/smtp-relay/{service_id}/aliases`: List aliases (https://www.coritan.com/docs/api/reference/client/mail/smtp-relay-aliases/#op-get-api-v1-client-smtp-relay-service-id-aliases)
- `POST /api/v1/client/smtp-relay/{service_id}/aliases`: Create alias (https://www.coritan.com/docs/api/reference/client/mail/smtp-relay-aliases/#op-post-api-v1-client-smtp-relay-service-id-aliases)
- `DELETE /api/v1/client/smtp-relay/{service_id}/aliases/{account_id}`: Delete alias (https://www.coritan.com/docs/api/reference/client/mail/smtp-relay-aliases/#op-delete-api-v1-client-smtp-relay-service-id-aliases-account-id)
