# Redeliver events

Canonical page: https://docs.ovok.com/signals/standalone/api/events/redeliver-events

{/* Generated from the API Explorer document by scripts/generate-signals-api-pages.mjs. Edit ovok-core, not this page. */}


# Redeliver events [#redeliver-events]

| Method | Path |
| --- | --- |
| `POST` | `/v1/signals/api/events/redeliver` |

<Availability route="POST /v1/signals/api/events/redeliver" />

Queues the oldest 1 000 deliveries in `status` (default `failed`) queued since `since` to be sent again, each with a fresh retry ladder: the same `webhook-id`, so receivers dedupe, and a new `webhook-timestamp`. An alert is sent whatever its age. Deliveries to a disabled endpoint, and ones being sent right now, are skipped. While it answers `queued: 1000`, call it again for the next ones.

### Through ovok [#through-ovok]

- **Who can call it:** Manager apps, and users whose access policy grants the capabilities.
- **Capabilities, all required:** `signals_webhooks:update`. Project admins have every capability; client applications get no admin bypass.
- It can reach any patient of your project without naming one, so it is for callers that reach every patient: project admins, manager or submitter apps, and anyone whose Patient access has no criteria.

## Request [#request]

### Query parameters [#query-parameters]

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `status` | `failed`, `delivered`, `pending`, `expired`, `held` | No | The deliveries to send again: `failed` (the default), `expired`, `held` or `delivered`. |
| `since` | string | Yes | Only events queued at or after this time. Required, so a replay is always bounded. |
| `subscriberId` | string | No | Only this subscriber's deliveries, by Signals id or `clientId`. A subscriber may name only itself. |

## Responses [#responses]

| Status | Meaning |
| --- | --- |
| `202` | Queued: how many deliveries will be sent again. |
| `400` | The query carries a raw `#`, or more than 200 parameters. |
| `401` | Your ovok access token, or your client id and secret, are missing or invalid. |
| `403` | ovok refused the call: you lack a capability this route needs, or your session has no project, or your access covers only some patients. From Signals: Authenticated, but the client's role does not permit this, or it is not attached to the patient. Or: A SUBSCRIBER named another subscriber. |
| `404` | `subscriberId` names no subscriber in this tenant. |
| `409` | Your project has no Signals tenant of its own (`SIGNALS_TENANT_NOT_OWN`), or it is moving to another one. |
| `415` | The body is not JSON. |
| `422` | A query parameter failed validation, or `since` is missing. |
| `429` | Too many requests. Retry after the seconds in `Retry-After`. |
| `500` | ovok hit an unexpected fault, such as your project having no Signals submitter. |
| `502` | Signals answered with something ovok couldn't use, or refused ovok's own credential. |
| `503` | Signals is unavailable. Retry after the seconds in `Retry-After`. |
| `504` | Signals did not answer in time. |

## Example [#example]

```bash
curl --request POST 'https://api.sandbox.ovok.com/v1/signals/api/events/redeliver' \
  --user "${OVOK_CLIENT_ID}:${OVOK_CLIENT_SECRET}" \
  --header 'Content-Type: application/json' \
  --data @body.json
```
