# Redeliver webhook delivery

> Queues the event of an earlier delivery for another delivery to the same endpoint, while the event is in the 30 day log and the endpoint is active. Sends no messages to contacts. Returns the new delivery.

Last updated: 2026-10-25. Source: https://docs.smartchat.marketing/en/api/reference/webhooks/redeliver_webhook_delivery/

Queues the event of an earlier delivery for another delivery to the same endpoint, while the event is in the 30 day log and the endpoint is active. Sends no messages to contacts. Returns the new delivery.

`POST /v1/webhook-deliveries/{delivery_id}/redeliver`

| | |
|---|---|
| Permission | `webhooks:write` ([all permissions](https://docs.smartchat.marketing/en/api/permissions/)) |
| Risk | Write (no outside effect) |
| Idempotency-Key | Optional ([how it works](https://docs.smartchat.marketing/en/concepts/idempotency/)) |
| Safe to repeat | With the same Idempotency-Key the first answer comes back and nothing is done twice. Without a key a repeat is done again. |
| Rate limit class | `write` (120 requests per minute per key) |
| Confirmation | None |
| MCP tool | Not available in MCP |
| Since version | 2026-10-25 |

## What it does

- Changes data in your account. It does not send messages to contacts.
- Acts on a connected outside system.

## Request

**Header**

| Name | Required | Description |
|---|---|---|
| `Authorization` | yes | `Bearer <key>` |
| `Idempotency-Key` | no | A unique value for this operation, for example a UUID (1 to 255 visible ASCII characters). |

**Path parameters**

| Name | Type | Description |
|---|---|---|
| `delivery_id` | string | Delivery ID from the delivery log. |

## Examples

**curl**

```bash
curl -X POST "https://api.smartchat.marketing/v1/webhook-deliveries/whd_7a1b2c3d4e5f40718293a4b5c6d7e8f9/redeliver" \
  -H "Authorization: Bearer $SMARTCHAT_API_KEY"
```

**Python**

```python
import os
import requests

response = requests.post(
    "https://api.smartchat.marketing/v1/webhook-deliveries/whd_7a1b2c3d4e5f40718293a4b5c6d7e8f9/redeliver",
    headers={"Authorization": "Bearer " + os.environ["SMARTCHAT_API_KEY"]},
)
response.raise_for_status()
print(response.json())
```

**TypeScript**

```typescript
const response = await fetch("https://api.smartchat.marketing/v1/webhook-deliveries/whd_7a1b2c3d4e5f40718293a4b5c6d7e8f9/redeliver", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.SMARTCHAT_API_KEY}`,
  },
});
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());
```

Response (202):


```json
{
  "object": "webhook_delivery",
  "id": "whd_9b8a7c6d5e4f43218293a4b5c6d7e8f0",
  "endpoint_id": "whe_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
  "event_id": "evt_0f8c1a2e4b7d4c3e9a5b6d7e8f905678",
  "type": "contact.created",
  "attempt": 0,
  "status": "pending",
  "http_status": null,
  "error": null,
  "duration_ms": null,
  "next_attempt_at": "2026-10-25T09:50:00Z",
  "created_at": "2026-10-25T09:44:59Z",
  "finished_at": null
}
```

## Response

Status 202. Every response has the headers `Request-Id`, `SmartChat-Version` and `X-RateLimit-*`.

| Name | Type | Description |
|---|---|---|
| `object` | string | Always "webhook_delivery". always `webhook_delivery` |
| `id` | string | Delivery ID (also sent in the SmartChat-Delivery-Id header). |
| `endpoint_id` | string | Endpoint that received or will receive the event. |
| `event_id` | string or null | Event ID (also in the event body as id). Null for test pings. up to 64 characters |
| `type` | string | Event type, for example contact.created. up to 60 characters |
| `attempt` | integer | Number of attempts made so far (maximum 9). 0 to 9 |
| `status` | string | pending = waiting for the next attempt, sending = in progress, delivered = your server answered 2xx, failed = no more attempts. one of: `pending`, `sending`, `delivered`, `failed` |
| `http_status` | integer or null | HTTP status of the last attempt. Null if your server did not answer. 0 to 599 |
| `error` | string or null | Short reason of the last failure, for example HTTP 500 or timeout. Never contains the body of your answer. up to 200 characters |
| `duration_ms` | integer or null | Duration of the last attempt in milliseconds. 0 to 3600000 |
| `next_attempt_at` | string or null | When the next attempt is planned. Null if none is planned. up to 40 characters; format date-time |
| `created_at` | string | When the delivery was queued. up to 40 characters; format date-time |
| `finished_at` | string or null | When the delivery reached a final state. up to 40 characters; format date-time |

## Errors

| Code | Status | When |
|---|---|---|
| [`idempotency_key_invalid`](https://docs.smartchat.marketing/en/errors/#idempotency_key_invalid) | 400 | The 'Idempotency-Key' header must be 1 to 255 visible ASCII characters. |
| [`api_key_expired`](https://docs.smartchat.marketing/en/errors/#api_key_expired) | 401 | This API key has expired. |
| [`api_key_invalid`](https://docs.smartchat.marketing/en/errors/#api_key_invalid) | 401 | This API key is not valid. |
| [`api_key_revoked`](https://docs.smartchat.marketing/en/errors/#api_key_revoked) | 401 | This API key was revoked. |
| [`authentication_required`](https://docs.smartchat.marketing/en/errors/#authentication_required) | 401 | No API key was sent. Send 'Authorization: Bearer <key>'. |
| [`insufficient_scope`](https://docs.smartchat.marketing/en/errors/#insufficient_scope) | 403 | This key lacks a required permission. |
| [`ip_not_allowed`](https://docs.smartchat.marketing/en/errors/#ip_not_allowed) | 403 | This IP address is not allowed for this key. |
| [`delivery_not_found`](https://docs.smartchat.marketing/en/errors/#delivery_not_found) | 404 | No webhook delivery with this ID exists in this account. |
| [`conflict`](https://docs.smartchat.marketing/en/errors/#conflict) | 409 | The state of the object does not allow this. |
| [`idempotency_in_progress`](https://docs.smartchat.marketing/en/errors/#idempotency_in_progress) | 409 | A request with this idempotency key is still running. |
| [`idempotency_key_reused`](https://docs.smartchat.marketing/en/errors/#idempotency_key_reused) | 422 | This idempotency key was already used with a different request. |
| [`validation_failed`](https://docs.smartchat.marketing/en/errors/#validation_failed) | 422 | A field is not valid. |
| [`rate_limited`](https://docs.smartchat.marketing/en/errors/#rate_limited) | 429 | Too many requests. Wait and try again. |
| [`internal_error`](https://docs.smartchat.marketing/en/errors/#internal_error) | 500 | Something went wrong on our side. |

All errors use [one format](https://docs.smartchat.marketing/en/concepts/errors-overview/).
