
# Kontosperren auflisten

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

Listet die offenen Kontosperren der Umgebung auf, älteste zuerst. Der Brute-Force-Schutz sperrt einen Anmeldeweg eines Benutzers (zum Beispiel `password` oder `totp`) nach zu vielen Fehlversuchen; die übrigen Wege des Benutzers bleiben offen. Eine abgelaufene Sperre wird nicht aufgelistet, weil sie den Weg nicht mehr blockiert. Die Liste blättert nur vorwärts und liefert keine Gesamtzahl. Die Antwort enthält keine IP-Adresse und keinen Schlüssel des Fehlerzählers.

## Anfrage

| Parameter | In | Erforderlich | Beschreibung |
|---|---|---|---|
| `limit` | query | nein | Einträge pro Seite, 1-100 (Standard 20). |
| `after` | query | nein | Cursor aus `list_metadata.after` der vorherigen Seite. |

`before` und `order=desc` werden nicht unterstützt und ergeben `422`.

## Antwort

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

| Feld | Beschreibung |
|---|---|
| `id` | Sperr-ID mit Präfix `lck_`. Das Ereignis `user.unlocked` trägt dieselbe ID. |
| `user_id` | Der gesperrte Benutzer. |
| `path` | Der gesperrte Anmeldeweg: `password`, `totp`, `sms_2fa`, `email_2fa`, `otp` oder `recovery_code`. |
| `locked_at`, `expires_at` | Wann die Sperre begann und wann sie von selbst endet. |
| `failure_count` | Fehlgeschlagene Versuche im Zeitfenster, die zur Sperre geführt haben. |

## Fehler

Jeder Fehler ist ein `application/problem+json`-Body mit einem stabilen `code`.

| HTTP | `code` | Wann |
|---|---|---|
| 400 | `invalid_cursor` | Der Cursor ist fehlerhaft oder gehört zu einer anderen Liste. |
| 422 | `validation_failed` | `limit` liegt außerhalb des Bereichs, oder `before` bzw. eine absteigende `order` wurde gesendet. |
| 401 | `unauthenticated` | Der API-Schlüssel fehlt, ist ungültig oder widerrufen. |
| 403 | `insufficient_permissions` | Dem Schlüssel fehlt die Berechtigung `attack-protection:read`. |
| 429 | `rate_limited` | Das Ratenlimit wurde überschritten; beachten Sie `Retry-After`. |
| 503 | `service_unavailable` | Eine Abhängigkeit ist vorübergehend nicht verfügbar; später erneut versuchen. |

## Beispiel

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