
# Actualizar un cliente de gestión

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

Actualiza un registro de cliente de gestión con un JSON merge patch (RFC 7396, `application/merge-patch+json`): los campos que envía cambian, los demás se mantienen. `If-Match` es obligatorio: sin él, la solicitud falla con `428`, y con una versión que ya no coincide falla con `412`. Solo una clave de API puede llamar a este endpoint.

## Solicitud

| Parámetro | En | Descripción |
|---|---|---|
| `application_id` | ruta | ID de la aplicación (`app_…`). |
| `If-Match` | cabecera | El `ETag` de la última lectura o escritura. |

Cuerpo: cualquiera de los campos siguientes.

| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `permissions` | string[] | no | De 1 a 200 permisos `<resource>:<action>` conocidos. Reemplaza la lista completa; no puede ser `null`. |
| `allowed_cidrs` | string[] \| null | no | Hasta 20 bloques CIDR. Reemplaza la lista completa; `null` o `[]` usa la lista propia de la clave que realiza la llamada. |

Un parche que no cambia nada deja el registro, su versión y el registro de auditoría como estaban. Una clave restringida no puede modificar un registro más amplio que ella misma (`403 permission_escalation`).

## Respuesta

`200 OK`, con el nuevo `ETag`.

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

## Errores

| HTTP | code | Cuándo |
|---|---|---|
| 400 | `unknown_field` | El parche contiene un campo distinto de `permissions` y `allowed_cidrs`. |
| 403 | `permission_escalation` | El registro, o el registro tras el parche, es más amplio que la clave que realiza la llamada. |
| 404 | `not_found` | La aplicación no tiene registro en este entorno. |
| 412 | `precondition_failed` | `If-Match` no coincide con la versión actual. |
| 415 | `unsupported_media_type` | El tipo de contenido no es `application/merge-patch+json`. |
| 422 | `validation_failed` | `permissions` es `null`, está vacío o contiene un permiso desconocido, o un CIDR no es válido. |
| 428 | `precondition_required` | Falta `If-Match`. |

## Ejemplo

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