Skip to content
New to this? Read the Deliverability guide.

Get the email deliverability report

GET
/v2/reports/email-deliverability
curl --request GET \
--url https://api.connect.ms/v2/reports/email-deliverability \
--header 'Authorization: Bearer <token>'

Delivery, bounce, complaint and open counts for your email, by the date each event happened: in total, per kind and per day. Defaults to the last 7 days; the range can be at most 30 days.

since
string format: date
nullable

The first day to include (ISO 8601 date, UTC). Defaults to six days before until, so the last 7 days.

until
string format: date
nullable

The last day to include (ISO 8601 date, UTC). Defaults to today.

Connect-Version
string

The API version to use, for example 2026-10-01. Defaults to the version set on your API key.

The report.

Media typeapplication/json

Email deliverability over a range of dates.

object
period
required
One of:

An inclusive range of dates.

object
from
required

The first day of the range (ISO 8601 date).

string format: date
to
required

The last day of the range (ISO 8601 date).

string format: date
total
required
One of:

Deliverability counts and rates. A rate is null when there is nothing to divide by.

object
sent
required

Emails handed over for delivery.

integer format: int32
delivered
required

Emails accepted by the recipient’s mail server.

integer format: int32
hardBounced
required

Emails permanently rejected: the address does not exist or refuses mail.

integer format: int32
softBounced
required

Temporary rejections by the recipient’s mail server.

integer format: int32
complaints
required

Emails the recipient reported as spam.

integer format: int32
suppressed
required

Emails not sent because the address is on the suppression list.

integer format: int32
unsubscribed
required

Unsubscribes recorded.

integer format: int32
opened
required

Emails opened at least once.

integer format: int32
deliveryRate

Delivered divided by delivered plus hard bounced, between 0 and 1. Null when neither occurred.

number format: double
nullable
bounceRate

Hard bounces divided by emails sent in the period. Null when nothing was sent.

number format: double
nullable
complaintRate

Complaints divided by emails delivered in the period. Null when nothing was delivered.

number format: double
nullable
byKind
required

Totals per kind of email. Every kind is listed, even with no activity.

Array<object>

Deliverability for one kind of email.

object
kind
required
One of:

The kind of email: transactional (service messages, the default), marketing (promotional, subject to marketing opt-outs) or authentication (one-time codes).

string
Allowed values: transactional marketing authentication
stats
required
One of:

Deliverability counts and rates. A rate is null when there is nothing to divide by.

object
sent
required

Emails handed over for delivery.

integer format: int32
delivered
required

Emails accepted by the recipient’s mail server.

integer format: int32
hardBounced
required

Emails permanently rejected: the address does not exist or refuses mail.

integer format: int32
softBounced
required

Temporary rejections by the recipient’s mail server.

integer format: int32
complaints
required

Emails the recipient reported as spam.

integer format: int32
suppressed
required

Emails not sent because the address is on the suppression list.

integer format: int32
unsubscribed
required

Unsubscribes recorded.

integer format: int32
opened
required

Emails opened at least once.

integer format: int32
deliveryRate

Delivered divided by delivered plus hard bounced, between 0 and 1. Null when neither occurred.

number format: double
nullable
bounceRate

Hard bounces divided by emails sent in the period. Null when nothing was sent.

number format: double
nullable
complaintRate

Complaints divided by emails delivered in the period. Null when nothing was delivered.

number format: double
nullable
daily
required

Totals per day and kind, oldest first. Only days and kinds with activity are listed.

Array<object>

Deliverability for one kind of email on one day.

object
date
required

The day (ISO 8601 date).

string format: date
kind
required
One of:

The kind of email: transactional (service messages, the default), marketing (promotional, subject to marketing opt-outs) or authentication (one-time codes).

string
Allowed values: transactional marketing authentication
stats
required
One of:

Deliverability counts and rates. A rate is null when there is nothing to divide by.

object
sent
required

Emails handed over for delivery.

integer format: int32
delivered
required

Emails accepted by the recipient’s mail server.

integer format: int32
hardBounced
required

Emails permanently rejected: the address does not exist or refuses mail.

integer format: int32
softBounced
required

Temporary rejections by the recipient’s mail server.

integer format: int32
complaints
required

Emails the recipient reported as spam.

integer format: int32
suppressed
required

Emails not sent because the address is on the suppression list.

integer format: int32
unsubscribed
required

Unsubscribes recorded.

integer format: int32
opened
required

Emails opened at least once.

integer format: int32
deliveryRate

Delivered divided by delivered plus hard bounced, between 0 and 1. Null when neither occurred.

number format: double
nullable
bounceRate

Hard bounces divided by emails sent in the period. Null when nothing was sent.

number format: double
nullable
complaintRate

Complaints divided by emails delivered in the period. Null when nothing was delivered.

number format: double
nullable

Example

{
"byKind": [
{
"kind": "transactional"
}
],
"daily": [
{
"kind": "transactional"
}
]
}

The request is not valid. The detail field says why, and errors lists any problems by field name.

Media typeapplication/problem+json

Why a request failed, in the RFC 9457 problem details format.

object
type
required

A URI identifying the kind of problem, ending in a code such as validation_failed, not_found, sending_blocked or rate_limited.

string
title
required

A short, fixed summary of the kind of problem.

string
status
required

The HTTP status code of the response.

integer format: int32
detail

What went wrong with this particular request, when there is more to say than the title.

string
nullable
errors

For validation failures, the problems found, keyed by field name (nested fields as template.name, list items as messages[3]).

object
key
additional properties
Array<string>
requestId
required

The id recorded for this error, matching the Request-Id header when one is sent. Quote it when contacting support.

string

Example generated

{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"errors": {
"additionalProperty": [
"example"
]
},
"requestId": "example"
}

The API key or bearer token is missing or not valid, or the request signature could not be verified.

Media typeapplication/problem+json

Why a request failed, in the RFC 9457 problem details format.

object
type
required

A URI identifying the kind of problem, ending in a code such as validation_failed, not_found, sending_blocked or rate_limited.

string
title
required

A short, fixed summary of the kind of problem.

string
status
required

The HTTP status code of the response.

integer format: int32
detail

What went wrong with this particular request, when there is more to say than the title.

string
nullable
errors

For validation failures, the problems found, keyed by field name (nested fields as template.name, list items as messages[3]).

object
key
additional properties
Array<string>
requestId
required

The id recorded for this error, matching the Request-Id header when one is sent. Quote it when contacting support.

string

Example generated

{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"errors": {
"additionalProperty": [
"example"
]
},
"requestId": "example"
}

The caller is not allowed to do this.

Media typeapplication/problem+json

Why a request failed, in the RFC 9457 problem details format.

object
type
required

A URI identifying the kind of problem, ending in a code such as validation_failed, not_found, sending_blocked or rate_limited.

string
title
required

A short, fixed summary of the kind of problem.

string
status
required

The HTTP status code of the response.

integer format: int32
detail

What went wrong with this particular request, when there is more to say than the title.

string
nullable
errors

For validation failures, the problems found, keyed by field name (nested fields as template.name, list items as messages[3]).

object
key
additional properties
Array<string>
requestId
required

The id recorded for this error, matching the Request-Id header when one is sent. Quote it when contacting support.

string

Example generated

{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"errors": {
"additionalProperty": [
"example"
]
},
"requestId": "example"
}

The service is temporarily unavailable. Retry after the Retry-After header.

Media typeapplication/problem+json

Why a request failed, in the RFC 9457 problem details format.

object
type
required

A URI identifying the kind of problem, ending in a code such as validation_failed, not_found, sending_blocked or rate_limited.

string
title
required

A short, fixed summary of the kind of problem.

string
status
required

The HTTP status code of the response.

integer format: int32
detail

What went wrong with this particular request, when there is more to say than the title.

string
nullable
errors

For validation failures, the problems found, keyed by field name (nested fields as template.name, list items as messages[3]).

object
key
additional properties
Array<string>
requestId
required

The id recorded for this error, matching the Request-Id header when one is sent. Quote it when contacting support.

string

Example generated

{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"errors": {
"additionalProperty": [
"example"
]
},
"requestId": "example"
}