본문으로 건너뛰기

Verification.Result

확인 시도 결과와 함께 발생합니다.

필드

필드유형필수설명
eventTypestring항상 "Verification.Result"
dataobject확인 결과 데이터
data.idstring (UUID)고유 확인 ID
data.statusstringPASS 또는 FAIL일 수 있음
data.ageCategorystring아니오추정 연령 카테고리. adult, digital-youth 또는 digital-minor일 수 있음. statusPASS이고 age가 존재하는 경우에만 존재합니다
data.methodstring아니오사용된 확인 방법. PASS 상태의 경우 항상 존재합니다. FAIL 상태의 경우, failureReasonage-criteria-not-met인 경우에만 존재합니다
data.failureReasonstring아니오확인이 실패한 이유. statusFAIL인 경우 항상 존재합니다. age-criteria-not-met, max-attempts-exceeded 또는 fraudulent-activity-detected일 수 있습니다
data.ageobject아니오연령 세부 정보. age.lowage.high가 모두 사용 가능한 경우 존재합니다. FAIL 상태의 경우, failureReasonage-criteria-not-met인 경우에만 존재합니다
data.age.lownumber아니오추정 연령의 하한. ID 문서 확인과 같은 하드 연령 확인 방법의 경우 이것은 정확한 연령입니다
data.age.highnumber아니오추정 연령의 상한. ID 문서 확인과 같은 하드 연령 확인 방법의 경우 이것은 정확한 연령입니다
data.dobstring (YYYY-MM-DD)아니오확인된 생년월일. 확인 방법이 제공하는 경우에만 포함됩니다. 방법에서 사용 가능한 경우 항상 포함됩니다

예시

{
"eventType": "Verification.Result",
"data": {
"id": "4e57301e-a4d1-498f-ac3f-f3d4de19abf6",
"status": "PASS",
"method": "id-document",
"age": {
"low": 43,
"high": 43
},
"dob": "1981-06-20"
}
}

검증 이벤트 계약

개요

이 섹션은 두 가지 메커니즘을 통해 제공되는 검증 상태의 API 계약을 정의합니다:

  1. Webhook 이벤트: 검증이 완료될 때 전송되는 Verification.Result Webhook 이벤트
  2. API 엔드포인트: 검증 상태를 폴링하기 위한 GET /age-verification/get-status 엔드포인트

이 계약은 모든 가능한 결과 유형에 대한 필드 존재 규칙, 데이터 유형 및 해석 가이드를 지정합니다. 두 메커니즘 모두 유사한 데이터를 제공하지만 상태 값, 필드 존재 및 구조에 중요한 차이가 있으므로 주의해야 합니다.

DOM 메시지는 신뢰할 수 있는 정보원이 아닙니다

검증 결과는 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 (필수): 검증 ID
  • includeDob (선택 사항, 기본값: false): true인 경우 사용 가능한 경우 dob 필드를 포함합니다

전체 엔드포인트 문서는 GET /age-verification/get-status를 참조하세요.

Webhook과 API 엔드포인트 간의 주요 차이점

측면Webhook 이벤트API 엔드포인트
상태 값PASS 또는 FAILPASS, FAIL, PENDING, IN_PROGRESS
구조{ eventType, data }로 래핑직접 응답 객체
DOB 필드사용 가능한 경우 항상 포함includeDob=true 쿼리 매개변수가 설정된 경우에만 포함
AgeCategory상태가 PASS인 경우에만 존재PASSFAIL 상태 모두에서 존재
Method상태가 PASS인 경우에만 존재PASSFAIL 상태 모두에서 존재
사용 가능한 시점검증이 완료될 때만검증 중을 포함하여 언제든지 폴링 가능

상태 유형

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) - lowhigh 경계를 모두 포함 (검증 방법이 연령 정보를 제공하는 경우에만 존재)
  • dob (string, YYYY-MM-DD 형식) - 확인된 생년월일, 검증 방법이 제공하는 경우에만 (특정 방법에 대해서는 생년월일 필드 섹션 참조). 사용 가능한 경우 항상 포함됩니다.

포함되지 않음:

  • failureReason

API 엔드포인트

항상 포함:

  • id (UUID)
  • status ("PASS")
  • method (string) - 사용된 검증 방법 (사용 가능한 경우)

때때로 포함:

  • ageCategory (string) - adult, digital-youth 또는 digital-minor 중 하나 (연령이 존재하는 경우)
  • age (object) - lowhigh 경계를 모두 포함 (검증 방법이 연령 정보를 제공하는 경우)

때때로 포함:

  • 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) - failureReasonage-criteria-not-met인 경우에만 존재
  • dob (string) - 검증 방법이 제공하는 경우에만 존재 (특정 방법에 대해서는 생년월일 필드 섹션 참조). 사용 가능한 경우 항상 포함됩니다.

포함되지 않음:

  • ageCategory - Webhook 이벤트는 상태가 PASS인 경우에만 ageCategory를 포함합니다

API 엔드포인트

항상 포함:

  • id (UUID)
  • status ("FAIL")
  • failureReason (string) - 실패 이유

때때로 포함:

  • method (string) - 실패가 age-criteria-not-met로 인한 경우에만 존재
  • age (object) - failureReasonage-criteria-not-met인 경우에만 존재
  • ageCategory (string) - age가 존재하는 경우에만 존재
  • dob (string) - includeDob=true 쿼리 매개변수가 설정되고 검증 방법이 제공하는 경우에만 포함됩니다 (특정 방법에 대해서는 생년월일 필드 섹션 참조)

포함되지 않음:

  • age가 존재하지 않는 경우의 ageCategory
알아야 할 사항
  • FAIL 상태를 실패한 검증으로 처리하고 액세스 또는 권한을 부여하지 마세요
  • 검증이 실패한 이유를 이해하기 위해 항상 failureReason을 확인하세요
  • FAIL 상태에 age 필드가 존재한다고 가정하지 마세요. 사용할 수 없을 수 있습니다
  • FAIL 결과에 age가 존재하는 경우 로깅 또는 분석에 사용할 수 있지만 액세스 제어 결정에는 사용하지 마세요
  • methodage가 없는 경우를 처리하세요. 이것은 시스템 수준의 실패를 나타내며 연령 결정 실패가 아닙니다
  • Webhook 이벤트의 경우: FAIL 상태에는 ageCategory가 존재하지 않으므로 사용하려고 하지 마세요
  • API 엔드포인트의 경우: FAIL 상태에 ageCategory가 존재하더라도 액세스 제어 결정에는 사용하지 마세요

일반적인 실패 이유:

  • age-criteria-not-met - 사용자의 확인된 연령이 필요한 임계값을 충족하지 않습니다
  • max-attempts-exceeded - 사용자가 사용 가능한 모든 검증 시도를 소진했습니다 (이것은 사용자가 실패하거나 불확실한 연령 결정 후 재시도를 소진한 경우의 최종 실패 이유입니다)
  • fraudulent-activity-detected - 시스템이 의심스럽거나 사기적인 활동을 감지했습니다

연령 필드 채우기 규칙

age 객체가 존재하는 경우

age 객체에는 두 개의 필드가 포함됩니다:

  • low (number): 연령 추정의 하한 또는 하드 검증 방법(예: ID 문서)의 정확한 연령
  • high (number): 연령 추정의 상한 또는 하드 검증 방법의 정확한 연령, 또는 최소 연령만 알려진 경우 150

age가 존재하는 조건:

  • 검증 방법이 연령 정보를 제공했습니다
  • FAIL 상태의 경우: failureReasonage-criteria-not-met
알아야 할 사항
  • age 객체에 액세스하기 전에 age.lowage.high가 모두 존재하는지 확인하세요
  • age.low === age.high가 정확한 연령을 의미한다고 가정하지 마세요. 그럴 수 있지만 검증 방법에 따라 다릅니다
  • status가 PASS가 아닌 경우 액세스 제어에 age 필드를 사용하지 마세요
  • PASS 상태의 경우 액세스 결정을 내릴 때 원시 age 값보다 ageCategory를 사용하는 것을 선호합니다

ageCategory가 존재하는 경우

ageCategory 필드는 연령 및 관할권 정보에서 파생됩니다.

값:

  • adult - 사용자는 성인으로 분류됩니다
  • digital-youth - 사용자는 디지털 청소년으로 분류됩니다 (연령 제한이 있지만 미성년자는 아님)
  • digital-minor - 사용자는 디지털 미성년자로 분류됩니다

ageCategory가 존재하는 조건:

  • age 객체가 존재합니다
  • 연령 및 관할권에서 연령 카테고리가 성공적으로 계산되었습니다
  • FAIL 상태의 경우: failureReasonage-criteria-not-met
알아야 할 사항
  • 상태가 PASS이고 ageCategory가 존재하는 경우 액세스 제어 결정에 ageCategory를 사용합니다
  • age가 존재하는 경우에도 ageCategory가 항상 존재한다고 가정하지 마세요
  • age가 존재하지만 ageCategory가 없는 경우를 처리하세요
  • FAIL 상태의 경우 존재하더라도 액세스 제어 결정에 ageCategory를 사용하지 마세요

ageageCategory가 없는 경우

조건:

  • 검증이 max-attempts-exceededfailureReason으로 실패했습니다 - 연령 결정이 이루어지지 않았습니다
  • 검증이 fraudulent-activity-detectedfailureReason으로 실패했습니다 - 보안상의 이유로 연령 데이터가 제외되었습니다
  • 검증 방법이 연령 정보를 제공하지 않았습니다
알아야 할 사항
  • 연령 정보가 항상 사용 가능하다고 가정하지 말고 누락된 연령 필드를 적절히 처리하세요
  • 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 상태의 경우 failureReasonage-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 이벤트

필드PASSFAIL
idalwaysalways
statusalwaysalways
methodalwayssometimes¹
ageCategorysometimes²never
agesometimes²sometimes³
dobsometimes⁴sometimes⁴
failureReasonneveralways

¹ failureReasonmax-attempts-exceeded 또는 fraudulent-activity-detected가 아닌 한 존재
² age.lowage.high가 모두 사용 가능한 경우에만 존재
³ age.lowage.high가 모두 사용 가능하고 failureReasonmax-attempts-exceeded 또는 fraudulent-activity-detected가 아닌 경우에만 존재
⁴ 검증 방법에서 사용 가능한 경우 항상 포함됩니다

API 엔드포인트

필드PENDINGIN_PROGRESSPASSFAIL
idalwaysalwaysalwaysalways
statusalwaysalwaysalwaysalways
methodneverneversometimes²sometimes¹
ageCategoryneverneversometimes²sometimes²
ageneverneversometimes²sometimes³
dobneverneversometimes⁴sometimes⁴
failureReasonneverneverneveralways

¹ failureReasonmax-attempts-exceeded 또는 fraudulent-activity-detected가 아닌 한 존재
² age.lowage.high가 모두 사용 가능한 경우에만 존재
³ age.lowage.high가 모두 사용 가능하고 failureReasonmax-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
}
}
}

연령 정보가 없는 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를 사용하지 않음 (webhook 이벤트에는 존재하지 않음)
  • method가 없는 경우 처리 (시스템 수준 실패)
  • ageageCategory가 없는 경우 처리 (특정 실패 시나리오)
  • dob 형식 (YYYY-MM-DD) 검증 (존재하는 경우)
  • 디버깅을 위해 failureReason 로깅
  • FAIL 상태에 액세스 부여하지 않음
  • 알 수 없는 failureReason 값을 적절히 처리

API 엔드포인트

  • 모든 상태 유형 처리: PENDING, IN_PROGRESS, PASS 및 FAIL
  • PENDING 및 IN_PROGRESS 상태의 경우 idstatus 필드만 예상
  • DOB 데이터가 필요한 경우 includeDob=true 쿼리 매개변수 설정 (GET /age-verification/get-status 참조)
  • age.low 또는 age.high에 액세스하기 전에 age 객체의 존재 확인
  • 상태가 PASS이고 ageCategory가 존재하는 경우 액세스 제어에 ageCategory 사용
  • 상태가 FAIL인 경우 존재하더라도 액세스 제어에 ageCategory를 사용하지 않음
  • method가 없는 경우 처리 (시스템 수준 실패)
  • ageageCategory가 없는 경우 처리 (특정 실패 시나리오)
  • dob 형식 (YYYY-MM-DD) 검증 (존재하는 경우)
  • 디버깅을 위해 failureReason 로깅
  • FAIL 상태에 액세스 부여하지 않음
  • 알 수 없는 failureReason 값을 적절히 처리
  • PENDING 및 IN_PROGRESS 상태에 적절한 폴링 전략 구현

구현 참고 사항

AgeCategory 동작

ageCategory 필드는 Webhook 이벤트에서 상태가 PASS인 경우에만 포함됩니다. 이렇게 하면 연령 카테고리 정보가 검증이 성공한 경우에만 제공됩니다. API 엔드포인트는 일부 경우에 FAIL 상태에 ageCategory를 포함할 수 있지만 액세스 제어 결정에 사용해서는 안 됩니다.

버전 기록

  • 2024-12-05: 초기 API 계약 문서