
# 構成リビジョンの復元

`POST /v1/config-revisions/{revision_id}:restore` · 権限 `config:write`、`config:read`、およびリビジョンの種類の読み取り権限

リビジョンを保存した適用を取り消す新しい[プラン](../config-plans/create.md)を作成します。この時点ではまだ何も変更されません。プランを確認してから、[`POST /v1/config-plans/{plan_id}:apply`](../config-plans/apply.md) で適用してください。ロールバックも他の変更と同じプラン → 適用の経路を通るため、同じ古さのチェック、削除の確認、シークレットと権限のルールが適用されます。

プランの対象はリビジョンです。

- 適用によって更新または削除されたリソースは、適用前の仕様に戻ります。削除されたリソースは再作成されます。
- 適用によって作成されたリソースは削除されます。この場合、プランは `prune: true` となり、リビジョンの種類に属する現在のすべてのリソースを対象にします。適用で変更されなかったリソースは `no_op` として計画されるため、削除されるのは作成されたものだけです。適用には、削除を伴うすべてのプランと同様に `confirm_deletions` が必要です。
- リビジョンが対象としない種類には影響しません。

リビジョンにシークレットの値は含まれません。再作成される接続は、プランの適用時にクライアントシークレットが必要です（`requires_secret`、`secret_required` の警告）。元の適用によって変更されたシークレットは復元されません。

## リクエスト

| パラメータ | 説明 |
|---|---|
| `revision_id` | リビジョンの ID（`cfgr_…`）。[リビジョン一覧](list.md)から取得します。 |

リクエストにボディはありません。空のボディ、`{}`、`null` は受け付けられ、どのフィールドも拒否されます。再試行を安全にするため、`Idempotency-Key` ヘッダーを送信してください。

## レスポンス

`201 Created`。`Location: /v1/config-plans/{plan_id}` と `Cache-Control: no-store` 付き。ボディはプランで、[プラン作成のレスポンス](../config-plans/create.md)と同じ形式です。プランは 1 時間有効で、環境のプラン作成レート制限とプラン数の上限に計上されます。環境の管理ログの `config_plan.created` エントリに、このプランがこのリビジョン由来であることが記録されます。

## エラー

| HTTP | code | 発生条件 |
|---|---|---|
| 400 | `malformed_request`、`unknown_field` | ボディが空、`{}`、`null` のいずれでもありません。 |
| 401 | `unauthenticated` | 認証情報がない、無効、または失効しています。 |
| 403 | `insufficient_permissions` | 認証情報にプランが必要とする権限がありません。`required_permissions` にすべて列挙されます。 |
| 404 | `not_found` | リビジョンが存在しない、別の環境に属する、または 90 日より古いです。 |
| 413 | `config_document_too_large` | プランのドキュメントが 5,000 リソースまたは 10 MiB を超えます。 |
| 422 | `validation_failed` | リビジョンはもう復元できません。下記を参照してください。`errors[].pointer` はリビジョン内（`/revision/<kind>/<key>/...`）を指します。 |
| 429 | `rate_limited` | プランのレート制限または環境のプラン数の上限に達しました。`Retry-After` の時間が経過してから再試行してください。 |
| 503 | `service_unavailable` | プランの処理能力が上限に達しているか、依存先が一時的に利用できません。`Retry-After` の時間が経過してから再試行してください。 |

| `errors[].code` | 意味 |
|---|---|
| `not_restorable` | `/revision_id`: リビジョンが、もう存在しない種類を対象にしています。 |
| `invalid` | 保存された仕様が、現在の構成スキーマと一致しなくなりました。 |
| `unresolved_reference` | 復元されるリソースが、存在しなくなる `key` を参照しています。 |
| `key_in_use` | `key` が、構成で管理されていないアプリケーションまたは API に属するようになりました。 |
| `still_referenced` | `/revision/created`: 適用によって作成されたリソースが、残るリソースからまだ参照されています。 |

## 例

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