
# 사용자 동의 목록 조회

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

사용자가 애플리케이션에 부여한 OAuth 동의를 최신순으로 나열합니다. 활성 동의만 반환됩니다. 철회되었거나 같은 애플리케이션의 더 최신 동의로 대체된 동의는 목록에 포함되지 않습니다. 목록은 앞으로만 페이징되며 전체 개수는 반환하지 않습니다. 응답에는 사용자가 본 동의 화면의 텍스트가 포함되지 않습니다.

## 요청

| 매개변수 | 위치 | 필수 | 설명 |
|---|---|---|---|
| `user_id` | path | 예 | `usr_` 접두사가 붙은 사용자 ID입니다. |
| `limit` | query | 아니요 | 페이지당 항목 수, 1-100(기본값 20)입니다. |
| `after` | query | 아니요 | 같은 사용자의 이전 페이지에 있는 `list_metadata.after` 커서입니다. |

`before`와 `order=asc`는 지원되지 않으며 `422`를 반환합니다.

## 응답

`200 OK`. 비어 있는 필드는 `null`입니다.

```json
{
  "data": [
    {
      "id": "cns_01jb2k8m5c3f6t9w2y4b7d0g3k",
      "user_id": "usr_0a1b2c3d4e5f6g7h8j9k0m1n2p",
      "application_id": "app_0a1b2c3d4e5f6g7h8j9k0m1n2p",
      "api_id": "api_0a1b2c3d4e5f6g7h8j9k0m1n2p",
      "org_id": null,
      "scopes": ["openid", "profile", "orders:read"],
      "authorization_details_types": [],
      "granted_at": "2026-10-20T09:00:00Z",
      "consent_screen_version": "3",
      "locale": "en",
      "prompt_reason": "scope_expansion"
    }
  ],
  "list_metadata": {"before": null, "after": null}
}
```

| 필드 | 설명 |
|---|---|
| `id` | `cns_` 접두사가 붙은 동의 ID입니다. |
| `application_id` | 동의가 부여된 애플리케이션입니다. |
| `api_id` | 동의가 연결된 API입니다(있는 경우). |
| `org_id` | 동의가 부여된 조직 컨텍스트입니다(있는 경우). |
| `scopes` | 부여된 스코프이며, 정렬되고 중복이 없습니다. |
| `authorization_details_types` | 부여된 세부 권한 부여 요청 유형입니다. 없으면 비어 있습니다. |
| `consent_screen_version`, `locale` | 사용자가 수락한 동의 화면의 버전과 언어입니다. |
| `prompt_reason` | 동의를 요청한 이유입니다: `first`, `scope_expansion`, `prompt_consent` 또는 `skip_consent`(동의 화면이 없는 자사 애플리케이션)입니다. |

## 오류

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

| HTTP | `code` | 발생 조건 |
|---|---|---|
| 400 | `invalid_cursor` | 커서 형식이 잘못되었거나 다른 목록에 속합니다. |
| 422 | `validation_failed` | `limit`이 범위를 벗어났거나, `before` 또는 오름차순 `order`가 전송되었습니다. |
| 404 | `not_found` | 이 환경에 사용자가 없거나 ID 형식이 잘못되었습니다. |
| 401 | `unauthenticated` | API 키가 없거나 유효하지 않거나 취소되었습니다. |
| 403 | `insufficient_permissions` | 키에 `users:read` 권한이 없습니다. |
| 429 | `rate_limited` | 요청 한도를 초과했습니다. `Retry-After`를 따르십시오. |
| 503 | `service_unavailable` | 종속 서비스를 일시적으로 사용할 수 없습니다. 나중에 다시 시도하십시오. |

## 예제

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

CLI: `keenauth users consents list usr_0a1b2c3d4e5f6g7h8j9k0m1n2p --limit 50`

## 개인정보

이 엔드포인트는 개인정보인 동의 기록을 포함합니다. [KeenAuth API의 개인정보](/docs/policies/personal-data)에서 저장되는 내용, 보관 기간, 삭제 방법을 확인하십시오. 어떤 필드에도 민감정보(건강, 생체 정보, 종교, 정치적 견해, 성적 지향)를 보내지 마십시오.
