
# Restaurer une révision de configuration

`POST /v1/config-revisions/{revision_id}:restore` · permissions `config:write`, `config:read` et les permissions de lecture des types de la révision

Crée un nouveau [plan](../config-plans/create.md) qui annule l'application ayant enregistré la révision. Rien ne change encore : examinez le plan, puis appliquez-le avec [`POST /v1/config-plans/{plan_id}:apply`](../config-plans/apply.md). Le retour en arrière passe par le même chemin plan → application que toute autre modification ; les mêmes règles de contrôle de fraîcheur, de confirmation de suppression, de secrets et de permissions s'appliquent donc.

La cible du plan est la révision :

- Les ressources que l'application a modifiées ou supprimées retrouvent la spécification qu'elles avaient avant l'application. Les ressources supprimées sont à nouveau créées.
- Les ressources que l'application a créées sont supprimées. Dans ce cas, le plan a `prune: true` et couvre chaque ressource actuelle des types de la révision ; les ressources que l'application n'a pas touchées sont planifiées en `no_op`, de sorte que seules les ressources créées sont supprimées. Son application exige `confirm_deletions`, comme pour tout plan avec suppressions.
- Les types que la révision ne couvre pas ne sont pas touchés.

Les révisions ne contiennent aucune valeur secrète. Une connexion à nouveau créée a besoin de son secret client au moment de l'application du plan (`requires_secret`, un avertissement `secret_required`). Un secret modifié par l'application d'origine n'est pas restauré.

## Requête

| Paramètre | Description |
|---|---|
| `revision_id` | L'identifiant de la révision, `cfgr_…`, issu de [la liste des révisions](list.md). |

La requête n'a pas de corps. Un corps vide, `{}` ou `null` est accepté ; tout champ est rejeté. Envoyez un en-tête `Idempotency-Key` pour que les nouvelles tentatives soient sûres.

## Réponse

`201 Created` avec `Location: /v1/config-plans/{plan_id}` et `Cache-Control: no-store`. Le corps est un plan, dans la même forme que [la réponse de création de plan](../config-plans/create.md). Le plan est valide 1 heure et compte dans la limite de débit et le quota de plans de l'environnement. L'entrée `config_plan.created` du journal de gestion de l'environnement indique que le plan provient de cette révision.

## Erreurs

| HTTP | code | Quand |
|---|---|---|
| 400 | `malformed_request`, `unknown_field` | Le corps n'est pas vide, `{}` ou `null`. |
| 401 | `unauthenticated` | L'identifiant est absent, invalide ou révoqué. |
| 403 | `insufficient_permissions` | L'identifiant n'a pas une permission nécessaire au plan ; `required_permissions` les liste toutes. |
| 404 | `not_found` | La révision n'existe pas, appartient à un autre environnement ou a plus de 90 jours. |
| 413 | `config_document_too_large` | Le document du plan dépasserait 5 000 ressources ou 10 Mio. |
| 422 | `validation_failed` | La révision ne peut plus être restaurée ; voir ci-dessous. `errors[].pointer` pointe dans la révision (`/revision/<kind>/<key>/...`). |
| 429 | `rate_limited` | La limite de débit des plans ou le quota de plans de l'environnement a été atteint ; réessayez après la durée indiquée par `Retry-After`. |
| 503 | `service_unavailable` | La capacité de planification est saturée ou une dépendance est temporairement indisponible ; réessayez après la durée indiquée par `Retry-After`. |

| `errors[].code` | Signification |
|---|---|
| `not_restorable` | `/revision_id` : la révision couvre un type qui n'existe plus. |
| `invalid` | Une spécification enregistrée ne correspond plus au schéma de configuration actuel. |
| `unresolved_reference` | Une ressource restaurée fait référence à une `key` qui n'existera pas. |
| `key_in_use` | La `key` appartient désormais à une application ou à une API que la configuration ne gère pas. |
| `still_referenced` | `/revision/created` : une ressource créée par l'application est encore référencée par une ressource conservée. |

## Exemple

```bash
curl -X POST "https://api.eu.keenauth.com/v1/config-revisions/cfgr_01m4qpqtywfs7930tb6kqn5rc5:restore" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)"

keenauth config revisions restore cfgr_01m4qpqtywfs7930tb6kqn5rc5
keenauth config apply cfgp_01m4qpqtywfs7930tb6kqn5rc5
```
