Verification.Result
확인 시도 결과와 함께 발생합니다.
필드
| 필드 | 유형 | 필수 | 설명 |
|---|---|---|---|
eventType | string | 예 | 항상 "Verification.Result" |
data | object | 예 | 확인 결과 데이터 |
data.id | string (UUID) | 예 | 고유 확인 ID |
data.status | string | 예 | PASS 또는 FAIL일 수 있음 |
data.ageCategory | string | 아니오 | 추정 연령 카테고리. adult, digital-youth 또는 digital-minor일 수 있음. PASS 상태의 경우 항상 존재합니다. FAIL 상태의 경우, failureReason이 age-criteria-not-met이고 age가 존재하는 경우에만 존재합니다 |
data.method | string | 아니오 | 사용된 확인 방법. PASS 상태의 경우 항상 존재합니다. FAIL 상태의 경우, failureReason이 age-criteria-not-met인 경우에만 존재합니다 |
data.failureReason | string | 아니오 | 확인이 실패한 이유. status가 FAIL인 경우 항상 존재합니다. age-criteria-not-met, max-attempts-exceeded 또는 fraudulent-activity-detected일 수 있습니다 |
data.age | object | 아니오 | 연령 세부 정보. age.low와 age.high가 모두 사용 가능한 경우 존재합니다. FAIL 상태의 경우, failureReason이 age-criteria-not-met인 경우에만 존재합니다 |
data.age.low | number | 아니오 | 추정 연령의 하한. ID 문서 확인과 같은 하드 연령 확인 방법의 경우 이것은 정확한 연령입니다 |
data.age.high | number | 아니오 | 추정 연령의 상한. ID 문서 확인과 같은 하드 연령 확인 방법의 경우 이것은 정확한 연령입니다 |
data.dob | string (YYYY-MM-DD) | 아니오 | 확인된 생년월일. 확인 방법이 제공하는 경우에만 포함됩니다. 방법에서 사용 가능한 경우 항상 포함됩니다 |
예시
- PASS
- FAIL (결정적)
- FAIL (비결정적)
{
"eventType": "Verification.Result",
"data": {
"id": "4e57301e-a4d1-498f-ac3f-f3d4de19abf6",
"status": "PASS",
"method": "id-document",
"age": {
"low": 43,
"high": 43
},
"dob": "1981-06-20"
}
}
{
"eventType": "Verification.Result",
"data": {
"id": "fe10accb-b845-4fc8-ac44-6130b7e0b8bd",
"status": "FAIL",
"method": "age-estimation-scan",
"age": {
"low": 13,
"high": 17
},
"failureReason": "age-criteria-not-met"
}
}
{
"eventType": "Verification.Result",
"data": {
"id": "123e4567-e89b-12d3-a456-426614174002",
"status": "FAIL",
"failureReason": "max-attempts-exceeded"
}
}
검증 이벤트 계약
개요
이 섹션은 두 가지 메커니즘을 통해 제공되는 검증 상태의 API 계약을 정의합니다:
- Webhook 이벤트: 검증이 완료될 때 전송되는
Verification.ResultWebhook 이벤트 - API 엔드포인트: 검증 상태를 폴링하기 위한
GET /age-verification/get-status엔드포인트
이 계약은 모든 가능한 결과 유형에 대한 필드 존재 규칙, 데이터 유형 및 해석 가이드를 지정합니다. 두 메커니즘 모두 유사한 데이터를 제공하지만 상태 값, 필드 존재 및 구조에 중요한 차이가 있으므로 주의해야 합니다.
검증 결과는 UI 제어 목적으로 DOM 메시지를 통해 프론트엔드 애플리케이션에도 전달됩니다. 그러나 통합 로직의 경우 신뢰할 수 있는 권위 있는 데이터 소스로 webhook 이벤트와 GET /age-verification/get-status 엔드포인트 응답만 고려해야 합니다。DOM 메시지는 프론트엔드 애플리케이션 상태 관리 전용으로 제공되며 중요한 비즈니스 결정이나 데이터 지속성의 기반으로 사용되어서는 안 됩니다.
데이터 구조
Webhook 이벤트 구조
Webhook 이벤트는 이벤트 봉투로 래핑됩니다:
{
"eventType": "Verification.Result",
"data": {
"id": "uuid",
"status": "PASS" | "FAIL",
"ageCategory": "adult" | "digital-youth" | "digital-minor" | null,
"method": "id-document" | "credit-card" | "self-confirmation" | "social-security-number" | "email-confirmation" | "age-estimation-scan" | null,
"age": {
"low": number,
"high": number
} | null,
"dob": "YYYY-MM-DD" | null,
"failureReason": string | null
}
}
API 엔드포인트 응답 구조
GET /age-verification/get-status 엔드포인트는 직접 응답을 반환합니다:
{
"id": "uuid",
"status": "PASS" | "FAIL" | "PENDING" | "IN_PROGRESS",
"ageCategory": "adult" | "digital-youth" | "digital-minor" | null,
"method": "id-document" | "credit-card" | "self-confirmation" | "social-security-number" | "email-confirmation" | "age-estimation-scan" | null,
"age": {
"low": number,
"high": number
} | null,
"dob": "YYYY-MM-DD" | null,
"failureReason": string | null
}
쿼리 매개변수:
id(필수): 검증 IDincludeDob(선택 사항, 기본값:false):true인 경우 사용 가능한 경우dob필드를 포함합니다
전체 엔드포인트 문서는 GET /age-verification/get-status를 참조하세요.
Webhook과 API 엔드포인트 간의 주요 차이점
| 측면 | Webhook 이벤트 | API 엔드포인트 |
|---|---|---|
| 상태 값 | PASS 또는 FAIL만 | PASS, FAIL, PENDING, IN_PROGRESS |
| 구조 | { eventType, data }로 래핑 | 직접 응답 객체 |
| DOB 필드 | 사용 가능한 경우 항상 포함 | includeDob=true 쿼리 매개변수가 설정된 경우에만 포함 |
| AgeCategory | PASS 상태의 경우, 그리고 FAIL 상태에서 failureReason이 age-criteria-not-met인 경우 존재 | PASS와 FAIL 상태 모두에서 연령 데이터가 사용 가능한 경우 존재 |
| Method | 상태가 PASS인 경우에만 존재 | PASS와 FAIL 상태 모두에서 존재 |
| 사용 가능한 시점 | 검증이 완료될 때만 | 검증 중을 포함하여 언제든지 폴링 가능 |
상태 유형
PASS
검증이 성공적으로 사용자가 연령 기준을 충족한다고 확인했습니다.
사용 가능성:
- Webhook: ✅ 검증이 성공적으로 완료될 때 전송됩니다
- API 엔드포인트: ✅ 검증이 완료되고 성공했을 때 반환됩니다
FAIL
검증이 사용자가 연령 기준을 충족하지 않는다고 확인했거나, 결정적인 연령 판정을 내릴 수 없었거나, 기만 행위가 감지되어 검증 프로세스가 실패했습니다. 이러한 시나리오는 적절한 failureReason 값을 가진 FAIL 상태가 됩니다.
사용 가능성:
- Webhook: ✅ 검증이 실패로 완료될 때 전송됩니다
- API 엔드포인트: ✅ 검증이 완료되고 실패했을 때 반환됩니다
상태: PENDING
검증 요청이 생성되었지만 아직 처리가 시작되지 않았습니다.
사용 가능성:
- Webhook: ❌ 전송되지 않음 (webhook은 완료 시에만 트리거됨)
- API 엔드포인트: ✅ 검증이 초기 상태일 때 반환됩니다
PENDING의 API 엔드포인트 응답:
id(UUID) - 항상 포함됩니다status("PENDING") - 항상 포함됩니다- 다른 모든 필드는 없습니다
상태: IN_PROGRESS
검증이 현재 처리 중입니다.
사용 가능성:
- Webhook: ❌ 전송되지 않음 (webhook은 완료 시에만 트리거됨)
- API 엔드포인트: ✅ 검증이 활발히 처리되고 있을 때 반환됩니다
IN_PROGRESS의 API 엔드포인트 응답:
id(UUID) - 항상 포함됩니다status("IN_PROGRESS") - 항상 포함됩니다- 다른 모든 필드는 없습니다
상태별 필드 존재 규칙
Webhook 이벤트
Webhook 이벤트는 검증이 완료될 때(상태가 PASS 또는 FAIL)에만 전송됩니다. PENDING 또는 IN_PROGRESS와 같은 중간 상태는 포함하지 않습니다.
상태: PASS
Webhook 이벤트
항상 포함:
id(UUID)status("PASS")method(string) - 사용된 검증 방법
때때로 포함:
ageCategory(string) -adult,digital-youth또는digital-minor중 하나 (age가 존재하는 경우에만 존재)age(object) -low와high경계를 모두 포함 (검증 방법이 연령 정보를 제공하는 경우에만 존재)dob(string, YYYY-MM-DD 형식) - 확인된 생년월일, 검증 방법이 제공하는 경우에만 (특정 방법에 대해서는 생년월일 필드 섹션 참조). 사용 가능한 경우 항상 포함됩니다.
포함되지 않음:
failureReason
API 엔드포인트
항상 포함:
id(UUID)status("PASS")method(string) - 사용된 검증 방법 (사용 가능한 경우)
때때로 포함:
ageCategory(string) -adult,digital-youth또는digital-minor중 하나 (연령이 존재하는 경우)age(object) -low와high경계를 모두 포함 (검증 방법이 연령 정보를 제공하는 경우)
때때로 포함:
dob(string, YYYY-MM-DD 형식) -includeDob=true쿼리 매개변수가 설정되고 검증 방법이 제공하는 경우에만 포함됩니다 (특정 방법에 대해서는 생년월일 필드 섹션 참조)
포함되지 않음:
failureReason
- PASS 상태를 성공한 검증으로 처리합니다
ageCategory필드가 존재하는 경우 사용자 권한 및 액세스 수준을 결정하는 데 사용합니다ageCategory가 존재하는 경우 액세스 제어에age.low또는age.high만 의존하지 말고 대신ageCategory를 사용합니다dob가 제공되는 경우 사용할 수 있지만 항상 사용 가능하다고 가정하지 마세요- API 엔드포인트의 경우: DOB 데이터가 필요한 경우 쿼리 매개변수에서
includeDob=true를 설정합니다 (GET /age-verification/get-status참조)
상태: FAIL
Webhook 이벤트
항상 포함:
id(UUID)status("FAIL")failureReason(string) - 실패 이유
때때로 포함:
method(string) - 실패가max-attempts-exceeded또는fraudulent-activity-detected로 인한 것이 아닌 경우에만 존재age(object) -failureReason이age-criteria-not-met인 경우에만 존재ageCategory(string) -failureReason이age-criteria-not-met이고age가 존재하는 경우에만 존재dob(string) - 검증 방법이 제공하는 경우에만 존재 (특정 방법에 대해서는 생년월일 필드 섹션 참조). 사용 가능한 경우 항상 포함됩니다.
API 엔드포인트
항상 포함:
id(UUID)status("FAIL")failureReason(string) - 실패 이유
때때로 포함:
method(string) - 실패가age-criteria-not-met로 인한 경우에만 존재age(object) -failureReason이age-criteria-not-met인 경우에만 존재ageCategory(string) -age가 존재하는 경우에만 존재dob(string) -includeDob=true쿼리 매개변수가 설정되고 검증 방법이 제공하는 경우에만 포함됩니다 (특정 방법에 대해서는 생년월일 필드 섹션 참조)
포함되지 않음:
age가 존재하지 않는 경우의ageCategory
FAIL상태를 실패한 검증으로 처리하고 액세스 또는 권한을 부여하지 마세요- 검증이 실패한 이유를 이해하기 위해 항상
failureReason을 확인하세요 - FAIL 상태에
age필드가 존재한다고 가정하지 마세요. 사용할 수 없을 수 있습니다 FAIL결과에age가 존재하는 경우 로깅 또는 분석에 사용할 수 있지만 액세스 제어 결정에는 사용하지 마세요method와age가 없는 경우를 처리하세요. 이것은 시스템 수준의 실패를 나타내며 연령 결정 실패가 아닙니다- Webhook 이벤트의 경우:
FAIL상태에서failureReason이age-criteria-not-met인 경우ageCategory가 존재할 수 있지만 액세스 제어 결정에는 사용하지 마세요 - API 엔드포인트의 경우:
FAIL상태에ageCategory가 존재하더라도 액세스 제어 결정에는 사용하지 마세요
일반적인 실패 이유:
age-criteria-not-met- 사용자의 확인된 연령이 필요한 임계값을 충족하지 않습니다max-attempts-exceeded- 사용자가 사용 가능한 모든 검증 시도를 소진했습니다 (이것은 사용자가 실패하거나 불확실한 연령 결정 후 재시도를 소진한 경우의 최종 실패 이유입니다)fraudulent-activity-detected- 시스템이 의심스럽거나 사기적인 활동을 감지했습니다
연령 필드 채우기 규칙
age 객체가 존재하는 경우
age 객체에는 두 개의 필드가 포함됩니다:
low(number): 연령 추정의 하한 또는 하드 검증 방법(예: ID 문서)의 정확한 연령high(number): 연령 추정의 상한 또는 하드 검증 방법의 정확한 연령, 또는 최소 연령만 알려진 경우 150
age가 존재하는 조건:
- 검증 방법이 연령 정보를 제공했습니다
- FAIL 상태의 경우:
failureReason이age-criteria-not-met
age객체에 액세스하기 전에age.low와age.high가 모두 존재하는지 확인하세요age.low === age.high가 정확한 연령을 의미한다고 가정하지 마세요. 그럴 수 있지만 검증 방법에 따라 다릅니다status가 PASS가 아닌 경우 액세스 제어에age필드를 사용하지 마세요- PASS 상태의 경우 액세스 결정을 내릴 때 원시
age값보다ageCategory를 사용하는 것을 선호합니다
ageCategory가 존재하는 경우
ageCategory 필드는 연령 및 관할권 정보에서 파생됩니다.
값:
adult- 사용자는 성인으로 분류됩니다digital-youth- 사용자는 디지털 청소년으로 분류됩니다 (연령 제한이 있지만 미성년자는 아님)digital-minor- 사용자는 디지털 미성년자로 분류됩니다
ageCategory가 존재하는 조건:
- PASS 상태의 경우: 연령 카테고리는 항상 계산되며 검증이 통과할 때 제공됩니다
- FAIL 상태의 경우:
failureReason이age-criteria-not-met이고 연령 데이터가 사용 가능한 경우 (age.low와age.high가 모두 존재하는 경우) 존재합니다
- 상태가 PASS이고
ageCategory가 존재하는 경우 액세스 제어 결정에ageCategory를 사용합니다 age가 존재하는 경우에도ageCategory가 항상 존재한다고 가정하지 마세요age가 존재하지만ageCategory가 없는 경우를 처리하세요- FAIL 상태의 경우 존재하더라도 액세스 제어 결정에
ageCategory를 사용하지 마세요
age와 ageCategory가 없는 경우
조건:
- 검증이
max-attempts-exceeded의failureReason으로 실패했습니다 - 연령 결정이 이루어지지 않았습니다 - 검증이
fraudulent-activity-detected의failureReason으로 실패했습니다 - 보안상의 이유로 연령 데이터가 제외되었습니다 - 검증 방법이 연령 정보를 제공하지 않았습니다
- 연령 정보가 항상 사용 가능하다고 가정하지 말고 누락된 연령 필드를 적절히 처리하세요
age가 없는 경우 다른 필드에서 연령을 추론하려고 하지 마세요- 연령 필드가 없는 FAIL 상태의 경우 무엇이 잘못되었는지 이해하기 위해
failureReason에 의존하세요
생년월일 필드
형식: YYYY-MM-DD (ISO 8601 날짜 형식)
존재하는 경우:
dob 필드는 검증 방법이 확인된 생년월일을 제공하는 경우에만 포함됩니다. 연령 추정 또는 연령 범위만 제공하는 방법에는 포함되지 않습니다. 검증 방법 및 관할권의 다양한 조합을 고려할 때, dob가 언제 존재해야 하는지에 대해 검증이나 기대를 수행해서는 안 됩니다. 이 필드는 검증 방법에서 사용 가능한 경우 제공되지만 모든 시나리오에서 그 존재를 보장할 수는 없습니다.
dob를 제공할 수 있는 방법:
id-document- ID 문서에 읽을 수 있는 생년월일 정보가 포함된 경우credit-card- 신용카드 검증이 생년월일을 제공하는 경우 (모든 신용카드 검증에 DOB가 포함되는 것은 아님)social-security-number- SSN 검증이 생년월일을 제공하는 경우privy- 항상 제공됩니다 (인도네시아 신원 확인)korean-real-name- 항상 제공됩니다 (Inicis를 통한 한국 실명 확인)age-attestation- 증명에 생년월일 정보가 포함된 경우singpass- 항상 제공됩니다 (싱가포르 국민 신원 확인)
dob를 제공하지 않는 방법:
age-estimation-scan- 연령 범위만 제공하며 확인된 DOB는 제공하지 않습니다email-confirmation- 연령 추정만 제공하며 확인된 DOB는 제공하지 않습니다email-estimation- 연령 추정만 제공하며 확인된 DOB는 제공하지 않습니다self-confirmation- 확인된 DOB를 사용할 수 없습니다
상태 조건:
- 방법이 제공하는 경우 PASS 상태에서 존재
- 사용자가 연령 기준을 충족하지 않는다고 결정되기 전에 방법이 제공한 경우 FAIL 상태에서 존재
- PASS 상태에서도
dob가 항상 존재한다고 가정하지 마세요 dob가 존재하는 경우YYYY-MM-DD형식인지 확인하세요dob를 추가 검증 또는 로깅에 사용할 수 있지만 연령을 결정하는 주요 방법으로 의존하지 마세요
방법 필드
존재하는 경우:
- PASS 상태의 경우 항상 존재
- FAIL 상태의 경우
failureReason이age-criteria-not-met일 때 존재
가능한 값:
id-document- 정부 발급 ID 문서 검증 (DOB 포함 가능)credit-card- 신용카드 검증 (DOB 포함 가능)self-confirmation- 자체 선언 연령 확인 (DOB 없음)age-estimation-scan- 문서 스캔을 통한 연령 추정 (DOB 없음, 연령 범위만)social-security-number- SSN 기반 검증 (DOB 포함 가능)email-confirmation- 이메일 기반 연령 검증 (DOB 없음, 연령 추정만)email-estimation- 이메일 기반 연령 추정 (DOB 없음, 연령 추정만)privy- 인도네시아 신원 확인 (항상 DOB 포함)korean-real-name- Inicis를 통한 한국 실명 확인 (항상 DOB 포함)age-attestation- k-ID를 통한 연령 증명 (DOB 포함 가능)singpass- 싱가포르 국민 신원 확인 (항상 DOB 포함)connect-id- 호주 ConnectID 검증
- 분석 또는 로깅 목적으로
method를 사용할 수 있습니다 - 액세스 제어 결정에
method를 사용하지 마세요
실패 이유 값
일반적인 failureReason 값:
age-criteria-not-met- 사용자의 확인된 연령이 필요한 임계값을 충족하지 않습니다max-attempts-exceeded- 사용자가 사용 가능한 모든 검증 시도를 소진했습니다fraudulent-activity-detected- 시스템이 의심스럽거나 사기적인 활동을 감지했습니다
- 알 수 없는
failureReason값을 적절히 처리하고 예상치 못한 값을 보면 중단되지 않도록 하세요 failureReason만을 기반으로 액세스 결정을 내리지 말고 항상status필드를 고려하세요- 디버깅 및 분석 목적으로
failureReason을 로깅하는 것이 좋습니다
전체 필드 매트릭스
Webhook 이벤트
| 필드 | PASS | FAIL |
|---|---|---|
id | always | always |
status | always | always |
method | always | sometimes¹ |
ageCategory | always | sometimes² |
age | always | sometimes² |
dob | sometimes³ | sometimes³ |
failureReason | never | always |
¹ failureReason이 max-attempts-exceeded 또는 fraudulent-activity-detected가 아닌 한 존재
² age.low와 age.high가 모두 사용 가능하고 failureReason이 age-criteria-not-met인 경우에만 존재
³ 검증 방법에서 사용 가능한 경우 항상 포함됩니다
API 엔드포인트
| 필드 | PENDING | IN_PROGRESS | PASS | FAIL |
|---|---|---|---|---|
id | always | always | always | always |
status | always | always | always | always |
method | never | never | sometimes² | sometimes¹ |
ageCategory | never | never | sometimes² | sometimes² |
age | never | never | sometimes² | sometimes³ |
dob | never | never | sometimes⁴ | sometimes⁴ |
failureReason | never | never | never | always |
¹ failureReason이 max-attempts-exceeded 또는 fraudulent-activity-detected가 아닌 한 존재
² age.low와 age.high가 모두 사용 가능한 경우에만 존재
³ age.low와 age.high가 모두 사용 가능하고 failureReason이 max-attempts-exceeded 또는 fraudulent-activity-detected가 아닌 경우에만 존재
⁴ includeDob=true 쿼리 매개변수가 설정되고 검증 방법에서 사용 가능한 경우에만 포함됩니다
페이로드 예시
Webhook 이벤트 예시
연령 정보가 포함된 PASS 상태
{
"eventType": "Verification.Result",
"data": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"status": "PASS",
"method": "id-document",
"ageCategory": "adult",
"age": {
"low": 25,
"high": 25
},
"dob": "1998-05-15"
}
}
연령 정보가 포함된 FAIL 상태
{
"eventType": "Verification.Result",
"data": {
"id": "123e4567-e89b-12d3-a456-426614174001",
"status": "FAIL",
"method": "age-estimation-scan",
"failureReason": "age-criteria-not-met",
"age": {
"low": 16,
"high": 17
},
"ageCategory": "digital-minor"
}
}
연령 정보가 없는 FAIL 상태
{
"eventType": "Verification.Result",
"data": {
"id": "123e4567-e89b-12d3-a456-426614174002",
"status": "FAIL",
"failureReason": "max-attempts-exceeded"
}
}
API 엔드포인트 응답 예시
PENDING 상태
{
"id": "123e4567-e89b-12d3-a456-426614174003",
"status": "PENDING"
}
IN_PROGRESS 상태
{
"id": "123e4567-e89b-12d3-a456-426614174004",
"status": "IN_PROGRESS"
}
연령 정보가 포함된 PASS 상태 (DOB 없음)
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"status": "PASS",
"method": "id-document",
"ageCategory": "adult",
"age": {
"low": 25,
"high": 25
}
}
DOB가 포함된 PASS 상태 (includeDob = true)
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"status": "PASS",
"method": "id-document",
"ageCategory": "adult",
"age": {
"low": 25,
"high": 25
},
"dob": "1998-05-15"
}
연령 정보가 포함된 FAIL 상태
{
"id": "123e4567-e89b-12d3-a456-426614174001",
"status": "FAIL",
"method": "age-estimation-scan",
"failureReason": "age-criteria-not-met",
"age": {
"low": 16,
"high": 17
},
"ageCategory": "digital-minor"
}
연령 정보가 없는 FAIL 상태
{
"id": "123e4567-e89b-12d3-a456-426614174002",
"status": "FAIL",
"failureReason": "max-attempts-exceeded"
}
구현 체크리스트
Webhook 이벤트
- 두 가지 상태 유형 처리: PASS 및 FAIL (webhook은 PENDING 또는 IN_PROGRESS를 전송하지 않음)
-
age.low또는age.high에 액세스하기 전에age객체의 존재 확인 - 상태가 PASS이고
ageCategory가 존재하는 경우 액세스 제어에ageCategory사용 - 상태가 FAIL인 경우 존재하더라도 액세스 제어에
ageCategory를 사용하지 않음 -
method가 없는 경우 처리 (시스템 수준 실패) -
age와ageCategory가 없는 경우 처리 (특정 실패 시나리오) -
dob형식 (YYYY-MM-DD) 검증 (존재하는 경우) - 디버깅을 위해
failureReason로깅 - FAIL 상태에 액세스 부여하지 않음
- 알 수 없는
failureReason값을 적절히 처리
API 엔드포인트
- 모든 상태 유형 처리: PENDING, IN_PROGRESS, PASS 및 FAIL
- PENDING 및 IN_PROGRESS 상태의 경우
id및status필드만 예상 - DOB 데이터가 필요한 경우
includeDob=true쿼리 매개변수 설정 (GET /age-verification/get-status참조) -
age.low또는age.high에 액세스하기 전에age객체의 존재 확인 - 상태가 PASS이고
ageCategory가 존재하는 경우 액세스 제어에ageCategory사용 - 상태가 FAIL인 경우 존재하더라도 액세스 제어에
ageCategory를 사용하지 않음 -
method가 없는 경우 처리 (시스템 수준 실패) -
age와ageCategory가 없는 경우 처리 (특정 실패 시나리오) -
dob형식 (YYYY-MM-DD) 검증 (존재하는 경우) - 디버깅을 위해
failureReason로깅 - FAIL 상태에 액세스 부여하지 않음
- 알 수 없는
failureReason값을 적절히 처리 - PENDING 및 IN_PROGRESS 상태에 적절한 폴링 전략 구현
구현 참고 사항
ageCategory 필드는 Webhook 이벤트에서 PASS 상태의 경우 항상 포함됩니다. FAIL 상태의 경우, failureReason이 age-criteria-not-met이고 연령 데이터가 사용 가능한 경우 ageCategory가 포함될 수 있습니다. 그러나 상태가 FAIL인 경우 존재하더라도 액세스 제어 결정에 ageCategory를 사용해서는 안 됩니다. API 엔드포인트도 동일한 패턴을 따릅니다 - ageCategory는 연령 데이터가 사용 가능한 경우 FAIL 상태에 존재할 수 있지만 액세스 제어 결정에 사용해서는 안 됩니다.
버전 기록
- 2026-01-07:
failureReason이age-criteria-not-met이고 연령 데이터가 사용 가능한 경우 FAIL 상태 Webhook 이벤트에ageCategory필드가 포함되도록 업데이트되었습니다. - 2025-12-04: 초기 API 계약 문서