---
title: "Retry a failed email"
description: "Send a failed email again on the same id, as the dashboard's Retry does. `POST /api/v1/email/{id}/retry`"
url: https://www.unitpost.com/docs/email/post-email-id-retry
section: "Email API reference"
updated: 2026-10-13
---
# Retry a failed email

`POST /api/v1/email/{id}/retry`

Send a `failed` email again on the same `id`, as the dashboard's Retry does. Only a one-off send whose failure was temporary is retried: a campaign recipient, a template test, a suppressed or rejected send, or a content error is a `409` saying why (send a new email instead). It passes the same checks as a new send: the sending domain, your plan and quota. Pass an `Idempotency-Key` so a retried call can't send it twice. Takes no body; follow the email with [Retrieve an email](https://www.unitpost.com/docs/email/get-email-id). Requires the `emails:send` capability.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string | yes | — |
| `Idempotency-Key` | header | string | no | Any unique string (1–256 characters, e.g. a UUID). Retrying with the same key and the same body within 24 hours returns the first result instead of sending again; the same key with a different body is `409 invalid_idempotent_request`, and one still in flight is `409 concurrent_idempotent_requests`. |

## Response fields (200)

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `object` | string | yes | — |
| `id` | string | yes | — |
| `to` | string[] | yes | — |
| `from` | string | yes | — |
| `subject` | string | yes | — |
| `template_id` | string \| null | yes | — |
| `campaign_id` | string \| null | yes | — |
| `status` | enum | yes | One of: `scheduled`, `queued`, `sent`, `delivered`, `bounced`, `complained`, `canceled`, `failed`. |
| `last_event` | string | yes | — |
| `scheduled_at` | string \| null | yes | — |
| `sent_at` | string \| null | yes | — |
| `delivered_at` | string \| null | yes | — |
| `opened_at` | string \| null | yes | — |
| `clicked_at` | string \| null | yes | — |
| `canceled_at` | string \| null | yes | — |
| `last_error` | string \| null | yes | — |
| `created_at` | string | yes | — |
| `cc` | string[] | no | Cc recipients, as sent. Empty when none. Only on `GET /email/{id}`. |
| `bcc` | string[] | no | Bcc recipients, as sent. Empty when none. Only on `GET /email/{id}`. |
| `reply_to` | string[] | no | Reply-To addresses, as sent. Empty when none. Only on `GET /email/{id}`. |
| `tags` | object[] | no | The send's tags. Empty when none. Only on `GET /email/{id}`. |

## Responses

| Status | Description |
| --- | --- |
| 200 | The email, `queued` again. |
| 400 | The body isn't JSON. |
| 401 | Missing or invalid API key. |
| 403 | Insufficient scope, or the sending domain isn't verified. |
| 404 | Email not found. |
| 409 | It can't be retried (see the message), or the `Idempotency-Key` is in use by a request still running. |
| 422 | A body key (this operation takes none). |
| 429 | Your plan's sending quota, or the sending throttle (`Retry-After`). |

## Example request

```bash
curl -X POST 'https://www.unitpost.com/api/v1/email/email_123/retry' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'User-Agent: my-app/1.0'
```

## Example response (200)

```json
{
  "object": "email",
  "id": "id_123",
  "to": [
    "customer@example.com"
  ],
  "from": "you@yourdomain.com",
  "subject": "Welcome to Acme",
  "template_id": "template_123",
  "campaign_id": "campaign_123",
  "status": "scheduled",
  "last_event": "string",
  "scheduled_at": "2026-01-01T00:00:00.000Z",
  "sent_at": "2026-01-01T00:00:00.000Z",
  "delivered_at": "2026-01-01T00:00:00.000Z",
  "opened_at": "2026-01-01T00:00:00.000Z",
  "clicked_at": "2026-01-01T00:00:00.000Z",
  "canceled_at": "2026-01-01T00:00:00.000Z",
  "last_error": "string",
  "created_at": "2026-01-01T00:00:00.000Z",
  "cc": [
    "string"
  ],
  "bcc": [
    "string"
  ],
  "reply_to": [
    "string"
  ],
  "tags": [
    {
      "name": "Example",
      "value": "string"
    }
  ]
}
```

## Links

- HTML reference (with Node.js, Python, Ruby, PHP, Laravel, Go, Java, Rust, .NET and CLI examples): https://www.unitpost.com/docs/email/post-email-id-retry
- OpenAPI 3.1 (full schemas): https://www.unitpost.com/api/v1/openapi.json
