# Sending reputation and deliverability

> How we measure your relay's bounce and complaint rates, when sending pauses, and how to read the Deliverability card.

Source: https://www.coritan.com/docs/mail/smtp-relay/deliverability/

In the dashboard:

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

Mail providers decide whether your mail reaches the inbox largely from two numbers: how much of it bounces, and how often recipients report it as spam. We measure both for every SMTP Relay and Mail Hosting service. A service whose rates get too high has its sending paused. On an SMTP Relay service, the **Deliverability** card on the **Overview** tab shows the rates, where sending pauses and a health check of your setup.

## How we measure

- The *bounce rate* is the share of sent messages that ended as `bounced` [events](/docs/mail/smtp-relay/events/#event-categories): not delivered, and not tried again.
- The *complaint rate* is the share that drew a `complaint` event: the recipient marked the message as spam, or a mailbox provider reported it as fraud or as failing authentication.
- Both rates use the messages we accepted from the service over the last seven days. Every credential, API key and domain on the service counts together.

We work out the rates of every active service every 30 minutes. The counts behind them are added up once an hour, so they trail your sending by up to about an hour. When the seven days hold too few messages, we do not judge the rates at all.

## When sending pauses

| Rate | Sending paused from |
| --- | --- |
| Bounce rate | 10% |
| Complaint rate | 0.5% |

Reaching a line is enough: a bounce rate of exactly 10% pauses sending. The **Deliverability** card shows the line under each rate, such as `Pauses at 10%`.

### Under review

Our staff may review a service whose rates rise before they reach a pause line. Sending carries on. Above the tabs, every page of the service shows the **Under review** alert with the figures behind it, such as `flagged: 6.12% bounces, 0.04% complaints over 7d`.

While the review is open, a relay's hourly limit does not rise, and the next daily check can set it back to the starting limit.

The alert stays until our staff close the review, even after the rates fall. Once the rates are back to normal, the alert keeps its title and says `We are reviewing your delivery rates. Sending continues while the review is open.`

### Sending paused

When either rate reaches its pause line, we pause the service's sending:

- On an SMTP Relay service, no SMTP credential can sign in, and the send API answers `400` with `Sending is paused on this service; contact support`. A message that still reaches the relay over SMTP is refused with `550 5.7.1 Sending is paused for this account; contact support`.
- On a Mail Hosting service, its mailboxes cannot sign in, send or receive mail.
- Above the tabs, the **Sending is paused** alert shows the figures, such as `auto-frozen: 11.4% bounces, 0.08% complaints over 7d`. The **Status** on the **Service** card reads **Sending paused**, and on a relay the **Send** tab shows the alert too.
- On a relay, the next daily check can set the hourly limit back to the starting limit.

We do not email you when a service goes under review or is paused. The alerts on the service's pages are where you see it.

Only our staff lift a pause. Fix the cause first ([Bring the rates down](#bring-the-rates-down)), then [contact support](/docs/support/conversations/) and say what you changed. The check still looks at the last seven days: if the rates in that window are still at a pause line when our staff lift the pause, the next check pauses sending again.

Our staff can also pause a service by hand. The alert has the same title, and without figures it says `Bounce or complaint rates crossed the platform threshold. Clean your lists, then contact support to resume.`

Separately from these rates, we turn off a single mailbox that suddenly sends far more than it usually does. See [Manage mailboxes](/docs/mail/mail-hosting/mailboxes/#troubleshooting).

## Bring the rates down

- Send only to people who asked for your mail. Bought lists and old lists bounce and draw complaints.
- Confirm new addresses when people sign up, such as with a confirmation email, so typing mistakes never reach your list.
- Send newsletters and campaigns as `marketing`. Recipients then get an unsubscribe button in their mail app and can use it instead of reporting spam. See [Transactional and marketing mail](/docs/mail/smtp-relay/message-categories/).
- Leave addresses on the [suppression list](/docs/mail/smtp-relay/suppressions/) unless you know the problem is fixed. Each one bounced or complained before.
- Follow `bounced` and `complaint` events on the **Events** tab or with [webhooks](/docs/mail/smtp-relay/webhooks/), and take those addresses off your own lists too.

## Where your mail leaves from

We manage the shared addresses your mail leaves from and watch their reputation, so you have nothing to set up for them. If you want addresses that only your relay sends from, a [dedicated address](/docs/mail/smtp-relay/sending-limits/#dedicated-sending-addresses) is an add-on.

## The Deliverability card

On an SMTP Relay service, go to **Email**, open the relay, then the **Overview** tab. Mail Hosting services have no card, and their figures are in the [API](#with-the-api).

The card covers the last seven days, as its description says. It starts with a verdict on the rates as they are now:

| `verdict` | What the card says |
| --- | --- |
| `ok` | `Your bounce and complaint rates are healthy.` |
| `review` | `Your bounce or complaint rate is high. Clean your lists before sending pauses.` |
| `freeze` | `Sending is paused because your bounce or complaint rate got too high. Clean your lists, then contact support.` |
| `insufficient` | `Too few messages in the last 7 days to judge.` |

When the service is under review or paused, the figures behind it follow the verdict in brackets. The verdict follows the current rates, while the alerts above the tabs stay until our staff close them. So the card can call the rates healthy while the **Under review** alert is still there.

Four figures follow:

**Inbox health**
: A score out of 100, with a grade. See [The inbox health score](#the-inbox-health-score).

**Sent**
: Messages accepted in the window.

**Bounce rate**
: The bounce rate, with the pause line under it, such as `Pauses at 10%`. The rate turns to the warning colour at the pause line.

**Complaints**
: The complaint rate, with its pause line.

Then comes a list of checks, each with a short detail, such as **Domains** · `1 verified`. At the bottom, **Default message category** sets the category of messages that do not choose one ([Transactional and marketing mail](/docs/mail/smtp-relay/message-categories/#set-the-default-category)).

When the report cannot load, the card says `Reputation data is not available right now.`

### The checks

Every check is about your own setup and sending.

| Check | Weight | Passes when | Warns or waits when | Fails when |
| --- | --- | --- | --- | --- |
| **Domains** | 25 | Every domain is verified. | Some domains are still pending. | No domain is added, or none is verified. |
| **SPF and DKIM** | 20 | Both records pass on every verified domain. | No domain is verified yet. | A verified domain is missing either record. |
| **Bounces and complaints** | 15 | Bounces are under 2% and complaints under 0.1%. | Bounces reach 2% or complaints 0.1%, or the window holds fewer than 50 messages. | Bounces reach 5% or complaints 0.3%. |
| **DMARC** | 10 | Every verified domain has its DMARC record, and at least one is at `p=quarantine` or `p=reject`. | Every verified domain is at `p=none`, or no domain is verified yet. | A verified domain's DMARC record is missing or out of date. |

**Bounces and complaints** uses stricter lines than the pause lines: 2% bounces and 0.1% complaints are what Gmail asks of senders.

Three more checks carry no weight:

**TLS**
: Shown when we have recent results, and says whether your mail reached the large providers over an encrypted connection.

**Sending**
: Shown only while sending is paused, as `sending is paused`.

**Review**
: Shown only while the service is under review, as `our reputation checks flagged this for review`.

### The inbox health score

Each check with a weight earns all of it when it passes, half when it warns or waits for data, and none when it fails. **Inbox health** is the weight earned out of the weight of the checks shown, as a number out of 100. The score counts those checks alone. While sending is paused, or while **SPF and DKIM** fails, the score is at most 40.

| Score | Grade |
| --- | --- |
| 90–100 | Excellent |
| 75–89 | Good |
| 50–74 | Fair |
| 0–49 | Poor |

## DMARC and TLS reports

Mail providers send *aggregate reports* about the mail they receive from your domains: how many messages, from which servers, and whether they passed SPF, DKIM and DMARC. They send them to the `rua=` address in your DMARC record, when the record the dashboard shows has one. The reports drive the [DMARC stage ramp](/docs/mail/dmarc/#when-the-stage-moves-up).

On a Mail Hosting domain, *TLS reports* describe the mail sent to you: whether other servers could reach yours over an encrypted connection. They go to the address in the `_smtp._tls` record. [Mail DNS records](/docs/mail/dns-records/) lists both records.

The dashboard does not list the reports. The API returns the latest ones on your own domains with the reputation report below.

## With the API

[`GET /client/smtp-relay/{service_id}/reputation`](/docs/api/reference/client/mail/smtp-relay/#op-get-api-v1-client-smtp-relay-service-id-reputation) returns everything the card shows, and the reports:

```bash
curl "https://api.coritan.com/api/v1/client/smtp-relay/4812/reputation?limit=5" \
  -H "Authorization: Bearer $CORITAN_TOKEN"
```

`limit` is how many reports to return, newest first: 1–200, and 50 when you leave it out. A value outside that range answers `422`.

```json
{
  "health": {
    "score": 93,
    "grade": "excellent",
    "items": [
      {"key": "domains", "status": "pass", "weight": 25, "detail": "1 verified"},
      {"key": "spf_dkim", "status": "pass", "weight": 20, "detail": "SPF and DKIM published on every verified domain"},
      {"key": "dmarc", "status": "warn", "weight": 10, "detail": "p=none: monitoring only, tightened automatically after two clean weeks of reports"},
      {"key": "rates", "status": "pass", "weight": 15, "detail": "bounce 1.2%, complaints 0.048%"}
    ]
  },
  "default_category": "transactional",
  "window_days": 7,
  "sent": 8412,
  "bounced": 101,
  "complaints": 4,
  "bounce_pct": 1.2,
  "complaint_pct": 0.048,
  "verdict": "ok",
  "thresholds": {
    "bounce_freeze_pct": 10.0,
    "complaint_freeze_pct": 0.5
  },
  "sending_frozen": false,
  "review_flag": false,
  "note": null,
  "domains": [
    {
      "domain": "example.com",
      "status": "verified",
      "checks": {"ownership": true, "mx": false, "spf": true, "dkim": true, "dmarc": true},
      "dmarc_policy": "none",
      "mta_sts_mode": "testing"
    }
  ],
  "reports": [
    {
      "id": 90211,
      "domain": "example.com",
      "type": "dmarc",
      "reporter": "google.com",
      "range_begin": "2026-09-15T00:00:00",
      "range_end": "2026-09-15T23:59:59",
      "total": 1180,
      "passed": 1176,
      "failed": 4,
      "summary": null,
      "received_at": "2026-09-16T06:12:44"
    }
  ]
}
```

`health`
: The inbox health score: `score` (0–100), `grade` (`excellent`, `good`, `fair` or `poor`) and `items`, one for each check. Each item has a `key`, a `status` (`pass`, `warn`, `fail` or `info`), its `weight` in the score and a `detail`. The score counts these items alone.

`health.items[].key`
: `domains`, `spf_dkim`, `dmarc`, `rates` (**Bounces and complaints**), `tls`, `frozen` (**Sending**) and `review`. A Mail Hosting service also gets `mx`, with a weight of 5: it passes when every verified domain receives its mail with us, and warns otherwise.

`default_category`
: `transactional` or `marketing`.

`window_days`
: The length of the window, in days.

`sent`, `bounced`, `complaints`
: Messages accepted, bounces and complaints in the window.

`bounce_pct`, `complaint_pct`
: The rates in percent: `bounce_pct` to two decimal places, `complaint_pct` to three. Both are `0.0` when nothing was sent.

`verdict`
: `ok`, `review` or `freeze`, or `insufficient` when the window holds too few messages to judge.

`thresholds`
: The pause lines in percent: `bounce_freeze_pct` and `complaint_freeze_pct`.

`sending_frozen`, `review_flag`
: Whether sending is paused, and whether the service is under review.

`note`
: The figures behind the review or the pause, such as `flagged: 6.12% bounces, 0.04% complaints over 7d`, or `null`.

`domains`
: Each domain with its `status`, the results of its `checks`, its DMARC stage in `dmarc_policy`, and `mta_sts_mode`, the mode of the MTA-STS policy we serve for it. [Mail DNS records](/docs/mail/dns-records/#what-each-check-looks-for) explains the checks.

`reports`
: The latest DMARC and TLS reports on your own domains, newest first, up to `limit`.

Each report has:

`type`
: `dmarc` for a DMARC aggregate report, or `tls` for a TLS report.

`domain`, `reporter`
: The domain the report is about, and the organisation that sent it.

`range_begin`, `range_end`
: The period the report covers, or `null` when it does not say.

`total`, `passed`, `failed`
: The messages or connections the report covers, and how many passed and failed.

`summary`
: Further detail we read from the report, or `null`.

`received_at`
: When the report reached us.

The service summary, [`GET /client/smtp-relay/{service_id}`](/docs/api/reference/client/mail/smtp-relay/), carries the results of the last check: `bounce_rate_pct` and `complaint_rate_pct` to two decimal places, `reputation_checked_at`, `reputation_note`, `sending_frozen` and `review_flag`.

The same report is under [`GET /client/mail/{service_id}/reputation`](/docs/api/reference/client/mail/mail/#op-get-api-v1-client-mail-service-id-reputation), which answers for both products. On a Mail Hosting service, its `reports` can also hold `tls` reports.

## API

- `GET /api/v1/client/smtp-relay/{service_id}/reputation`: Reputation report (https://www.coritan.com/docs/api/reference/client/mail/smtp-relay/#op-get-api-v1-client-smtp-relay-service-id-reputation)
- `GET /api/v1/client/mail/{service_id}/reputation`: Reputation report (https://www.coritan.com/docs/api/reference/client/mail/mail/#op-get-api-v1-client-mail-service-id-reputation)
