---
title: "Retry failed delivery"
method: POST
path: "/api/v1/webhook-deliveries/{id}/retry"
tags: ["Webhook Deliveries"]
---

# Retry failed delivery

`POST /api/v1/webhook-deliveries/{id}/retry`

## Request

- Base URL: `https://api.proof.holdings`
- URL: `https://api.proof.holdings/api/v1/webhook-deliveries/{id}/retry`
- Auth: HTTP bearer

Queue a fresh ladder of attempts for a delivery that has not been delivered: one with status "failed", or a "pending" one that no worker is holding. The attempt numbering continues after the attempts already spent (the delivery's `attempts` is never reset and its `max_attempts` is set to `attempts` plus one ladder of six, as `GET /api/v1/webhook-deliveries/{id}` then shows; a delivery an earlier version of this endpoint had reset to `attempts: 0` resumes above its `max_attempts`), so a retried attempt never reuses the `X-Webhook-Id` of an attempt its `attempts` count already includes. A "pending" delivery that a queued job already holds is answered 200 ("already queued") instead of being given a second job.

## Path parameters

- `id` string, required: MongoDB ObjectId

## Response `200`

Delivery retry initiated

- RetryDeliveryResponse
  - `success` boolean, required
  - `message` string, required
  - `delivery_id` string, required: MongoDB ObjectId
  - `next_retry_at` string, date-time, required

## Other responses

- `400`: Cannot retry: the delivery was already delivered (`already_delivered`)
- `403`: `account_key_required` — this API key is bound to one sub-account; account-level changes need an account-wide key or the dashboard.
- `404`: Delivery not found
- `503`: The retry could not be queued (`webhook_enqueue_failed`); the delivery is left "failed" with the reason

---

[API](https://skmtc.dev/proof/apis/proof-holdings-api.md) · [All operations](https://skmtc.dev/proof/apis/proof-holdings-api/llms.txt) · [OpenAPI document](https://skmtc.dev/proof/apis/proof-holdings-api/revisions/ce737ee02fac?raw)
