
# 구성 리비전 목록 조회

`GET /v1/config-revisions` · 권한 `config:read`

성공한 [계획 적용](../config-plans/apply.md)마다 리비전이 저장됩니다. 리비전은 적용 직전의, 변경된 리소스 상태입니다. 이 요청은 환경의 리비전을 최신순으로 나열합니다(`order=asc`로 순서를 뒤집을 수 있습니다). 환경은 최신 50개의 리비전을 유지하며, 각 리비전은 최대 90일 동안 보관됩니다. 리비전으로 되돌아가려면 [복원](restore.md)하세요.

항목에는 메타데이터만 포함됩니다. 저장된 리소스 사양은 반환되지 않으며, 리비전에는 시크릿 값이 포함되지 않습니다(시크릿은 `secret_ref` 자리표시자로만 나타납니다).

## 요청

| 매개변수 | 위치 | 설명 |
|---|---|---|
| `limit` | query | 페이지 크기, 1–100. |
| `after` | query | 다음 페이지의 커서(`list_metadata.after`). |
| `before` | query | 이전 페이지의 커서(`list_metadata.before`). |
| `order` | query | `desc`(기본값, 최신순) 또는 `asc`. |

## 응답

`200 OK`, `Cache-Control: no-store` 포함.

| 필드 | 설명 |
|---|---|
| `id` | 리비전 ID, `cfgr_…`. |
| `plan_id` | 리비전을 저장한 적용의 계획. 계획이 삭제되면 `null`이 됩니다(만료 7일 후). |
| `created_by` | 계획을 적용한 자격 증명. |
| `created_at` | 계획을 적용한 시각. |
| `kinds` | 계획이 다룬 종류. |
| `summary` | 적용의 `create`, `update`, `delete`, `no_op` 개수. |

```json
{
  "data": [
    {
      "id": "cfgr_01m4qpqtywfs7930tb6kqn5rc5",
      "plan_id": "cfgp_01m4qpqtywfs7930tb6kqn5rc5",
      "created_by": "key_01m4qpqtywfs7930tb6kqn5rc5",
      "created_at": "2026-10-19T10:00:00Z",
      "kinds": ["connection"],
      "summary": {"create": 1, "update": 1, "delete": 0, "no_op": 1}
    }
  ],
  "list_metadata": {"before": null, "after": null}
}
```

## 오류

| HTTP | code | 발생 조건 |
|---|---|---|
| 400 | `invalid_cursor` | 커서 형식이 잘못되었거나 다른 요청의 커서입니다. |
| 401 | `unauthenticated` | 자격 증명이 없거나, 잘못되었거나, 취소되었습니다. |
| 403 | `insufficient_permissions` | 자격 증명에 `config:read`가 없습니다. |
| 422 | `validation_failed` | 쿼리 매개변수가 잘못되었습니다(예: `limit`이 1–100 범위를 벗어남). |
| 429 | `rate_limited` | 요청 한도를 초과했습니다. `Retry-After` 기간 이후에 다시 시도하세요. |

## 예시

```bash
curl "https://api.eu.keenauth.com/v1/config-revisions?limit=20" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"

keenauth config revisions list --limit 20
```
