
# Lister les révisions de configuration

`GET /v1/config-revisions` · permission `config:read`

Chaque [application de plan](../config-plans/apply.md) réussie enregistre une révision : l'état des ressources qu'elle a modifiées, tel qu'il était juste avant l'application. Cette requête liste les révisions de l'environnement, les plus récentes en premier (`order=asc` inverse l'ordre). Un environnement conserve ses 50 révisions les plus récentes, chacune pendant 90 jours au plus. Pour revenir à une révision, [restaurez-la](restore.md).

Les éléments ne contiennent que des métadonnées. Les spécifications de ressources enregistrées ne sont pas renvoyées, et les révisions ne contiennent jamais de valeurs secrètes (les secrets n'apparaissent que sous forme de marqueurs `secret_ref`).

## Requête

| Paramètre | Dans | Description |
|---|---|---|
| `limit` | query | Taille de page, 1–100. |
| `after` | query | Curseur de la page suivante (`list_metadata.after`). |
| `before` | query | Curseur de la page précédente (`list_metadata.before`). |
| `order` | query | `desc` (par défaut, les plus récentes en premier) ou `asc`. |

## Réponse

`200 OK` avec `Cache-Control: no-store`.

| Champ | Description |
|---|---|
| `id` | L'identifiant de la révision, `cfgr_…`. |
| `plan_id` | Le plan dont l'application a enregistré la révision ; `null` une fois le plan supprimé (7 jours après son expiration). |
| `created_by` | L'identifiant qui a appliqué le plan. |
| `created_at` | Moment où le plan a été appliqué. |
| `kinds` | Les types couverts par le plan. |
| `summary` | Les nombres `create`, `update`, `delete` et `no_op` de l'application. |

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

## Erreurs

| HTTP | code | Quand |
|---|---|---|
| 400 | `invalid_cursor` | Le curseur est mal formé ou appartient à une autre requête. |
| 401 | `unauthenticated` | L'identifiant est absent, invalide ou révoqué. |
| 403 | `insufficient_permissions` | L'identifiant n'a pas `config:read`. |
| 422 | `validation_failed` | Un paramètre de requête est invalide (par exemple `limit` hors de 1–100). |
| 429 | `rate_limited` | La limite de débit a été dépassée ; réessayez après la durée indiquée par `Retry-After`. |

## Exemple

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

keenauth config revisions list --limit 20
```
