
# ユーザーのセッションを一覧表示する

`GET /v1/users/{user_id}/sessions` · 権限 `sessions:read`

ユーザーのセッションを 1 ページで一覧表示します。最後にアクセスされたものが先頭に来る順で、最大 1,000 件です。一覧には `limit`、`after`、`before`、`order` がなく、`list_metadata` は常に `null` の値になります。既定では有効なセッションのみが返されます。`include_inactive=true` を指定すると、（保持期間内の）期限切れおよび取り消されたセッションも返されます。IP アドレスは完全な形で表示され、すべての表示は管理監査ログに記録されます。Cookie、トークン、デバイスのフィンガープリントは決して返されません。

## 組織スコープ

組織の管理者向けにメンバーの診断ビューを作成する場合は、`org_id` を指定します。この場合、キーには `organizations:read` 権限も必要です。この権限がないと、何も読み取られる前に `403 insufficient_permissions` でリクエストが失敗します。ユーザーがその組織のメンバーでない場合（`invited`、`active`、`suspended` のいずれのメンバーシップもない場合）、リクエストは `404 not_found` で失敗します。これは存在しないユーザーの場合と同じレスポンスです。ユーザーがメンバーである場合、返されるのはその組織のポリシーの下で開始されたセッション（`org_id` がその組織であるセッション）のみです。他の組織の文脈や、どの組織にも属さないユーザーのセッションは返されません。このビューでは `ip_address` と `user_agent` は `null` です。`org_id` を指定しない場合、レスポンスは変わりません。

## リクエスト

| パラメータ | 位置 | 必須 | 説明 |
|---|---|---|---|
| `user_id` | path | はい | ユーザー ID。接頭辞は `usr_`。 |
| `include_inactive` | query | いいえ | `true` を指定すると、期限切れおよび取り消されたセッションも返します。既定値は `false`。 |
| `org_id` | query | いいえ | 組織 ID。接頭辞は `org_`。ビューをその組織に限定します。[組織スコープ](#組織スコープ)を参照してください。`organizations:read` が必要です。 |

## レスポンス

`200 OK`。空のフィールドは `null` です。

```json
{
  "data": [
    {
      "id": "ses_0a1b2c3d4e5f6g7h8j9k0m1n2p",
      "user_id": "usr_0a1b2c3d4e5f6g7h8j9k0m1n2p",
      "status": "active",
      "login_host": "login.example.com",
      "auth_time": "2026-02-01T08:00:00Z",
      "acr": "mfa",
      "amr": ["pwd", "otp"],
      "created_at": "2026-02-01T08:00:00Z",
      "last_seen_at": "2026-02-01T09:15:00Z",
      "idle_expires_at": "2026-02-08T09:15:00Z",
      "absolute_expires_at": "2026-03-03T08:00:00Z",
      "org_id": null,
      "ip_address": "203.0.113.10",
      "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_0)",
      "revoked_at": null,
      "revoke_reason": null
    }
  ],
  "list_metadata": {
    "before": null,
    "after": null
  }
}
```

`status`: `active`、`expired`、`revoked` · `acr`: `1fa`、`mfa`、`phr` · `org_id`: セッションが属する組織（ある場合）。

## エラー

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

| HTTP | `code` | 発生条件 |
|---|---|---|
| 422 | `validation_failed` | `include_inactive` が `true` または `false` ではありません。 |
| 404 | `not_found` | この環境にユーザーが存在しない（または ID の形式が不正）場合、または `org_id` を指定した際にユーザーがその組織のメンバーでない場合。 |
| 401 | `unauthenticated` | API キーが見つからない、無効である、または取り消されています。 |
| 403 | `insufficient_permissions` | キーに `sessions:read` 権限がない場合、または `org_id` を指定した際にキーに `organizations:read` がない場合。 |
| 429 | `rate_limited` | レート制限を超えました。`Retry-After` に従ってください。 |
| 503 | `service_unavailable` | 依存先が一時的に利用できません。しばらくしてから再試行してください。 |

## 例

```bash
curl "https://api.eu.keenauth.com/v1/users/usr_0a1b2c3d4e5f6g7h8j9k0m1n2p/sessions?include_inactive=true" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```

CLI: `keenauth users sessions list usr_0a1b2c3d4e5f6g7h8j9k0m1n2p --include-inactive`

## 個人データ

このエンドポイントは個人データを扱います。対象はセッションです。[KeenAuth API における個人データ](/docs/policies/personal-data)では、保存される内容、保持期間、削除方法を説明しています。いずれのフィールドにも、特別な種類の個人データ（健康、生体情報、宗教、政治的意見、性的指向）を送信しないでください。
