> ## Documentation Index
> Fetch the complete documentation index at: https://developers.fastdrop.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Retry Delivery

> Replay a webhook delivery — no credits, no re-running the job

Re-send a delivery that failed, or one that succeeded but was lost downstream.

The payload and its `event_id` are **unchanged**, so a handler that dedupes on the event `id` can safely receive a replay. Replaying **costs no credits** — you never need to re-run a job to recover a missed event.

Retrying resets the attempt counter, so the delivery gets the full 30s / 120s / 480s ladder again.

### Path parameters

<ParamField path="delivery_id" type="string" required>
  Delivery UUID from [List Deliveries](/api-reference/list-deliveries).
</ParamField>

### Response (200 OK)

The delivery, now `pending` with `attempts` reset to 0. Same shape as [List Deliveries](/api-reference/list-deliveries).

### Errors

<ResponseField name="404 not_found" type="error">
  No such delivery, or it belongs to another API key.
</ResponseField>

<ResponseField name="409 delivery_in_flight" type="error">
  Already queued for another automatic attempt. Wait for it to resolve — `next_retry_at` tells you when.
</ResponseField>

<ResponseField name="409 endpoint_unavailable" type="error">
  The endpoint has been deleted or deactivated, so a replay would fail for the same reason. Register a new endpoint first.
</ResponseField>

### Recovering after an outage

<CodeGroup>
  ```python Python theme={null}
  import httpx

  HEADERS = {"X-API-Key": "fd_live_your_key_here"}
  BASE = "https://api.fastdrop.io/api/v1"

  # Everything we could not deliver while you were down
  failed = httpx.get(
      f"{BASE}/webhooks/deliveries",
      params={"status": "failed", "limit": 100},
      headers=HEADERS,
  ).json()["deliveries"]

  for d in failed:
      resp = httpx.post(f"{BASE}/webhooks/deliveries/{d['id']}/retry", headers=HEADERS)
      print(f"{d['event']} for job {d['job_id']}: {resp.status_code}")
  ```

  ```bash cURL theme={null}
  curl -X POST \
    https://api.fastdrop.io/api/v1/webhooks/deliveries/8c7d6e5f-4a3b-2c1d-0e9f-8a7b6c5d4e3f/retry \
    -H "X-API-Key: fd_live_your_key_here"
  ```
</CodeGroup>

<Note>
  Deploy the fix before replaying in bulk. A replay against a still-broken endpoint burns the retry ladder again and lands back in `failed`.
</Note>

<ResponseExample>
  ```json 200 theme={null}
  {
    "id": "8c7d6e5f-4a3b-2c1d-0e9f-8a7b6c5d4e3f",
    "event": "job.completed",
    "event_id": "evt_9f2c4a7b1e8d40a3b6c5d2e1f0a9b8c7",
    "status": "pending",
    "webhook_id": "3f9a1c22-8e4b-4d7a-9c11-77d2f0b5a8e3",
    "target_url": "https://your-server.com/webhooks/fastdrop",
    "job_id": "a1b2c3d4-5678-90ab-cdef-1234567890ab",
    "attempts": 0,
    "max_attempts": 3,
    "response_status": null,
    "response_body": null,
    "error": null,
    "created_at": "2026-08-15T12:01:15Z",
    "last_attempt_at": "2026-08-15T12:11:45Z",
    "next_retry_at": null,
    "delivered_at": null
  }
  ```
</ResponseExample>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.