
# Actualizar un endpoint de webhook

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

Modifica un endpoint con un parche de fusión JSON (RFC 7396, `Content-Type: application/merge-patch+json`). `If-Match` es obligatorio; el valor actual es el encabezado `ETag` de [Obtener un endpoint de webhook](get.md). Un parche que no cambia nada no escribe nada y conserva la versión.

- `status` solo acepta `enabled` y `disabled_by_user`. Establecer `enabled` cuenta para el límite de endpoints habilitados del plan y borra `failing_since`; así se vuelve a habilitar un endpoint deshabilitado tras fallos o por su receptor.
- `null` borra `description` y `event_schema_versions` (o una sola entrada: `{"event_schema_versions": {"user.created": null}}`); en cualquier otro campo da `422 invalid`.
- `event_types` se reemplaza por completo.

## Solicitud

| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `endpoint_id` | ruta | sí | ID del endpoint de webhook (`whe_…`). |
| `If-Match` | encabezado | sí | `ETag` actual del endpoint (`*` coincide con cualquier versión). |
| `key`, `url`, `description`, `event_types`, `event_schema_versions`, `payload_mode`, `rate_limit_per_second` | | no | Igual que en [Añadir un endpoint de webhook](create.md). |
| `status` | cadena | no | `enabled` o `disabled_by_user`. |

```json
{
  "status": "enabled",
  "event_types": ["user.created", "user.updated", "user.deleted"]
}
```

## Respuesta

`200 OK` con el endpoint (como en [Obtener un endpoint de webhook](get.md)) y su nuevo `ETag`.

## Errores

| HTTP | código | Cuándo |
|---|---|---|
| 400 | `malformed_request` | El cuerpo no es un objeto JSON. |
| 400 | `unknown_field` | El parche tiene un campo que no aparece en la lista anterior. |
| 403 | `quota_exceeded` | `status: enabled` superaría el número de endpoints habilitados del plan. |
| 404 | `not_found` | No existe ese endpoint en este entorno. |
| 409 | `conflict` | Otro endpoint del entorno tiene este `key`. |
| 412 | `precondition_failed` | `If-Match` no coincide con la versión actual (el endpoint cambió desde que lo leyó). |
| 422 | `validation_failed` | Un campo no es válido (los punteros como en [Añadir un endpoint de webhook](create.md)); `/status invalid` para un estado distinto de `enabled` o `disabled_by_user`. |
| 428 | `precondition_required` | Falta `If-Match`. |
| 401 | `unauthenticated` | La credencial falta, no es válida o fue revocada. |
| 403 | `insufficient_permissions` | La credencial no tiene el permiso `webhook-endpoints:write`. |
| 503 | `service_unavailable` | La administración de webhooks no está disponible temporalmente; reintente después del período indicado en `Retry-After`. |

## Ejemplo

```bash
curl -X PATCH https://api.eu.keenauth.com/v1/webhook-endpoints/whe_01k8a3m5q7t9v1w3x5y7z9b2c4 \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/merge-patch+json" \
  -H 'If-Match: "3"' \
  -d '{"status":"enabled"}'
```

CLI: `keenauth webhook-endpoints update whe_01k8a3m5q7t9v1w3x5y7z9b2c4 --status enabled --if-match '"3"'`
