
# 동의 기록

`POST /v1/users/{user_id}/consent-records` · 권한 `consent-records:write`

귀하의 채널에서 얻은 동의를 기록합니다(`method = management_api`). 대상은 법률 문서(`subject_type = document`이며, 동의 목적은 아직 지원되지 않습니다)이고, `state`는 `presented`, `accepted` 또는 `declined`입니다. 버전, 콘텐츠 해시, 로케일은 문서에서 가져오므로 직접 지정할 수 없습니다. `occurred_at`은 기본적으로 현재 시각이며, 미래이거나 5분보다 오래된 시각일 수 없습니다. 기록은 추가만 가능하며 수정하거나 삭제할 수 없습니다.

## 요청

경로 매개변수:

| 필드 | 유형 | 필수 | 설명 |
|---|---|---|---|
| `user_id` | 문자열 | 예 | 사용자 ID(`usr_…`). |

JSON 본문(알 수 없는 필드는 `400 unknown_field`로 거부됩니다):

| 필드 | 유형 | 필수 | 설명 |
|---|---|---|---|
| `Idempotency-Key` | 헤더 | 아니요 | 재시도 요청을 안전하게 만드는 선택 키(16~64자)입니다. |
| `subject_type` | 문자열 | 예 | `document`만 가능합니다. |
| `subject_id` | 문자열 | 예 | 사용자가 확인한 법률 문서 ID(`ldoc_…`)입니다. |
| `state` | 문자열 | 예 | `presented`, `accepted` 또는 `declined`입니다. |
| `application_id` | 문자열 \| null | 아니요 | 애플리케이션(`app_…`)입니다. 생략되고 문서가 애플리케이션 전용이면 문서의 애플리케이션이 기록됩니다. |
| `occurred_at` | 문자열(date-time) | 아니요 | 발생 시각입니다. 기본값은 현재 시각이며, 미래가 아니고 최대 5분 이내여야 합니다. |

## 응답

동의 기록과 함께 `201 Created`를 반환합니다.

```json
{
  "id": "crec_01j9xk3m7q8r2s4t6v8w0y2z4b",
  "user_id": "usr_01j9xk3m7q8r2s4t6v8w0y2z4c",
  "subject_type": "document",
  "subject_id": "ldoc_01j9xk3m7q8r2s4t6v8w0y2z4a",
  "subject_version": "2026-10",
  "content_sha256": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
  "locale": "en",
  "state": "accepted",
  "method": "management_api",
  "application_id": null,
  "occurred_at": "2026-10-05T09:31:12.004211Z"
}
```

## 오류

| HTTP | code | 발생 시점 |
|---|---|---|
| 400 | `unknown_field` | 본문에 알 수 없는 필드가 있습니다. |
| 404 | `not_found` | 이 환경에 사용자 또는 `application_id`가 없습니다. `resource` 확장은 누락된 항목을 `user` 또는 `application`으로 알려줍니다. |
| 415 | `unsupported_media_type` | 콘텐츠 유형이 `application/json`이 아닙니다. |
| 422 | `validation_failed` | 필드가 잘못되었습니다. 알 수 없는 문서(`/subject_id`, `unknown_subject`), `subject_type: purpose`(`not_supported`), 문서에 허용되지 않는 상태, 또는 범위를 벗어난 `occurred_at`입니다. |
| 401 | `unauthenticated` | 자격 증명이 없거나 잘못되었거나 폐기되었습니다. |
| 403 | `insufficient_permissions` | 자격 증명에 필요한 권한이 없습니다. |
| 429 | `rate_limited` | 요청 한도를 초과했습니다. `Retry-After` 기간이 지난 후 다시 시도하십시오. |
| 503 | `service_unavailable` | 종속 서비스를 일시적으로 사용할 수 없습니다. `Retry-After` 기간이 지난 후 다시 시도하십시오. |

## 예제

```bash
curl -X POST https://api.eu.keenauth.com/v1/users/usr_01j9xk3m7q8r2s4t6v8w0y2z4c/consent-records \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"subject_type":"document","subject_id":"ldoc_01j9xk3m7q8r2s4t6v8w0y2z4a","state":"accepted"}'
```

## 개인정보

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