
# 사용자에게 미인증 보조 이메일 주소 추가

`POST /v1/users/{user_id}/emails` · 권한 `users:write`

사용자에게 인증되지 않은 보조 이메일 주소를 추가합니다. 주소는 저장 전에 정규화됩니다. 사용자가 이미 같은 주소를 가지고 있으면 행을 새로 쓰지 않고 기존 행을 반환합니다(해당 행은 인증되었거나 기본 주소일 수 있습니다). 따라서 요청을 반복해도 안전합니다. 새 행은 API 키를 행위자로 하여 `user.email_added`로 관리 감사 로그에 기록되며, 주소 자체는 감사 기록에 기록되지 않습니다. 주소를 인증하려면 `POST /v1/users/{user_id}/emails/{email_id}:send-verification`으로 인증 이메일을 보내거나 `:verify`로 인증됨 표시를 하십시오.

## 요청

| 매개변수 | 위치 | 필수 여부 | 설명 |
|---|---|---|---|
| `user_id` | path | 예 | 사용자 ID이며 `usr_` 접두사가 붙습니다. |

| 필드 | 유형 | 필수 여부 | 설명 |
|---|---|---|---|
| `email` | string | 예 | 주소이며 최대 320자입니다. |

## 응답

`201 Created`와 이메일 행을 반환합니다. `users:read_pii` 권한이 없으면 주소는 마스킹됩니다(`a***@e***.com`).

```json
{
  "id": "0191f0a0-3333-7444-8555-666666666666",
  "email": "ada@example.com",
  "verified": false,
  "primary": false,
  "created_at": "2026-01-15T09:30:00Z"
}
```

## 오류

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

| HTTP | `code` | 발생 조건 |
|---|---|---|
| 400 | `malformed_request`, `unknown_field` | 본문이 유효한 JSON이 아니거나 알 수 없는 필드가 있습니다. |
| 409 | `conflict` | 이 환경의 다른 사용자가 해당 주소를 인증했습니다(`errors[]`: `/email`, `email_taken`). |
| 409 | `email_limit_reached` | 사용자가 이미 주소 10개를 가지고 있습니다. |
| 415 | `unsupported_media_type` | `Content-Type: application/json` 없이 본문을 보냈습니다. |
| 422 | `validation_failed` | `email`이 없거나 비어 있거나, 320자를 넘거나, 올바른 주소가 아니거나, 타입이 잘못되었습니다. |
| 404 | `not_found` | 이 환경에 사용자가 없거나, 삭제 중이거나, ID 형식이 잘못되었습니다. |
| 401 | `unauthenticated` | API 키가 없거나 잘못되었거나 취소되었습니다. |
| 403 | `insufficient_permissions` | 키에 `users:write` 권한이 없습니다. |
| 429 | `rate_limited` | 요청 한도를 초과했습니다. `Retry-After`를 준수하십시오. |
| 503 | `service_unavailable` | 종속 서비스를 일시적으로 사용할 수 없습니다. 나중에 다시 시도하십시오. |

## 예시

```bash
curl -X POST https://api.eu.keenauth.com/v1/users/usr_0a1b2c3d4e5f6g7h8j9k0m1n2p/emails \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"email": "ada@example.com"}'
```

## 개인정보

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