> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# 연령 추정 API: 셀피 기반 연령 인증

> Didit의 AI 얼굴 분석으로 셀피를 통해 연령을 확인하세요. 호출당 $0.10, 16-17세 기준 평균 절대 오차 1.1년 및 신분증 인증 대체 옵션을 제공합니다.

패시브 라이브니스가 포함된 Didit 연령 추정은 셀피를 사용해 사람의 나이를 예측하므로, 모든 사용자에게 신분증을 요구하지 않고도 연령 제한 서비스에 대한 접근을 제어할 수 있습니다. 이 모델은 연령 게이팅 결정이 이루어지는 구간에서 가장 정밀합니다. 16세 및 17세의 평균 절대 오차는 1.1년, 18세\~20세는 1.9년이며, 셀피의 96%를 18세 미만 또는 18세 이상으로 정확하게 분류합니다([모델 성능](#모델-성능-및-통계) 참조).

연령 추정 연동 프롬프트
        프롬프트를 클립보드에 복사



      
      

\<pre>

\````# Goal
Integrate Didit Age Estimation (selfie-based age gating, includes passive liveness) into your app. Pick ONE mode.

\# Mode A — Session-based (embedded in Liveness)
In hosted Didit flows, age estimation is **embedded inside the Liveness step** — there is no separate "age_estimation" workflow feature. Enable age estimation on the Liveness node in the Business Console.

1\. Configure the workflow's LIVENESS feature with age estimation enabled and set age_estimation_decline_threshold (default 18).
2\. Create a session — POST /v3/session/ with { workflow_id, vendor_data, callback }. See /sessions-api/create-session.
3\. Open session.url for the user (or mount the Web/Mobile SDK).
4\. Fetch the decision — GET /v3/session/{sessionId}/decision/.

Decision surface: the result lives at `liveness_checks[].age_estimation` on each Liveness entry (not in a top-level age_estimations[] array).

\# Mode B — Standalone API (server-to-server, age + liveness in one call)
Use when you already have a selfie and need a one-shot age gate.

POST https://verification.didit.me/v3/age-estimation/
multipart/form-data — x-api-key: YOUR_API_KEY

curl example:
\```bash
curl -X POST 'https://verification.didit.me/v3/age-estimation/' \
-H 'x-api-key: YOUR_API_KEY' \
-F 'user_image=@./selfie.jpg' \
-F 'age_estimation_decline_threshold=18' \
-F 'save_api_request=true' \
-F 'vendor_data=user-1234'
\```
Returns: { request_id, age_estimation: { status, method: "PASSIVE", age_estimation (float, years), score (passive-liveness 0-100), user_image: {entities}, warnings: [...] } }.

Required: `user_image` (jpg/jpeg/png/tiff/webp, max 5 MB; PDFs not accepted). The largest face wins when multiple are present.

\# Decision logic
status="Declined" when ANY of the following is true:
\- passive-liveness score ≤ face_liveness_score_decline_threshold (default 30)
\- predicted age < age_estimation_decline_threshold (default 18)
\- no face detected
\- liveness model flagged a presentation attack

\# Status enum
"Not Started" | "In Progress" | "Approved" | "In Review" | "Declined" | "Abandoned" | "Kyc Expired"

\# Warnings
warnings[] risk codes include:
AGE_BELOW_MINIMUM, AGE_NOT_DETECTED, LOW_LIVENESS_SCORE, NO_FACE_DETECTED, LIVENESS_FACE_ATTACK, MULTIPLE_FACES_DETECTED.
Full catalogue: /core-technology/age-estimation/warnings-age-estimation.

\# Failure modes to handle
\- HTTP 400 — missing or oversized user_image, unsupported extension.
\- HTTP 403 — out of credits.
\- status="Declined" with AGE_BELOW_MINIMUM — user is below the configured age; reject.
\- status="Declined" with LOW_LIVENESS_SCORE / LIVENESS_FACE_ATTACK — presentation attack suspected; reject.
\- AGE_NOT_DETECTED — the model could not extract age (poor image quality); request a retake.

\# See also
\- Canonical schema: /reference/data-models#age-estimation
\- Per-feature report: /core-technology/age-estimation/report-age-estimation
\- Risk catalogue: /core-technology/age-estimation/warnings-age-estimation
\- Full integration playbook: /integration/integration-prompt````

\</pre>



      
      

붙여넣을 곳

## 연령 추정 방식Didit 플랫폼은 다양한 라이브니스 감지 기술과 결합하여 연령 추정을 구현합니다.<table>
  <thead>
    <tr>
      <th>방식</th>
      <th>설명</th>
      <th>보안 수준</th>
      <th>적합한 용도</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>**`3D Action & Flash`**</td>

      <td>
        • 다중 요소 생체 검증을 **무작위 동작 시퀀스** 및 **동적 조명 패턴 분석**과 결합합니다.\

        • 시작 시 사용자에게 **눈 깜빡임**이나 **고개 끄덕임**과 같은 간단한 동작을 수행하도록 요청하여 실시간 상호작용을 보장합니다.\

        • 동시에 시스템이 얼굴에 일련의 조명 패턴을 투사하고, **반사광**을 분석하여 얼굴의 3차원 구조를 확인합니다.\

        • **딥러닝 알고리즘**이 미세 표정과 빛 반사 반응을 검사하여 실제 사람의 존재 여부를 검증합니다.\

        • 행동 기반(동작) 및 물리적(조명 기반 깊이) 단서를 통합하여 **가장 높은 보안**을 제공하므로, 정적 이미지, 비디오 또는 정교한 가면을 사용한 스푸핑을 거의 불가능하게 만듭니다.
      </td>

      <td>가장 높음</td>
      <td>은행, 헬스케어, 공공기관 애플리케이션</td>
    </tr>

    <tr>
      <td>**`3D Flash`**</td>

      <td>
        • 사용자 상호작용 없이 **동적 조명 패턴 분석**을 사용하여 얼굴 토폴로지를 검증합니다.\

        • 초당 **30프레임 이상**으로 얼굴에 일련의 조명 패턴을 투사하고, 반사광을 분석하여 **깊이 맵**을 생성합니다.\

        • 이 깊이 맵을 통해 얼굴의 3차원 구조를 확인하여 평면 이미지나 2D 스푸핑과 구별합니다.\

        • 사진이나 화면과 같은 프레젠테이션 공격에 대해 **높은 보안**을 유지하면서도 **원활한 경험**을 제공합니다.\

      </td>

      <td>높음</td>
      <td>금융 서비스, 계정 접근, 신원 인증</td>
    </tr>

    <tr>
      <td>**`Passive Liveness`**</td>

      <td>
        • 라이브니스 징후를 감지하기 위해 **단일 프레임 딥러닝 분석**에 의존합니다.\

        • 개인정보 보호를 위해 인터페이스에서 사용자의 얼굴이 흐리게 표시되어, 이미지가 신원 확인이 아닌 연령 추정 목적으로만 분석되고 있음을 사용자에게 안심시킵니다.\

        • 이미지를 검사하여 실제 얼굴과 스푸핑을 구별하는 **아티팩트**, **텍스처 패턴** 및 기타 미세한 지표를 확인합니다.\

        • **합성곱 신경망(CNN)**이 얼굴 특징을 검증하고 인쇄된 사진이나 디지털 화면 등에서 발생하는 이상 징후를 식별합니다.\

        • **빠르고 편리한** 검증을 제공하지만 **표준 보안**을 제공하므로 저위험 사용 사례에 적합합니다.\

      </td>

      <td>표준</td>
      <td>마찰이 적은 시나리오, 소비자용 애플리케이션</td>
    </tr>
  </tbody>
</table>각 방식은 신뢰도 점수 및 보조적인 성별 추정 데이터와 함께 정밀한 연령 추정치를 생성합니다.### 구성 가능한 임계값연령 추정에 서로 다른 임계값을 설정하여 보안 수준을 맞춤 구성할 수 있습니다. 예:![Didit age estimation threshold configuration for age gating policies](https://mintcdn.com/didit-0f962782/z6T2GHM4Zh-iSj-K/images/age-estimation-thresholds.png?fit=max\&auto=format\&n=z6T2GHM4Zh-iSj-K\&q=85\&s=11ffd7baa63b7193970c6b67386279f8)> [!NOTE]
>
> 이러한 임계값은 위험 허용 범위와 보안 요구 사항에 따라 조정할 수 있습니다.### 국가별 연령 제한법적 성년 연령이 관할권마다 다르다는 점을 반영하여 연령 제한을 **국가별**로 구성할 수 있습니다. 단일 전역 최소 또는 최대 연령을 설정하는 대신 각 국가별로, 심지어 국가 내 개별 주나 지역별로 특정 연령 제한을 정의할 수 있습니다.#### 작동 방식- **국가 수준 구성**: 각 국가별(문서의 발급 국가 기준)로 최소 및/또는 최대 연령을 설정합니다. 예를 들어 미국에서는 최소 연령 18세, 한국에서는 19세, 아랍에미리트에서는 21세를 요구할 수 있습니다.
- **주/지역 재정의**: 하위 지역별 차이가 있는 국가(예: 미국 또는 멕시코)의 경우 주별 재정의를 구성할 수 있습니다. 예를 들어 미국의 기본값이 18세인 반면 미시시피주는 최소 연령 21세를 요구할 수 있습니다. 시스템은 OCR을 통해 문서에서 추출된 지역을 사용하여 주를 일치시킵니다.
- **성년 연령 기본값**: 콘솔은 전 세계의 알려진 법적 성년 연령을 기반으로 각 국가의 최소 연령을 자동으로 채워주는 원클릭 "성년 연령 적용" 버튼을 제공합니다. 그런 다음 필요에 따라 개별 국가나 주를 맞춤 설정할 수 있습니다.
- **구성 가능한 작업**: 사용자의 연령이 해당 문서 국가의 최소 연령 미만이거나 최대 연령을 초과하는 경우 수행할 작업을 선택할 수 있습니다: **거부** 또는 **검토**.#### 구성 예시| 국가 | 최소 연령 | 최대 연령 | 주 재정의 |
| - | - | - | - |
| USA | 18 | -- | Mississippi: 21, Alabama: 19 |
| KOR | 19 | -- | -- |
| GBR | 18 | 65 | -- |
| ARE | 21 | -- | -- |> [!NOTE]
>
> 국가별 연령 제한은 표준 KYC 워크플로와 어댑티브 연령 검증 워크플로 모두에서 사용할 수 있습니다. 어댑티브 워크플로에서는 경계선 케이스에 대해 신분증 인증이 트리거될 때, 연령 확인에 신분증 인증 단계에서 구성된 국가별 설정이 사용됩니다.## 작동 방식**1. 이미지 또는 동영상 캡처**사용자가 API 업로드를 통해 선명한 얼굴 이미지를 제공하거나 라이브니스 인증 과정을 완료합니다.| 점검 항목 | 설명 |
| - | - |
| **이미지 품질** | 조명, 위치, 선명도를 검증합니다 |
| **라이브니스 검증** | 대상자가 실제로 존재하며 스푸핑이 아닌지 확인합니다 |
| **다중 프레임 분석** | 최상의 정확도를 위해 최적의 프레임을 선택합니다 |
| **적응형 캡처** | 다양한 기기 성능에 맞춰 조정합니다 |**2. 얼굴 특징 분석**감지기가 이미지 내의 모든 얼굴과 인물을 찾고, 가장 큰 얼굴을 분석합니다.- **얼굴 크롭**: 감지된 그대로의 얼굴로, 안면 형태, 비율, 피부 결을 분석합니다
- **신체 맥락**: 얼굴을 제외한 이미지의 나머지 영역을 활용하여 추정치를 미세 조정합니다
- 한 이미지에서 여러 얼굴을 감지하고 보고하므로 세션을 그에 맞게 처리할 수 있습니다**3. 신경망 처리**상호 보완적인 두 개의 딥 신경망이 연령을 독립적으로 추정하며, 최종 추정치는 두 값의 평균입니다.- 트랜스포머는 얼굴 및 신체 크롭을 함께 판독하고, 합성곱 신경망은 얼굴을 판독합니다
- 각 신경망은 서로 다른 데이터 분할로 학습된 5개의 모델을 실행하고 추정치를 평균화하여 결과의 안정성을 높입니다
- 신분 증명 문서로 확인된 연령 데이터를 바탕으로 십 대, 청년층, 모든 피부색 그룹이 고르게 반영되도록 학습되었습니다
- 셀피에 대해서만, 그리고 학습 과정에서 모델이 접하지 않은 인물을 대상으로 평가되었습니다**4. 결정 및 보조 분석**시스템이 종합적인 결과를 생성합니다:| 출력 항목 | 설명 |
| - | - |
| **연령 추정치** | 신뢰도 점수가 포함된 기본 추정치 |
| **성별 추정** | 보조 인구통계학적 맥락 (선택 사항) |
| **신뢰도 지표** | 전반적인 신뢰성 평가 |
| **환경 요인** | 추정 품질에 미치는 영향 평가 |**5. 규칙 적용**설정한 비즈니스 규칙이 추정 결과에 적용됩니다.- 연령 추정치를 **설정된 임계값**(국가별 최소/최대)과 비교합니다
- 신뢰도 점수를 최소 요건과 비교하여 확인합니다
- **경계 케이스**의 경우 신분증 인증 대체 절차(Adaptive 모드)를 트리거할 수 있습니다
- 컴플라이언스를 위해 상세한 **감사 추적 기록**과 함께 결과를 기록합니다## 적응형 연령 추정정밀한 연령 검증이 필수적인 시나리오를 위해 Didit 플랫폼은 신분증 인증 폴백을 포함한 적응형 연령 추정을 제공합니다. 이 접근 방식은 사용자 편의성과 규제 준수 간의 균형을 유지합니다.### 적응형 연령 추정 작동 방식**1. 초기 연령 추정**시스템은 먼저 얼굴 분석을 사용하여 사용자의 연령 추정을 시도합니다. 연령 추정치와 함께 신뢰도 점수가 생성됩니다.**2. 임계값 평가**추정된 연령을 설정된 임계값과 비교합니다. 세 가지 결과가 발생할 수 있습니다.| 결과 | 설명 |
| - | - |
| **명확한 통과** | 사용자가 설정된 필수 연령 임계값을 확실히 초과함 |
| **명확한 불합격** | 사용자가 설정된 필수 연령 임계값에 확실히 미달함 |
| **경계선** | 추정 연령이 불확실한 범위에 속하거나 신뢰도 점수가 낮음 |**3. 지능형 폴백**- **명확한 통과/불합격**: 해당 결과와 함께 인증이 즉시 완료됩니다.
- **경계선 케이스**: 시스템이 **신분증 인증 흐름**을 자동으로 시작합니다.
- 이를 통해 대부분의 사용자에게 불편을 최소화하면서도 규제 준수를 보장합니다.**4. 문서 검증 (필요한 경우)**경계선 케이스의 경우 사용자가 정부 발급 신분증 문서를 제공합니다.- 문서 진위 여부 및 연령 정보가 검증됩니다.
- 신분증 인증 단계의 **국가별 연령 제한**이 적용됩니다.
- 시스템은 생년월일을 문서 발급 국가 및 지역의 최소/최대 연령과 대조합니다.
- 문서의 인물 사진을 **연령 추정을 위해 이미 캡처된 셀피와 1:1로 얼굴 대조**하므로 문서의 생년월일이 카메라 앞의 인물과 연결됩니다.### 폴백이 반환하는 항목폴백 얼굴 대조는 워크플로에 얼굴 대조 노드가 없어도 실행되므로, 세션 결정에 전혀 설정하지 않은 검사처럼 표시되어 혼동하기 쉽습니다.- 폴백이 실행되면 `features` 목록에 `AGE_ESTIMATION` 및 `ID_VERIFICATION` 외에 `FACE_MATCH`가 추가됩니다.
- `face_matches[]`에는 `score`, `source_image`(문서 인물 사진), `target_image`(연령 추정 셀피)를 포함한 하나의 항목이 전달됩니다. 해당 매칭은 얼굴 대조 단계가 아닌 연령 추정 단계에 속하므로 `node_id`는 **연령 추정 노드**(네이티브 워크플로의 `feature_age_estimation`)가 됩니다.
- 점수가 낮으면 일반적인 [얼굴 대조 경고](https://docs.didit.me/ko/core-technology/face-match/warnings-face-match.md)가 발생하며, 설정된 얼굴 대조 노드와 동일하게 세션을 검토 또는 거부 상태로 보낼 수 있습니다.
- 얼굴 대조 항목으로 **비용이 청구되지 않습니다**. 세션에는 연령 추정 및 신분증 인증 비용만 청구됩니다.셀피만으로 통과하거나 실패한 세션은 폴백을 실행하지 않으므로 `face_matches: null`을 반환합니다. 결정 payload에서 이미지를 제외하려면 워크플로의 [응답 속성](https://docs.didit.me/ko/sessions-api/retrieve-session.md)을 사용하여 `face_matches` 필드를 제한하십시오.> [!NOTE]
>
> 적응형 연령 추정은 [적응형 연령 검증](https://docs.didit.me/ko/console/workflows.md) 워크플로 유형을 사용하여 구성할 수 있습니다. 신분증 인증이 트리거되는 경계선 연령 임계값을 정의할 수 있습니다. 경계선 케이스의 최종 연령 기반 승인 또는 거부는 신분증 인증 단계에 구성된 국가별 연령 제한에 따라 결정됩니다.### 적응형 연령 추정의 이점- **사용자 마찰 감소**: 대부분의 사용자는 셀피 촬영만으로 인증을 완료합니다.
- **컴플라이언스 강화**: 불확실한 케이스는 국가별 연령 규칙에 따라 철저한 문서 검증을 거칩니다.
- **비용 효율성**: 신분증 인증은 필요한 경우에만 사용됩니다.
- **맞춤형 위험 허용도 설정**: 규제 요구사항에 따라 임계값을 조정할 수 있습니다.
- **관할 구역 인식**: 사용자의 문서 발급 국가 및 지역에 따라 적용되는 성년 연령을 자동으로 적용합니다.이 접근 방식은 사용자 경험과 규제 준수의 균형이 필수적인 온라인 게임, 주류 배달, 성인 콘텐츠 플랫폼과 같은 연령 제한 서비스에 특히 유용합니다.## 연령 보증 (ISO/IEC 27566-1)워크플로는 ISO/IEC 27566-1 연령 보증 표준을 준수한다고 선언할 수 있습니다.
콘솔 템플릿 **연령 추정 (ISO/IEC 27566-1)** 또는 **연령 검증 (ISO/IEC 27566-1)**에서 워크플로를 생성하십시오.
해당 선언은 워크플로 생성 시 지정되며 이후에는 변경할 수 없습니다.워크플로가 해당 표준을 선언하는 동안 Didit은 이를 연령에 대한 일회성 예/아니오 응답으로 고정합니다.
고정된 설정은 콘솔과 API를 통한 모든 저장 작업에 적용됩니다.- **연령 결정 결과만 수신됩니다.** 응답 속성이 잠겨 있으므로 결정에 개인정보가 포함되지 않습니다.
- 모든 국가, 지역별 재정의 및 적응형 연령 추정 임계값에서 **설정 가능한 최소 연령은 13세**입니다. 이보다 낮은 값은 거부됩니다.
- **세션 간 인식 없음.** 중복 문서 및 중복 얼굴 확인이 비활성화되며 생체 인식 템플릿이 저장되지 않습니다.
- **제한된 캡처.** 문서는 카메라로만 캡처할 수 있으며, 파일 업로드, 문서 촬영 중 사용자 모르게 셀피를 캡처하는 기능, 오디오 녹음은 지원되지 않습니다.
- **추가 데이터 검사 없음.** 예상 세부 정보 비교 및 데이터 검토 단계가 꺼지며, 신분증 인증은 데이터베이스 조회나 디지털 ID 지갑 없이 문서만 판독합니다.
- **임계값 필수.** 연령 임계값이 없는 워크플로는 저장 시 거부되므로 모든 사용자가 기본적으로 승인될 수 없습니다.## 모델 성능 및 통계아래 수치는 2026년 11월 4일부터 프로덕션에 적용된 연령 모델에 대한 결과입니다.
이 수치는 학습 전에 따로 분리해 둔 고정 평가 세트에서 도출되었습니다. 이는 13세 이상 사용자의 셀피 2,399장으로 구성되며, 각 개인의 연령은 인증된 신원 확인 문서에서 확인했습니다.
어떤 모델도 이 셀피나 해당 인물의 데이터로 학습되지 않았습니다.
전체 수치는 실제 트래픽의 성인 연령 분포에 18세 미만 10%를 결합한 평가 조합 기준이며, 각 연령대별 결과는 아래에 별도로 보고됩니다.### 정확도 지표<table>
  <thead>
    <tr>
      <th>지표</th>
      <th>값</th>
      <th>설명</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>**평균 절대 오차(MAE)**</td>
      <td>2.6년</td>
      <td>추정 연령과 문서상 연령 간의 평균 차이</td>
    </tr>

    <tr>
      <td>**표준 편차**</td>
      <td>2.3년</td>
      <td>개별 추정 간에 오차가 얼마나 변동하는지 나타내는 척도</td>
    </tr>

    <tr>
      <td>**18세 임계값 기준 정확도**</td>
      <td>96.0%</td>
      <td>폴백 구간 없이 18세 미만 또는 18세 이상으로 올바르게 분류된 셀피 비율(95% 신뢰수준에서 최소 95.3%)</td>
    </tr>
  </tbody>
</table>### 연령대별 성능오차는 연령 게이팅 결정이 내려지는 연령대 부근에서 가장 작으며, 연령이 증가함에 따라 커집니다.<table>
  <thead>
    <tr>
      <th>연령대</th>
      <th>MAE(년)</th>
      <th>표준 편차(년)</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>13-15</td>
      <td>1.70</td>
      <td>1.17</td>
    </tr>

    <tr>
      <td>16-17</td>
      <td>1.14</td>
      <td>1.37</td>
    </tr>

    <tr>
      <td>18-20</td>
      <td>1.86</td>
      <td>1.74</td>
    </tr>

    <tr>
      <td>21-25</td>
      <td>2.21</td>
      <td>1.78</td>
    </tr>

    <tr>
      <td>26-40</td>
      <td>2.77</td>
      <td>2.20</td>
    </tr>

    <tr>
      <td>41-60</td>
      <td>3.03</td>
      <td>2.62</td>
    </tr>

    <tr>
      <td>60세 초과</td>
      <td>4.33</td>
      <td>3.64</td>
    </tr>
  </tbody>
</table>> [!NOTE]
>
> 표준 편차는 평균의 불확실성이 아니라, 개별 추정 오차가 얼마나 변동하는지를 나타냅니다.
> 설정한 최소 연령 기준에서 1\~2년 이내인 추정치는 기준 연령을 기준으로 어느 쪽에든 놓일 수 있습니다. 임계값 근처에서의 잘못된 결정이 중대한 영향을 미치는 경우, 해당 경계 구간을 [적응형 신분증 인증 폴백](#적응형-연령-추정)으로 전환하십시오.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.