
# Suspendre une application

`POST /v1/applications/{application_id}:suspend` · autorisation `applications:write`

Définit le `status` de l'application sur `suspended`. Dès lors, l'application ne peut plus obtenir de nouveaux jetons : l'autorisation, PAR, l'autorisation par appareil, le point de terminaison de jetons (y compris l'actualisation et `client_credentials`), l'introspection et la révocation la refusent en tant que client. La suspension met aussi fin à ce que l'application détient déjà : KeenAuth révoque ses familles de jetons d'actualisation actives ouvertes avant la suspension (motif `client_revoked`) et marque son `client_id`, de sorte que l'introspection et userinfo rejettent les jetons d'accès émis à cette application avant ce point. Un serveur de ressources qui ne vérifie que la signature JWT continue d'accepter un tel jeton d'accès jusqu'à son expiration. Les identifiants client de l'application sont conservés ; sa reprise ne nécessite donc aucun nouveau secret. La demande n'a pas de corps (vide ou `{}`). Suspendre une application déjà suspendue ne change rien et renvoie l'application courante avec la même version. La modification est écrite dans le journal d'audit de gestion sous `application.updated` et publiée sous forme d'événements `application_changed` et `application_status_changed`.

## Requête

**En-têtes** : `If-Match: "<version>"` (facultatif). Avec `If-Match`, la modification ne s'applique qu'à cette version (`412` sinon) ; sans lui, la dernière version est utilisée et la requête est relancée si un autre écrivain modifie l'application en même temps. Envoyez un en-tête `Idempotency-Key` pour rendre les nouvelles tentatives sûres.

| Paramètre | Dans | Obligatoire | Description |
|---|---|---|---|
| `application_id` | path | oui | Identifiant de l'application, préfixé `app_`. |

## Réponse

`200 OK` avec l'application (`"status": "suspended"`) et son `ETag`.

## Erreurs

Chaque erreur est un corps `application/problem+json` avec un `code` stable.

| HTTP | `code` | Quand |
|---|---|---|
| 400 | `malformed_request`, `unknown_field` | Un corps a été envoyé qui n'est pas du JSON valide ou contient un champ inconnu. |
| 401 | `unauthenticated` | La clé d'API est absente, invalide ou révoquée. |
| 403 | `insufficient_permissions` | La clé ne dispose pas de l'autorisation `applications:write`. |
| 404 | `not_found` | L'application n'existe pas dans cet environnement (ou l'identifiant est mal formé). |
| 412 | `precondition_failed` | La version dans `If-Match` est périmée. |
| 429 | `rate_limited` | La limite de débit a été dépassée ; respectez `Retry-After`. |
| 503 | `service_unavailable` | Une dépendance est temporairement indisponible ; réessayez plus tard. |

## Exemple

```bash
curl -X POST https://api.eu.keenauth.com/v1/applications/app_6f8d0cjgbmf0gtn2rg6pscp3cg:suspend \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)"
```

CLI : `keenauth applications suspend app_6f8d0cjgbmf0gtn2rg6pscp3cg --yes`
