
# Lister les verrouillages de compte

`GET /v1/attack-protection/lockouts` · autorisation `attack-protection:read`

Liste les verrouillages de compte ouverts de l'environnement, du plus ancien au plus récent. La protection contre la force brute verrouille un chemin de connexion d'un utilisateur (par exemple `password` ou `totp`) après trop d'échecs ; les autres chemins de l'utilisateur restent ouverts. Un verrouillage expiré n'est pas listé, car il ne bloque plus le chemin. La liste ne pagine que vers l'avant et ne renvoie aucun nombre total. La réponse ne contient ni adresse IP ni clé de compteur d'échecs.

## Demande

| Paramètre | Dans | Obligatoire | Description |
|---|---|---|---|
| `limit` | requête | non | Éléments par page, de 1 à 100 (par défaut 20). |
| `after` | requête | non | Curseur tiré de `list_metadata.after` de la page précédente. |

`before` et `order=desc` ne sont pas pris en charge et renvoient `422`.

## Réponse

`200 OK`.

```json
{
  "data": [
    {
      "id": "lck_01jaz8m5c3f6t9w2y4b7d0g3k6",
      "user_id": "usr_0a1b2c3d4e5f6g7h8j9k0m1n2p",
      "path": "password",
      "locked_at": "2026-10-20T09:00:00Z",
      "expires_at": "2026-10-20T09:15:00Z",
      "failure_count": 20
    }
  ],
  "list_metadata": {"before": null, "after": null}
}
```

| Champ | Description |
|---|---|
| `id` | Identifiant du verrouillage, préfixé `lck_`. L'événement `user.unlocked` porte le même identifiant. |
| `user_id` | L'utilisateur verrouillé. |
| `path` | Le chemin de connexion verrouillé : `password`, `totp`, `sms_2fa`, `email_2fa`, `otp` ou `recovery_code`. |
| `locked_at`, `expires_at` | Le début du verrouillage et le moment où il se lève automatiquement. |
| `failure_count` | Tentatives échouées dans la fenêtre ayant causé le verrouillage. |

## Erreurs

Chaque erreur est un corps `application/problem+json` accompagné d'un `code` stable.

| HTTP | `code` | Quand |
|---|---|---|
| 400 | `invalid_cursor` | Le curseur est mal formé ou appartient à une autre liste. |
| 422 | `validation_failed` | `limit` est hors plage, ou `before` ou un `order` descendant a été envoyé. |
| 401 | `unauthenticated` | La clé d'API est absente, invalide ou révoquée. |
| 403 | `insufficient_permissions` | La clé ne dispose pas de l'autorisation `attack-protection:read`. |
| 429 | `rate_limited` | La limite de débit a été dépassée ; respectez l'en-tête `Retry-After`. |
| 503 | `service_unavailable` | Une dépendance est temporairement indisponible ; réessayez plus tard. |

## Exemple

```bash
curl https://api.eu.keenauth.com/v1/attack-protection/lockouts?limit=50 \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```

CLI : `keenauth attack-protection lockouts list --limit 50`
