Skip to content
New to this? Read the Send Email guide.

Cancel a scheduled email

DELETE
/v2/email/{id}
curl --request DELETE \
--url https://api.connect.ms/v2/email/example \
--header 'Authorization: Bearer <token>'

Stops a scheduled email that is still waiting to send. An email with no scheduledAt in the future, or one already sent or in a final state, cannot be cancelled.

id
required
string

The id of the email.

Connect-Version
string

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

The email, now cancelled.

Media typeapplication/json

An email. The same shape is returned by every email endpoint and carried by email.* events.

object
id
required

The unique id of the email.

string
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
sender
required

The address the email was sent from.

string
recipient

The address the email was sent to. Null when the caller may not see recipients.

string
nullable
subject

The subject line. Null when the caller may not see content.

string
nullable
content
One of:

What is kept of the body after sending.

object
html

The HTML body. Not kept after sending, so always null.

string
nullable
text

A plain-text excerpt of the body, up to 2000 characters, taken from the text body or extracted from the HTML.

string
nullable
status
required
One of:

The email status: queued (accepted or scheduled, not yet handed over for delivery), sent (handed over, awaiting the outcome), delivered (accepted by the recipient’s mail server), failed (see reason) or cancelled.

string
Allowed values: queued sent delivered failed cancelled
reason
One of:

Why an email failed or did not reach the inbox.

object
category
required
One of:

Why an email failed or did not reach the inbox: hard_bounce (the address does not exist or refuses mail), soft_bounce (a temporary problem at the recipient’s server; the email may still arrive), complaint (the recipient reported it as spam), suppressed (the address is on the suppression list), rejected (refused before sending) or failed (any other failure).

string
Allowed values: hard_bounce soft_bounce complaint suppressed rejected failed
code
required

The specific error code in snake_case, e.g. hard_bounce or spam_complaint.

string
description

Details of the problem, such as what the recipient’s mail server said, or null when nothing useful was recorded.

string
nullable
retryable
required

True when sending the email again later may succeed.

boolean
clientReference

Your own reference for this email, as supplied when it was sent.

string
nullable
clientTag

The grouping tag for usage reporting, as stored when the email was sent (lower case, letters, digits and hyphens).

string
nullable
openCount
required

How many times the email’s tracking image has been loaded. Stays 0 unless trackOpens was set.

integer format: int32
createdAt
required

When (UTC) the email was created.

string format: date-time
scheduledAt

When (UTC) the email was asked to send, or null when no send time was given. Sending limits can delay an email beyond this time.

string format: date-time
nullable
sentAt

When (UTC) the email was handed over for delivery, or null if not yet recorded. Can still be null in the send response moments after handover.

string format: date-time
nullable
deliveredAt

When (UTC) the recipient’s mail server accepted the email, or null if not delivered.

string format: date-time
nullable
openedAt

When (UTC) the email was first opened, or null if never.

string format: date-time
nullable
updatedAt
required

When (UTC) the email last changed.

string format: date-time

Example

{
"kind": "transactional",
"status": "queued",
"reason": {
"category": "hard_bounce"
}
}

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"
}

No email with that id.

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 email is not a scheduled email still waiting to send, so it cannot be cancelled.

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"
}