
# Elenca i blocchi degli account

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

Elenca i blocchi degli account attivi nell'ambiente, dal più vecchio. La protezione dalla forza bruta blocca un percorso di accesso di un utente (per esempio `password` o `totp`) dopo troppi tentativi falliti; gli altri percorsi dell'utente restano aperti. Un blocco scaduto non viene elencato, perché non blocca più il percorso. L'elenco procede solo in avanti e non restituisce un conteggio totale. La risposta non contiene indirizzi IP né la chiave del contatore dei tentativi falliti.

## Richiesta

| Parametro | In | Obbligatorio | Descrizione |
|---|---|---|---|
| `limit` | query | no | Elementi per pagina, da 1 a 100 (predefinito 20). |
| `after` | query | no | Cursore da `list_metadata.after` della pagina precedente. |

`before` e `order=desc` non sono supportati e restituiscono `422`.

## Risposta

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

| Campo | Descrizione |
|---|---|
| `id` | ID del blocco, con prefisso `lck_`. L'evento `user.unlocked` riporta lo stesso ID. |
| `user_id` | L'utente bloccato. |
| `path` | Il percorso di accesso bloccato: `password`, `totp`, `sms_2fa`, `email_2fa`, `otp` o `recovery_code`. |
| `locked_at`, `expires_at` | Quando il blocco è iniziato e quando si rimuove da solo. |
| `failure_count` | Tentativi falliti nella finestra che ha causato il blocco. |

## Errori

Ogni errore è un body `application/problem+json` con un `code` stabile.

| HTTP | `code` | Quando |
|---|---|---|
| 400 | `invalid_cursor` | Il cursore è malformato o appartiene a un altro elenco. |
| 422 | `validation_failed` | `limit` è fuori intervallo, oppure è stato inviato `before` o un `order` discendente. |
| 401 | `unauthenticated` | La chiave API manca, non è valida o è stata revocata. |
| 403 | `insufficient_permissions` | La chiave non ha il permesso `attack-protection:read`. |
| 429 | `rate_limited` | È stato superato il limite di frequenza; attendi il periodo indicato in `Retry-After`. |
| 503 | `service_unavailable` | Una dipendenza non è disponibile temporaneamente; riprova più tardi. |

## Esempio

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