
# 사용자의 인증기 목록 조회

`GET /v1/users/{user_id}/authenticators` · 권한 `users:read`

사용자의 인증기(패스키, TOTP, SMS, 이메일, 푸시 요소)를 생성 시간순으로 한 페이지에 나열합니다. 지난 90일 동안 취소된 인증기도 포함됩니다. 사용자당 인증기 수는 제한되어 있으므로 목록에는 `limit`, `after`, `before`, `order`가 없으며, `list_metadata`는 항상 `null` 값입니다. 메타데이터만 반환되며, 공개 키, 자격 증명 ID, TOTP 비밀 값, 복구 코드는 절대 반환되지 않습니다.

## 조직 범위

조직 관리자를 위한 멤버 진단 보기를 만들려면 `org_id`를 전달하십시오. 이때 키에는 `organizations:read` 권한도 필요합니다. 이 권한이 없으면 아무것도 읽기 전에 `403 insufficient_permissions`로 요청이 실패합니다. 사용자가 해당 조직의 멤버가 아니면(`invited`, `active`, `suspended` 멤버십이 없음) 알 수 없는 사용자와 동일한 응답인 `404 not_found`로 요청이 실패합니다. 사용자가 멤버이면 각 인증기의 종류와 MFA 등록 여부만 표시됩니다. 활성 인증기만 나열되며, `label`, `last_used_at`, `revoked_at`, `revoked_by`, `revoke_reason`은 `null`이고 `synced`는 `false`입니다. 조직 외부에 있는 사용자 기기의 세부 정보는 조직에 속하지 않기 때문입니다. `role`이 `second_factor` 또는 `both`인 활성 인증기가 있으면 MFA가 등록된 것입니다. `org_id`가 없으면 응답은 변경되지 않습니다.

## 요청

| 매개변수 | 위치 | 필수 | 설명 |
|---|---|---|---|
| `user_id` | 경로 | 예 | 사용자 ID이며, 접두사는 `usr_`입니다. |
| `org_id` | 쿼리 | 아니요 | 조직 ID이며, 접두사는 `org_`입니다. 보기를 해당 조직으로 제한합니다. [조직 범위](#조직-범위)를 참조하십시오. `organizations:read`가 필요합니다. |

## 응답

`200 OK`. `data`에는 생성 시간순으로 정렬된 인증기가 담깁니다. 목록이 페이지로 나뉘지 않으므로 `list_metadata`는 항상 `null` 값입니다. 빈 필드는 `null`입니다.

키에 `users:read_pii` 권한이 없으면 `label`은 이니셜(`A. L.`)로 축약됩니다.

```json
{
  "data": [
    {
      "id": "cred_0a1b2c3d4e5f6g7h8j9k0m1n2p",
      "type": "webauthn",
      "role": "both",
      "label": "Laptop",
      "status": "active",
      "synced": true,
      "created_at": "2026-01-15T09:30:00Z",
      "last_used_at": "2026-02-01T08:00:00Z",
      "revoked_at": null,
      "revoked_by": null,
      "revoke_reason": null
    }
  ],
  "list_metadata": {
    "before": null,
    "after": null
  }
}
```

`type`: `webauthn`, `totp`, `sms`, `email`, `push` · `role`: `first_factor`, `second_factor`, `both` · `status`: `pending`, `active`, `revoked`, `clone_suspected`

## 오류

모든 오류는 안정적인 `code`를 포함한 `application/problem+json` 본문으로 반환됩니다.

| HTTP | `code` | 발생 조건 |
|---|---|---|
| 404 | `not_found` | 이 환경에 사용자가 없거나(또는 ID 형식이 잘못됨), `org_id`를 전달했는데 사용자가 해당 조직의 멤버가 아닙니다. |
| 401 | `unauthenticated` | API 키가 없거나 잘못되었거나 취소되었습니다. |
| 403 | `insufficient_permissions` | 키에 `users:read` 권한이 없거나, `org_id`를 전달했는데 키에 `organizations:read`가 없습니다. |
| 429 | `rate_limited` | 요청 한도를 초과했습니다. `Retry-After`를 준수하십시오. |
| 503 | `service_unavailable` | 종속 서비스를 일시적으로 사용할 수 없습니다. 나중에 다시 시도하십시오. |

## 예제

```bash
curl https://api.eu.keenauth.com/v1/users/usr_0a1b2c3d4e5f6g7h8j9k0m1n2p/authenticators \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```

## 개인정보

이 엔드포인트는 개인정보를 다룹니다: 자격 증명. [KeenAuth API의 개인정보](/docs/policies/personal-data)에서 저장되는 항목, 보관 기간, 삭제 방법을 설명합니다. 어떤 필드에도 특수 범주의 개인정보(건강, 생체 정보, 종교, 정치적 견해, 성적 지향)를 보내지 마십시오.
