---
title: "Redeliver an event"
method: POST
path: "/v1/events/{id}/redeliver"
tags: ["Events"]
---

# Redeliver an event

`POST /v1/events/{id}/redeliver`

## Request

- Base URL: `https://api.tryleap.ai`
- URL: `https://api.tryleap.ai/v1/events/{id}/redeliver`
- Auth: one of:
  - API key in header `x-api-key`
  - HTTP bearer

Sends the event again: to one endpoint with `{"endpoint": "we_..."}`, or else to every enabled endpoint that subscribes to its type and to the webhook URL its request named. It keeps the event's `webhook-id`, so a receiver that skips duplicates handles it once. A disabled endpoint, or nowhere to send, answers `409`. Tests and redeliveries share a budget of 100 an hour per workspace.

Needs an API key with the `generations:write` scope.

## Path parameters

- `id` string, required: The event's ID, `evt_...`.

## Request body

- object
  - `endpoint` string: Send only to this endpoint. Without it, the event goes to every enabled endpoint that subscribes to its type, and to the webhook URL its request named.

## Response `202`

The deliveries it queued.

- WebhookDeliveryList: Forward list envelope. Live lists are not snapshots; totals are not promised.
  - `object` 'list', required: The list object discriminator.
  - `url` string, required: The list's resource path, such as /v1/records.
  - `data` WebhookDelivery[], required: Resource objects in this page, in the requested order.
    - `id` string, required: The delivery's ID, `whd_...`.
    - `object` 'webhook_delivery', required
    - `event` string, required: The event it carries, `evt_...`.
    - `endpoint` string, nullable, required: The endpoint, or null for the webhook URL a request named.
    - `url` string, required: Where it goes.
    - `status` 'pending' | 'succeeded' | 'failed', required: `pending` while tries remain, `succeeded` once your server answered 2xx, `failed` after the last try.
    - `attempts` object[], required: Every try so far, oldest first.
      - `attempted_at` string, date-time, required
      - `succeeded` boolean, required
      - `status_code` integer, nullable, required: Your server's HTTP status; null when it never answered.
      - `error` string, nullable, required: Why the try failed, when your server did not answer 2xx, such as a timeout.
      - `duration_ms` integer, required: How long the try took.
    - `next_attempt_at` string, date-time, nullable, required: When Leap tries again; null once it succeeded or gave up.
    - `created_at` string, date-time, required: When it was queued.
    - `completed_at` string, date-time, nullable, required: When it succeeded or Leap gave up; null while tries remain.
  - `has_more` boolean, required: Whether another page is available using next_cursor.
  - `next_cursor` string, nullable, required: Opaque next_cursor from the previous page. It works only for the list and filters it came from.

## Other responses

- `400`: `invalid_parameter`, `conflicting_credentials`
- `401`: `authentication_required`
- `403`: `permission_denied`
- `404`: `resource_not_found`
- `409`: `conflict`
- `429`: `rate_limit_exceeded`

---

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