
# Reproducir eventos en un endpoint de webhook

`POST /v1/webhook-endpoints/{endpoint_id}:replay` · permiso `webhook-endpoints:write` · todos los planes

Vuelve a encolar los eventos del intervalo `[from, to)` de los últimos 30 días, por ejemplo los eventos de un periodo en el que el endpoint estuvo deshabilitado. Solo se envían los tipos de evento del endpoint, a menos que `types` los restrinja. Cada entrega reproducida conserva el `webhook-id` del evento, de modo que un receptor que elimina duplicados por `webhook-id` procesa cada evento una sola vez; `replay_no` de la entrega aumenta en uno.

## Solicitud

| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `endpoint_id` | path | sí | Identificador del endpoint de webhook (`whe_…`). |
| `from` | date-time | sí | Inicio del intervalo (inclusive), dentro de los últimos 30 días. |
| `to` | date-time | sí | Fin del intervalo (exclusivo), posterior a `from`. |
| `types` | string[] | no | Tipos de evento a reproducir; vacío o ausente significa los tipos del endpoint. |
| `Idempotency-Key` | header | no | Reproduce la respuesta de una solicitud repetida con la misma clave, sin volver a encolar. |

```json
{
  "from": "2026-10-20T00:00:00Z",
  "to": "2026-10-21T00:00:00Z",
  "types": ["user.created"]
}
```

## Respuesta

`200 OK` con el número de entregas encoladas.

```json
{
  "enqueued": 42
}
```

## Errores

| HTTP | código | Cuándo |
|---|---|---|
| 400 | `unknown_field` | El cuerpo tiene un campo que no aparece en la lista anterior. |
| 404 | `not_found` | No existe tal endpoint en este entorno. |
| 415 | `unsupported_media_type` | El cuerpo falta o no es `application/json`. |
| 422 | `validation_failed` | `/from required`, `/to required`, o una regla de intervalo: `to` no posterior a `from`, o anterior a 30 días. |
| 401 | `unauthenticated` | Falta la credencial, no es válida o fue revocada. |
| 403 | `insufficient_permissions` | La credencial no tiene el permiso `webhook-endpoints:write`. |
| 503 | `service_unavailable` | La reproducción aún no está disponible en esta región, o la administración de webhooks no está disponible temporalmente; reintente después de `Retry-After`. |

## Ejemplo

```bash
curl -X POST https://api.eu.keenauth.com/v1/webhook-endpoints/whe_01k8a3m5q7t9v1w3x5y7z9b2c4:replay \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 7a1c3e5f-9b2d-4f6a-8c0e-2b4d6f8a0c2e" \
  -d '{"from":"2026-10-20T00:00:00Z","to":"2026-10-21T00:00:00Z"}'
```

CLI (el cuerpo se toma de la entrada estándar o de un archivo (`--data @replay.json`)):

```bash
echo '{"from":"2026-10-20T00:00:00Z","to":"2026-10-21T00:00:00Z"}' | keenauth webhook-endpoints replay whe_01k8a3m5q7t9v1w3x5y7z9b2c4 --data -
```
