# Set up the services your plan includes

> Create the Mail Hosting, SMTP Relay and Object Storage services your account plan includes at no charge, and see how they follow your plan.

Source: https://www.coritan.com/docs/billing/included-services/

Every account plan, Free included, comes with three services at no charge: a Mail Hosting service, an SMTP Relay service and an Object Storage service, each sized to the plan. You set up each one once, when you need it. When your plan changes, Coritan resizes the service to match, with no invoice. You can set them up through the API before [account plans open on your account](/docs/billing/account-plans/#plans-open-in-stages), and they have the Free plan's sizes until then.

## Before you begin

- Account plans are open on your account, for the dashboard's buttons. Before they open, set the services up through the API ([With the API](#with-the-api)).
- Each account can hold one free service of each kind. If you already have the free SMTP Relay plan, it is your included SMTP Relay, and it follows your plan from now on.

[What each plan includes](/docs/billing/account-plans/#what-each-plan-includes) lists each service's size on each plan.

## Set up a service

In the dashboard, each product offers the service your plan includes until you have it:

Mail Hosting
: In **Email**, select **Set up free email…** ([Set up the email your plan includes](/docs/mail/order-a-mail-service/#set-up-the-email-your-plan-includes)).

SMTP Relay
: In **Email**, select **Set up free SMTP Relay…** ([Set up the email your plan includes](/docs/mail/order-a-mail-service/#set-up-the-email-your-plan-includes)).

Object Storage
: In **Object Storage**, select **Create free storage** ([Create the storage your plan includes](/docs/object-storage/order-object-storage/#create-the-storage-your-plan-includes)).

A new account's first page, **What do you want to do first?**, offers the email and the storage too ([Choose what to do first](/docs/get-started/choose-what-to-do-first/)). Each dialog asks for the verification check while it is on, and opens the new service when you confirm.

## Result

Coritan sets the service up as it does any order, and it renews at $0. Its header has an **Included in your plan** badge. Once it is active, use it like any other service of its kind: [add mailboxes](/docs/mail/mail-hosting/mailboxes/), [add a sending domain](/docs/mail/smtp-relay/add-a-sending-domain/) or [create buckets](/docs/object-storage/buckets/).

## When your plan changes

When your account moves to another plan, starts or ends a trial, or has a plan suspended or restored, Coritan resizes each included service to the new plan's size. The **Activity** table on the service's **Billing** tab lists each resize, such as `Resized to the Pro plan's allowance.`

When the new size is smaller than what a Mail Hosting or SMTP Relay service already uses, Coritan keeps the service at what it uses, and the entry says so: `Resized to the Free plan's allowance, and held at 7 mailboxes, which the service already uses.` You cannot add more until the service is back within the plan. Coritan looks again each day and lowers the service as you remove things. Object Storage moves to the new allowance and keeps every file. Storage above the allowance counts as it does on any Object Storage service ([When your buckets hold more than the allowance](/docs/object-storage/usage-and-billing/#when-your-buckets-hold-more-than-the-allowance)).

## Troubleshooting

In the dashboard, the dialog shows the reason under its title, such as **Could not set up the email** or **Could not create the storage**. Over the API, it is the answer's `detail`, with the status in the first column.

| Status | `detail` | Cause |
| --- | --- | --- |
| `400` | `Included services follow your account plan. Change your plan instead.` | You tried to change an included service's plan. [Choose another account plan](/docs/billing/change-account-plan/) instead. |
| `403` | `{"error": "turnstile_failed", ...}` | The verification check is on, and `turnstile_token` is missing or did not pass. |
| `404` | `Included services are mail, sending and storage.` | `kind` is not `mail`, `sending` or `storage`. |
| `409` | `{"error": "free_limit_reached", ...}` | The account has another free service of that kind. Cancel it, then try again. |
| `422` | `{"errors": ["location_id is required and must be an integer"]}` | An Object Storage request without a `location_id`. `errors` lists every value the service cannot take. |
| `429` | `{"error": "rate_limited", ...}` | The account created free services too often in a short time. Wait the number of seconds in `retry_after_seconds`, then try again. |
| `503` | `Mail Hosting is not available right now. Try again later.` | The service cannot be set up at the moment. |

## Related

- [How account plans work](/docs/billing/account-plans/)
- [The Free plan](/docs/billing/free-plan/)
- [Mail Hosting](/docs/mail/mail-hosting/)
- [How Object Storage is billed](/docs/object-storage/usage-and-billing/)

## With the API

- You need an access token for the account ([Access and refresh tokens](/docs/api/authentication/#access-and-refresh-tokens)).
- For Object Storage, choose the region your buckets live in. [`GET /client/object-storage/regions`](/docs/api/reference/client/object-storage/#op-get-api-v1-client-object-storage-regions) lists them, and each region's `id` is a `location_id`.
- While the verification check is on, each request needs a `turnstile_token`, which only the check on a web page produces ([The verification check](/docs/api/authentication/#the-verification-check)).

Send [`POST /account/included/{kind}`](/docs/api/reference/client/account-plan/#op-post-api-v1-account-included-kind), where `kind` is `mail`, `sending` or `storage`.

- Mail Hosting (`mail`) and SMTP Relay (`sending`) take an optional `domain`, the first domain to use. You can add it later.
- Object Storage (`storage`) needs a `location_id`, and takes an optional `bucket_name` for a first bucket, with or without your account's prefix ([Bucket names](/docs/object-storage/buckets/#bucket-names)).

```bash
curl -X POST https://api.coritan.com/api/v1/account/included/mail \
  -H "Authorization: Bearer $CORITAN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domain": "example.com", "turnstile_token": "the-widget-answer"}'
```

```bash
curl -X POST https://api.coritan.com/api/v1/account/included/storage \
  -H "Authorization: Bearer $CORITAN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"location_id": 1, "bucket_name": "assets", "turnstile_token": "the-widget-answer"}'
```

The answer is the service, as [`GET /services/{service_ref}`](/docs/api/reference/client/services/#op-get-api-v1-services-service-ref) returns it: `201` when this request created it, and `200` with the service you already have. Once its `status` is `active`, it is ready. This answer is shortened:

```json
{
  "id": 5311,
  "product_name": "Mail Free",
  "product_slug": "mail-free",
  "module_name": "mail",
  "status": "pending",
  "billing_cycle": "monthly",
  "amount": 0.0,
  "hostname": "example.com",
  "config": {
    "domain": "example.com",
    "mailboxes": 5,
    "storage_gb_per_mailbox": 1,
    "domains": 1,
    "included": {
      "plan": "free",
      "tier": "free",
      "quotas": {"mailboxes": 5, "storage_gb_per_mailbox": 1, "domains": 1},
      "applied": {"mailboxes": 5, "storage_gb_per_mailbox": 1, "domains": 1},
      "state": "applied",
      "revision": 1,
      "updated_at": "2026-09-26T09:30:00+00:00"
    }
  }
}
```

`config.included` in the service records what Coritan did:

`plan`, `tier`
: The plan the service is sized for, and the size it uses: `free`, `pro` or `business`.

`quotas`, `applied`
: The sizes the plan gives, and the sizes the service has now.

`state`
: `applied` when the service has its sizes, `pending` while Coritan resizes it, and `over_limit` when it keeps more than the plan gives.

`held`
: When `state` is `over_limit`, what the service keeps above the plan because it already uses it, such as `{"mailboxes": 7}`.

`revision`
: A number that grows with each change.

## API

- `POST /api/v1/account/included/{kind}`: Set up the mail, SMTP Relay or Object Storage your plan includes (https://www.coritan.com/docs/api/reference/client/account-plan/#op-post-api-v1-account-included-kind)
