---
title: "Replay a delivery"
method: POST
path: "/v2/workspaces/{id}/webhooks/{whkId}/deliveries/{whdId}/retry"
tags: ["Webhooks"]
---

# Replay a delivery

`POST /v2/workspaces/{id}/webhooks/{whkId}/deliveries/{whdId}/retry`

## Request

- Base URL: `https://api.infolang.ai`
- URL: `https://api.infolang.ai/v2/workspaces/{id}/webhooks/{whkId}/deliveries/{whdId}/retry`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer
  - HTTP bearer

Queues a NEW delivery carrying the SAME `event_id` and payload, so a consumer deduping on `X-InfoLang-Event-Id` recognizes it. The original attempt trail is preserved. Attempted by the endpoint's delivery queue, not inline.

Requires the `webhooks:write` scope. Accepts all three lanes: a session JWT (bounded by the caller's role on this workspace) or an `il_*` machine credential whose own scope set, workspace set and validity window cover it — both ceilings apply and neither can raise the other, so a credential carrying `webhooks:write` is still refused where the role does not permit it.

A credential with no scope record resolves to `LEGACY_DEFAULT`, which does NOT include `webhooks:write` — mint a key with it explicitly (`POST /v2/workspaces/{id}/keys`).

## Path parameters

- `id` string, required
- `whkId` string, required
- `whdId` string, required

## Response `202`

The queued replay delivery

- object
  - `delivery_id` string, required
  - `webhook_id` string, required
  - `event_id` string, required
  - `event_type` string, required
  - `status` 'pending' | 'delivered' | 'failed', required
  - `attempt` integer, required
  - `next_attempt_at` string, nullable
  - `response_status` integer, nullable
  - `response_body` string, nullable
  - `duration_ms` integer, nullable
  - `created` string, required
  - `completed` string, nullable
  - `payload` unknown

## Other responses

- `401`: Missing/invalid credential, or `credential_expired` — the credential is outside its `[not_before, expires_at)` window and must be replaced
- `403`: `insufficient_scope` — the credential's own scope set, or the caller's role on this workspace, does not cover the scope this route requires (the missing scope is named in the message). Or `forbidden` — the credential is not scoped to this workspace, or holds no grant on it
- `404`: No such webhook or delivery

---

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