
# Actualizar una aplicación

`PATCH /v1/applications/{application_id}` · permiso `applications:write`

Actualiza una aplicación con un parche de fusión JSON (`application/merge-patch+json`, RFC 7396): los campos que envías cambian, `null` borra un campo nullable, los arreglos se reemplazan en su totalidad. `If-Match` es obligatorio: sin él la solicitud falla con `428`, con una versión obsoleta con `412`. Los campos inmutables `key`, `app_type`, `registration_source` e `owner_org_id` devuelven `422` con código `immutable` si envías un valor diferente. Un parche que no cambia nada deja la aplicación y su versión intactos.

## Solicitud

**Headers**: `If-Match: "<version>"` (obligatorio), `Content-Type: application/merge-patch+json`.

**Path**: `application_id` (`app_…`).

**Body**: cualquier subconjunto de los campos escribibles enumerados en la página de creación (`key`, `name`, `app_type`, … `connection_ids`). `null` borra un campo que es nullable; los arreglos reemplazan toda la lista; `jwks` se reemplaza como un objeto. Los campos de solo lectura (`id`, `client_id`, `version`, `created_at`, `updated_at`, `last_token_issued_at`, `last_token_asn`) se rechazzan.

## Respuesta

`200 OK` con la aplicación actualizada y el nuevo `ETag`.

## Errores

| HTTP | `code` | Cuándo |
|---|---|---|
| 401 | `unauthenticated` | La clave falta, no es válida o ha sido revocada. |
| 403 | `insufficient_permissions` | La clave carece del permiso requerido. |
| 404 | `not_found` | La aplicación no existe en este entorno. |
| 428 | `precondition_required` | El encabezado `If-Match` falta. |
| 412 | `precondition_failed` | La versión en `If-Match` es obsoleta. |
| 422 | `validation_failed` | Un campo no es válido o un campo inmutable cambió. |
| 422 | `policy_conflict` | `allowed_first_factors` no tiene ningún método en común con el conjunto de factores de primer nivel del entorno. |
| 400 | `unknown_field` | El parche tiene un campo que no forma parte del esquema (incluyendo campos de solo lectura como `id`). |
| 415 | `unsupported_media_type` | `Content-Type` no es `application/merge-patch+json`. |

## Ejemplo

```bash
curl -X PATCH https://api.eu.keenauth.com/v1/applications/app_6f8d0cjgbmf0gtn2rg6pscp3cg \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/merge-patch+json" \
  -H 'If-Match: "1"' \
  -d '{"name":"Portal v2","login_host":null}'
```
