How-to
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.
- Both need the original message contents. Emailit deletes them when your 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 first.
- Held for credits: top up your credits.
- Held because the domain was paused: resolve the 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.
- 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.
- Go to Email APIEmails and open the email.
- 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.
- Select Retry again in the Retry Email dialog to confirm. The new email appears in the list with its own ID.
Call Retry an email (POST /emails/{id}/retry) with the original email’s ID. There’s no request body.
curl -X POST https://api.emailit.com/v2/emails/em_33VtK8mRq1xZp7LwN4cY2bHsDfa/retry \
-H "Authorization: Bearer $EMAILIT_API_KEY"const retried = await emailit.emails.retry('em_33VtK8mRq1xZp7LwN4cY2bHsDfa');retried = client.emails.retry("em_33VtK8mRq1xZp7LwN4cY2bHsDfa")$retried = $emailit->emails()->retry('em_33VtK8mRq1xZp7LwN4cY2bHsDfa');{
"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:.
tostring | string[]requiredto on a send.include_headersbooleandefault: falseFwd: subject prefix.commentstringinclude_headers is true. body is accepted as an alias.htmlstringcomment in the HTML part, when include_headers is true.textstringcomment in the text part, when include_headers is true.fromstringsubjectstringFwd: 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 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.
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.
- Go to Email APIEmails and open the email.
- Select Forward.
- Enter the recipient in To.
- Optional: check Add forwarded headers and a comment and write a Comment.
- Select Forward. The new email appears in the list with its own ID.
Call Forward an email (POST /emails/{id}/forward).
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?"
}'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?',
});forwarded = client.emails.forward("em_33VtK8mRq1xZp7LwN4cY2bHsDfa", {
"to": "support@acme.com",
"include_headers": True,
"comment": "Customer says this receipt never arrived. Can you check?",
})$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, 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.