# Retry and forward emails

> Resend a bounced, failed, suppressed or held email as a new email, or forward a sent email to another recipient, from the dashboard or the API.

Retry sends an email again with the same content after it bounced, failed, was suppressed or was held. Forward sends a copy of an email you already sent to someone else, for example a support colleague or a customer who lost the original. Both create a new email with its own ID and leave the original unchanged.

## Before you begin

- In the API, both endpoints work with **Full Access** and **Sending Only** keys.
- Both are charged as new sends, so you need enough [credits](/docs/billing/credits/).
- Both need the original message contents. Emailit deletes them when your [data retention](/docs/data-retention/) period for message contents ends:

| | Pay as you go | Pro | Business | Custom |
| --- | --- | --- | --- | --- |
| Message contents kept | 7 days | 30 days | 30 days | Flexible |

## Retry an email

An email can be retried when all of these are true:

| Requirement | Details |
| --- | --- |
| Status | `bounced`, `failed`, `suppressed` or `held` |
| Age | Created less than 30 days ago |
| Contents | The message contents haven't been deleted by data retention |
| Sending domain | The original sending domain still exists in the workspace |

A retry creates a **new email** with a new `em_` ID and a new Message-ID. It reuses the original's raw message, recipient, metadata and tracking settings, and goes through the normal delivery pipeline. It costs 1 credit, or 2 credits if the original was a campaign email. A workspace in sandbox mode can only retry emails addressed to workspace members.

Fix the cause before you retry, or the new email ends up with the same status:

- **Suppressed:** remove the address from [suppressions](/docs/suppressions/manage/) first.
- **Held for credits:** top up your [credits](/docs/billing/credits/).
- **Held because the domain was paused:** resolve the [sending health](/docs/deliverability/sending-health/) issue.
- **Held for spam score:** a retry sends the same content and is likely to be held again. Change the content and send a new email instead. See [Spam checks](/docs/deliverability/spam-checks/).
- **Bounced:** check the bounce reason on the email's detail page. A mailbox that doesn't exist will bounce again. If Emailit added the address to your suppressions after the bounce, remove it first.

**Dashboard**

  1. Go to **Email API → Emails** and open the email.
  2. Select **Retry** at the top of the page. The dashboard shows it on held and suppressed emails; retry bounced and failed emails with the API.
  3. Select **Retry** again in the **Retry Email** dialog to confirm. The new email appears in the list with its own ID.

**API**

  Call [Retry an email](/docs/api-reference/emails/retry/) (`POST /emails/{id}/retry`) with the original email's ID. There's no request body.

**cURL**

```bash
curl -X POST https://api.emailit.com/v2/emails/em_33VtK8mRq1xZp7LwN4cY2bHsDfa/retry \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
```

**Node.js**

```javascript
const retried = await emailit.emails.retry('em_33VtK8mRq1xZp7LwN4cY2bHsDfa');
```

**Python**

```python
retried = client.emails.retry("em_33VtK8mRq1xZp7LwN4cY2bHsDfa")
```

**PHP**

```php
$retried = $emailit->emails()->retry('em_33VtK8mRq1xZp7LwN4cY2bHsDfa');
```

```json
{
  "object": "email",
  "id": "em_33Vu2LqPz8aKd4WnX6cR1tYbHgs",
  "original_id": "em_33VtK8mRq1xZp7LwN4cY2bHsDfa",
  "token": "33Vu2LqQ7mFt3XcV9bNp5KsRwEz",
  "message_id": "<33Vu2LqQ7mFt3XcV9bNp5KsRwEz@acme.com>",
  "from": "Acme <orders@acme.com>",
  "to": "ada@example.com",
  "subject": "Receipt for order 1042",
  "status": "accepted",
  "created_at": "2026-10-01T11:15:03.552918Z",
  "message": "Email has been queued for retry"
}
```

| Error | Cause |
| --- | --- |
| `404 Email not found` | The ID doesn't exist in this workspace. |
| `422 Cannot retry email` | The status isn't retryable, the email is older than 30 days, its contents were deleted, or its sending domain was deleted. The `message` says which. |
| `402 Insufficient credits` | The workspace can't pay for the retry. |
| `403 Workspace not verified` | The workspace is in sandbox mode and the recipient isn't a workspace member. |

## Forward an email

Forwarding sends an outgoing email you already sent to a new recipient. Incoming (inbound) emails can't be forwarded.

By default, the forward is a plain resend: the recipient gets the original subject, body and attachments as if the email had been sent to them. Set `include_headers` to send a classic forward instead, with a "Forwarded message" block (original From, Date, Subject and To) and an optional comment above it. The subject then starts with `Fwd:`.

- `to` (string | string[], required): The new recipients, in the same formats as `to` on a send.
- `include_headers` (boolean): Add the forwarded-message block, the optional comment and the `Fwd:` subject prefix.
- `comment` (string): A plain-text note shown above the forwarded message when `include_headers` is `true`. `body` is accepted as an alias.
- `html` (string): An HTML note to use instead of the escaped `comment` in the HTML part, when `include_headers` is `true`.
- `text` (string): A plain-text note that replaces `comment` in the text part, when `include_headers` is `true`.
- `from` (string): Send from a different address. Defaults to the original From address. It must be on a verified sending domain.
- `subject` (string): Replace the subject. Defaults to the original subject, or `Fwd:` plus the original subject with `include_headers`.

A forward is a new send, so it follows the same rules as `POST /emails`: credits per recipient, sending rate limits, the From domain checks and the [`Idempotency-Key`](/docs/email-api/idempotency/) header all apply. Tracking follows the sending domain's settings. The original's custom headers and metadata aren't copied, and attachments are carried over only if their file type is [allowed](/docs/email-api/attachments/#allowed-file-types).

Each workspace can make **3 forward requests per hour**, counting forwards from the dashboard and the API together. Over the limit, the API returns `429` with `too_many_requests`.

**Dashboard**

  1. Go to **Email API → Emails** and open the email.
  2. Select **Forward**.
  3. Enter the recipient in **To**.
  4. Optional: check **Add forwarded headers and a comment** and write a **Comment**.
  5. Select **Forward**. The new email appears in the list with its own ID.

**API**

  Call [Forward an email](/docs/api-reference/emails/forward/) (`POST /emails/{id}/forward`).

**cURL**

```bash
curl https://api.emailit.com/v2/emails/em_33VtK8mRq1xZp7LwN4cY2bHsDfa/forward \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "support@acme.com",
    "include_headers": true,
    "comment": "Customer says this receipt never arrived. Can you check?"
  }'
```

**Node.js**

```javascript
const forwarded = await emailit.emails.forward('em_33VtK8mRq1xZp7LwN4cY2bHsDfa', {
  to: 'support@acme.com',
  include_headers: true,
  comment: 'Customer says this receipt never arrived. Can you check?',
});
```

**Python**

```python
forwarded = client.emails.forward("em_33VtK8mRq1xZp7LwN4cY2bHsDfa", {
    "to": "support@acme.com",
    "include_headers": True,
    "comment": "Customer says this receipt never arrived. Can you check?",
})
```

**PHP**

```php
$forwarded = $emailit->emails()->forward('em_33VtK8mRq1xZp7LwN4cY2bHsDfa', [
    'to' => 'support@acme.com',
    'include_headers' => true,
    'comment' => 'Customer says this receipt never arrived. Can you check?',
]);
```

The response is the same as a [send response](/docs/email-api/send-email/#read-the-response), plus `original_id` and the message "Email has been queued for forwarding". Forwarding fails with `422 Cannot forward email` if the original is an inbound email or its contents were deleted.

## Related

- [Retry an email](/docs/api-reference/emails/retry/)
- [Forward an email](/docs/api-reference/emails/forward/)
- [Email statuses](/docs/logs/email-statuses/)
- [Email details](/docs/logs/email-details/)

---
Source: https://emailit.com/docs/email-api/retry-and-forward/
