
# Eine Konfigurationsrevision wiederherstellen

`POST /v1/config-revisions/{revision_id}:restore` · Berechtigungen `config:write`, `config:read` und die Leseberechtigungen der Typen der Revision

Erstellt einen neuen [Plan](../config-plans/create.md), der die Anwendung rückgängig macht, die die Revision gespeichert hat. Noch ändert sich nichts: Prüfen Sie den Plan und wenden Sie ihn dann mit [`POST /v1/config-plans/{plan_id}:apply`](../config-plans/apply.md) an. Das Zurücksetzen läuft über denselben Weg Plan → Anwendung wie jede andere Änderung, daher gelten dieselben Prüfungen auf veraltete Stände, Löschbestätigung, Geheimnis- und Berechtigungsregeln.

Das Ziel des Plans ist die Revision:

- Ressourcen, die die Anwendung aktualisiert oder gelöscht hat, erhalten die Spezifikation zurück, die sie vor der Anwendung hatten. Gelöschte Ressourcen werden erneut angelegt.
- Ressourcen, die die Anwendung angelegt hat, werden gelöscht. In diesem Fall hat der Plan `prune: true` und umfasst jede aktuelle Ressource der Typen der Revision; Ressourcen, die die Anwendung nicht berührt hat, werden als `no_op` geplant, sodass nur die angelegten gelöscht werden. Zum Anwenden ist `confirm_deletions` nötig, wie bei jedem Plan mit Löschungen.
- Typen, die die Revision nicht abdeckt, bleiben unberührt.

Revisionen enthalten keine Geheimniswerte. Eine Verbindung, die erneut angelegt wird, braucht beim Anwenden des Plans ihr Client-Geheimnis (`requires_secret`, eine Warnung `secret_required`). Ein durch die ursprüngliche Anwendung geändertes Geheimnis wird nicht wiederhergestellt.

## Anfrage

| Parameter | Beschreibung |
|---|---|
| `revision_id` | Die Revisions-ID, `cfgr_…`, aus [der Revisionsliste](list.md). |

Die Anfrage hat keinen Body. Ein leerer Body, `{}` oder `null` wird akzeptiert; jedes Feld wird abgelehnt. Senden Sie einen `Idempotency-Key`-Header, damit Wiederholungen sicher sind.

## Antwort

`201 Created` mit `Location: /v1/config-plans/{plan_id}` und `Cache-Control: no-store`. Der Body ist ein Plan in derselben Form wie [die Antwort der Plan-Erstellung](../config-plans/create.md). Der Plan ist 1 Stunde gültig und zählt auf das Planratenlimit und das Plankontingent der Umgebung. Der Eintrag `config_plan.created` im Verwaltungsprotokoll der Umgebung hält fest, dass der Plan aus dieser Revision stammt.

## Fehler

| HTTP | code | Wann |
|---|---|---|
| 400 | `malformed_request`, `unknown_field` | Der Body ist nicht leer, `{}` oder `null`. |
| 401 | `unauthenticated` | Die Anmeldedaten fehlen, sind ungültig oder widerrufen. |
| 403 | `insufficient_permissions` | Den Anmeldedaten fehlt eine Berechtigung, die der Plan braucht; `required_permissions` listet alle auf. |
| 404 | `not_found` | Die Revision existiert nicht, gehört zu einer anderen Umgebung oder ist älter als 90 Tage. |
| 413 | `config_document_too_large` | Das Dokument des Plans würde 5.000 Ressourcen oder 10 MiB überschreiten. |
| 422 | `validation_failed` | Die Revision kann nicht mehr wiederhergestellt werden; siehe unten. `errors[].pointer` zeigt in die Revision (`/revision/<kind>/<key>/...`). |
| 429 | `rate_limited` | Das Planratenlimit oder das Plankontingent der Umgebung wurde erreicht; wiederholen Sie die Anfrage nach der Zeit aus `Retry-After`. |
| 503 | `service_unavailable` | Die Plankapazität ist ausgelastet oder eine Abhängigkeit ist vorübergehend nicht verfügbar; wiederholen Sie die Anfrage nach der Zeit aus `Retry-After`. |

| `errors[].code` | Bedeutung |
|---|---|
| `not_restorable` | `/revision_id`: Die Revision deckt einen Typ ab, den es nicht mehr gibt. |
| `invalid` | Eine gespeicherte Spezifikation passt nicht mehr zum aktuellen Konfigurationsschema. |
| `unresolved_reference` | Eine wiederhergestellte Ressource verweist auf einen `key`, der nicht existieren wird. |
| `key_in_use` | Der `key` gehört jetzt zu einer Anwendung oder API, die die Konfiguration nicht verwaltet. |
| `still_referenced` | `/revision/created`: Eine durch die Anwendung angelegte Ressource wird noch von einer bleibenden Ressource referenziert. |

## Beispiel

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