
# アカウントロックを一覧表示する

`GET /v1/attack-protection/lockouts` · 権限 `attack-protection:read`

環境の未解除のアカウントロックを、古いものから順に一覧表示します。ブルートフォース対策は、多数回失敗したあとに、ユーザーのサインイン経路（たとえば `password` や `totp`）を 1 つロックします。そのユーザーの他の経路は開いたままです。期限切れのロックはその経路をもうブロックしないため、一覧には表示されません。一覧は前方へのページングのみに対応し、総件数は返しません。レスポンスには IP アドレスも、失敗カウンターのキーも含まれません。

## リクエスト

| パラメータ | 入力 | 必須 | 説明 |
|---|---|---|---|
| `limit` | query | いいえ | 1 ページあたりの件数。1〜100（既定値は 20）。 |
| `after` | query | いいえ | 前のページの `list_metadata.after` から取得したカーソル。 |

`before` と `order=desc` はサポートされておらず、指定すると `422` を返します。

## レスポンス

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

| フィールド | 説明 |
|---|---|
| `id` | ロック ID。`lck_` で始まります。`user.unlocked` イベントも同じ ID を含みます。 |
| `user_id` | ロックされたユーザーです。 |
| `path` | ロックされたサインイン経路です。`password`、`totp`、`sms_2fa`、`email_2fa`、`otp`、または `recovery_code` です。 |
| `locked_at`、`expires_at` | ロックが始まった時刻と、自動的に解除される時刻です。 |
| `failure_count` | ロックの原因になった、期間内の失敗回数です。 |

## エラー

すべてのエラーは、安定した `code` を含む `application/problem+json` ボディとして返されます。

| HTTP | `code` | 発生条件 |
|---|---|---|
| 400 | `invalid_cursor` | カーソルの形式が不正か、別の一覧のものです。 |
| 422 | `validation_failed` | `limit` が範囲外か、`before` または降順の `order` が送信されました。 |
| 401 | `unauthenticated` | API キーがない、無効、または失効しています。 |
| 403 | `insufficient_permissions` | キーに `attack-protection:read` 権限がありません。 |
| 429 | `rate_limited` | レート制限を超えました。`Retry-After` に従ってください。 |
| 503 | `service_unavailable` | 依存先が一時的に利用できません。後で再試行してください。 |

## 例

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