
# Mettre à jour un point de terminaison webhook

`PATCH /v1/webhook-endpoints/{endpoint_id}` · autorisation `webhook-endpoints:write` · tous les forfaits

Modifie un point de terminaison à l'aide d'un JSON merge patch (RFC 7396, `Content-Type: application/merge-patch+json`). `If-Match` est obligatoire ; la valeur actuelle correspond à l'en-tête `ETag` de [Récupérer un point de terminaison webhook](get.md). Un patch qui ne modifie rien n'écrit rien et conserve la version.

- `status` accepte uniquement `enabled` et `disabled_by_user`. Définir `enabled` est comptabilisé dans la limite de points de terminaison activés du forfait et efface `failing_since` ; c'est ainsi qu'un point de terminaison désactivé après des échecs ou par son récepteur est réactivé.
- `null` efface `description` et `event_schema_versions` (ou une seule entrée : `{"event_schema_versions": {"user.created": null}}`) ; sur tout autre champ, cela produit `422 invalid`.
- `event_types` est remplacé dans son intégralité.

## Requête

| Champ | Type | Obligatoire | Description |
|---|---|---|---|
| `endpoint_id` | path | oui | Identifiant du point de terminaison webhook (`whe_…`). |
| `If-Match` | header | oui | `ETag` actuel du point de terminaison (`*` correspond à n'importe quelle version). |
| `key`, `url`, `description`, `event_types`, `event_schema_versions`, `payload_mode`, `rate_limit_per_second` | | non | Comme dans [Ajouter un point de terminaison webhook](create.md). |
| `status` | string | non | `enabled` ou `disabled_by_user`. |

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

## Réponse

`200 OK` avec le point de terminaison (comme dans [Récupérer un point de terminaison webhook](get.md)) et son nouvel `ETag`.

## Erreurs

| HTTP | code | Quand |
|---|---|---|
| 400 | `malformed_request` | Le corps n'est pas un objet JSON. |
| 400 | `unknown_field` | Le patch contient un champ qui n'est pas listé ci-dessus. |
| 403 | `quota_exceeded` | `status: enabled` dépasserait le nombre de points de terminaison activés autorisé par le forfait. |
| 404 | `not_found` | Aucun point de terminaison de ce type dans cet environnement. |
| 409 | `conflict` | Un autre point de terminaison de l'environnement utilise cette `key`. |
| 412 | `precondition_failed` | `If-Match` ne correspond pas à la version actuelle (le point de terminaison a changé depuis votre dernière lecture). |
| 422 | `validation_failed` | Un champ est invalide (pointeurs comme dans [Ajouter un point de terminaison webhook](create.md)) ; `/status invalid` pour un statut autre que `enabled` ou `disabled_by_user`. |
| 428 | `precondition_required` | `If-Match` est absent. |
| 401 | `unauthenticated` | L'identifiant d'authentification est absent, invalide ou révoqué. |
| 403 | `insufficient_permissions` | L'identifiant d'authentification ne dispose pas de l'autorisation `webhook-endpoints:write`. |
| 503 | `service_unavailable` | L'administration des webhooks est temporairement indisponible ; réessayez après la période indiquée par `Retry-After`. |

## Exemple

```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"'`
