
# Aggiorna un client di gestione

`PATCH /v1/management-clients/{application_id}` · permesso `management-clients:write`

Aggiorna un record di client di gestione con un JSON merge patch (RFC 7396, `application/merge-patch+json`): i campi che invii cambiano, gli altri restano invariati. `If-Match` è obbligatorio: senza di esso la richiesta fallisce con `428`, e con una versione non più corrispondente fallisce con `412`. Solo una chiave API può chiamare questo endpoint.

## Richiesta

| Parametro | In | Descrizione |
|---|---|---|
| `application_id` | path | ID dell'applicazione (`app_…`). |
| `If-Match` | header | L'`ETag` dell'ultima lettura o scrittura. |

Corpo: uno qualsiasi dei campi seguenti.

| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| `permissions` | string[] | no | Da 1 a 200 permessi `<resource>:<action>` noti. Sostituisce l'intero elenco; non può essere `null`. |
| `allowed_cidrs` | string[] \| null | no | Fino a 20 blocchi CIDR. Sostituisce l'intero elenco; `null` o `[]` usa la lista della chiave che effettua la chiamata. |

Una patch che non modifica nulla lascia invariati il record, la sua versione e il log di audit. Una chiave con restrizioni non può modificare un record più ampio di sé stessa (`403 permission_escalation`).

## Risposta

`200 OK`, con il nuovo `ETag`.

```json
{
  "application_id": "app_01h455vb4pex5vsknk084sn02q",
  "permissions": ["users:read"],
  "allowed_cidrs": ["203.0.113.0/24"]
}
```

## Errori

| HTTP | code | Quando |
|---|---|---|
| 400 | `unknown_field` | La patch contiene un campo diverso da `permissions` e `allowed_cidrs`. |
| 403 | `permission_escalation` | Il record, o il record dopo la patch, è più ampio della chiave che effettua la chiamata. |
| 404 | `not_found` | L'applicazione non ha un record in questo ambiente. |
| 412 | `precondition_failed` | `If-Match` non corrisponde alla versione corrente. |
| 415 | `unsupported_media_type` | Il tipo di contenuto non è `application/merge-patch+json`. |
| 422 | `validation_failed` | `permissions` è `null`, vuoto o contiene un permesso sconosciuto, oppure un CIDR non è valido. |
| 428 | `precondition_required` | `If-Match` manca. |

## Esempio

```bash
curl -X PATCH https://api.eu.keenauth.com/v1/management-clients/app_01h455vb4pex5vsknk084sn02q \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/merge-patch+json" \
  -H 'If-Match: "3f2a9c0d7b1e4a6f8c5d2e1b0a9f8e7d"' \
  -d '{"permissions":["users:read"]}'
```

CLI: `keenauth management-clients update app_01h455vb4pex5vsknk084sn02q --permissions users:read --if-match '"3f2a9c0d7b1e4a6f8c5d2e1b0a9f8e7d"'`
