
# Mettre à jour une application

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

Met à jour une application avec un JSON Merge Patch (`application/merge-patch+json`, RFC 7396) : les champs que vous envoyez changent, `null` efface un champ nullable, les tableaux sont remplacés dans leur intégralité. `If-Match` est obligatoire : sans elle, la requête échoue avec `428`, avec une version obsolète avec `412`. Les champs immuables `key`, `app_type`, `registration_source` et `owner_org_id` retournent `422` avec le code `immutable` si vous envoyez une valeur différente. Un patch qui ne change rien laisse l'application et sa version intactes.

## Demande

**En-têtes** : `If-Match: "<version>"` (obligatoire), `Content-Type: application/merge-patch+json`.

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

**Corps** : n'importe quel sous-ensemble des champs inscriptibles listés sur la page de création (`key`, `name`, `app_type`, … `connection_ids`). `null` efface un champ qui est nullable ; les tableaux remplacent toute la liste ; `jwks` est remplacé en tant qu'objet. Les champs en lecture seule (`id`, `client_id`, `version`, `created_at`, `updated_at`, `last_token_issued_at`, `last_token_asn`) sont rejetés.

## Réponse

`200 OK` avec l'application mise à jour et le nouvel `ETag`.

## Erreurs

| HTTP | `code` | Quand |
|---|---|---|
| 401 | `unauthenticated` | La clé est manquante, invalide ou révoquée. |
| 403 | `insufficient_permissions` | La clé n'a pas la permission requise. |
| 404 | `not_found` | L'application n'existe pas dans cet environnement. |
| 428 | `precondition_required` | L'en-tête `If-Match` est manquant. |
| 412 | `precondition_failed` | La version dans `If-Match` est obsolète. |
| 422 | `validation_failed` | Un champ est invalide ou un champ immuable a changé. |
| 422 | `policy_conflict` | `allowed_first_factors` n'a aucune méthode en commun avec l'ensemble des premiers facteurs de l'environnement. |
| 400 | `unknown_field` | Le patch a un champ qui ne fait pas partie du schéma (y compris les champs en lecture seule comme `id`). |
| 415 | `unsupported_media_type` | `Content-Type` n'est pas `application/merge-patch+json`. |

## Exemple

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