메인 콘텐츠로 건너뛰기
이 가이드는 REST API를 통해 Didit 신원 확인을 연동하는 전체 절차를 안내합니다. 자격 증명 받기, 세션 생성, 사용자에게 세션 제시, 결과 수신 순서로 진행합니다.

1단계: 자격 증명 받기

api_key를 얻는 방법은 두 가지입니다.

옵션 A: 프로그래밍 방식 등록(브라우저 불필요)

CI/CD 및 AI 에이전트에 적합합니다. POST /programmatic/register/와 POST /programmatic/verify-email/ 두 번의 API 호출로 응답에 api_key가 바로 포함되어 반환됩니다. → 전체 절차, 비밀번호 규칙, JWT 수명, 잠금 정책은 프로그래밍 방식 등록을 참조하십시오.

옵션 B: Didit 콘솔에서 받기

  1. Didit 콘솔으로 이동합니다.
  2. 조직을 생성하거나 선택합니다.
  3. 설정 → API & Webhooks로 이동합니다.
  4. 다음 항목을 복사합니다.
    • API 키: 모든 인증 호출에서 x-api-key 헤더로 사용됩니다.
    • webhook 비밀 키: webhook HMAC 서명을 검증하는 데 사용됩니다.

환경 변수


2단계: 워크플로 만들기

세션을 생성하기 전에 인증 워크플로가 필요합니다. 워크플로는 사용자가 거치게 될 인증 단계를 정의합니다.

콘솔에서 만들기

  1. Didit 콘솔으로 이동하여 워크플로를 선택합니다.
  2. 워크플로 만들기를 클릭합니다.
  3. 기본 템플릿을 선택합니다:
  1. 선택적 기능을 추가합니다:
  1. 워크플로 ID를 복사합니다.
자세한 구성 옵션은 워크플로 문서를 참조하십시오.

3단계: 검증 세션 생성

사용자를 위한 세션을 만들려면 API를 호출합니다.

요청

요청 파라미터

모든 옵션을 포함한 전체 예시

expected_details.expected_document_types는 신분증 인증 단계를 특정 문서 유형으로 제한합니다. 문서 선택 화면에는 요청한 유형만 표시됩니다. 허용되는 값: P(여권), ID(주민등록증), DL(운전면허증), RP(거주 허가증), HIC(건강보험 카드), TC(납세자 카드), SSC(사회보장 카드). 값은 대소문자를 구분하지 않으며 중복은 제거됩니다. 알 수 없는 값은 400을 반환합니다. 전체 스키마는 세션 생성 참조를 확인하세요.

응답

201 Created:

주요 응답 필드

멱등성. vendor_data가 제공되었고, 같은 vendor_data를 가진 미완료 세션(Not Started, In Progress, Resubmitted, Awaiting User 중 하나)이 워크플로의 최신 게시 버전에 이미 있으면, 중복을 만들지 않고 그 기존 세션을 반환합니다(여전히 201). 이때 callback과 metadata는 새 값으로 업데이트되며, status는 기존 세션의 상태를 반영합니다.
x-api-key 헤더가 없으면 403을 반환합니다. 응답 본문은 {"detail": "You do not have permission to perform this action."}이며, 권한이 없는 유효한 키를 사용했을 때와 같습니다. 잘못되었거나, 폐기되었거나, 만료된 키는 401을 반환합니다. 크레딧이 부족하면 400을 반환합니다. 전체 문서는 세션 생성 API 참조를 확인하세요.

4단계: 사용자에게 인증 플로우 제공

사용자에게 인증 플로우를 제공하는 방법을 선택하세요.

옵션 A: 네이티브 SDK (모바일에 권장)

카메라, NFC, 생체 인증 연동을 위해 session_token을 네이티브 SDK와 함께 사용합니다. → iOS SDK · Android SDK · React Native · Flutter

옵션 B: InContext iframe (웹에 권장)

3단계에서 반환된 url을 사용해 페이지에 검증을 삽입합니다.
→ InContext iframe

옵션 C: 리디렉션

사용자를 검증 URL로 리디렉션합니다.
→ 웹 리디렉션

옵션 D: 모바일 WebView

네이티브 SDK가 없는 모바일 앱용입니다.
→ iOS/Android의 WebView

5단계: 결과 수신

webhook 사용 (권장)

인증 상태가 변경되면 webhook이 서버에 실시간으로 알림을 보냅니다. 설정:
  1. 콘솔(API & Webhooks)에서 webhook 대상을 생성하거나, webhook_version: "v3"와 subscribed_events 배열(예: ["status.updated"])을 포함하여 POST /v3/webhook/destinations/를 호출하십시오.
  2. 생성 시 반환되는 secret_shared_key를 저장하십시오. 이 값은 모든 서명 변형에 사용되는 HMAC 비밀 키입니다.
  3. 서버에 webhook endpoint를 구현하십시오.
webhook payload 예시: decision 내부의 기능별 결과는 모두 복수형 배열(id_verifications[], nfc_verifications[], liveness_checks[], face_matches[], …)로 전달되며, 워크플로의 노드마다 항목이 하나씩 들어 있습니다. 이는 V3 계약이며 절대적으로 준수해야 합니다. 단수형 nfc / id_verification / liveness 키를 기준으로 코드를 작성하지 마십시오.
decision 객체는 status가 Approved, Declined, In Review 또는 Abandoned일 때만 존재합니다(Resubmitted 이벤트에는 resubmit_info가 포함됩니다). Didit은 재시도와 여러 전송 대상에 같은 event_id를 재사용하므로, 멱등성 처리의 기준으로 이 값을 사용하십시오. 모든 복수형 배열과 필드에 대해서는 데이터 모델을 참조하십시오. 서명 검증(X-Signature-V2, 권장): X-Signature-V2는 JSON 본문을 정규형으로 다시 인코딩한 값에 대한 HMAC-SHA256입니다. 정수 값을 가진 실수는 정수로 줄이고, 키는 재귀적으로 정렬하며, 구분자는 압축 형식을 사용하고, 유니코드는 그대로 유지합니다.
→ 원시 바이트 기반 X-Signature, 더 이상 권장되지 않는 엔벨로프 전용 X-Signature-Simple, 그리고 선택 방법을 포함한 webhook 전체 문서를 확인하십시오. Didit는 전송에 실패한 경우(5xx, 404, 시간 초과) 최대 2회 재시도합니다(약 1분 후, 이후 약 4분 후). 응답 대기 시간은 5초이므로 2xx 응답을 빠르게 반환하십시오.

API 사용 (선택 사항)

언제든지 같은 decision payload를 가져올 수 있습니다:
응답 구조(복수형 배열)는 webhook payload 내 decision 객체와 동일하며, 이 endpoint는 세션 수명 주기의 어느 시점에서든 호출할 수 있습니다. 실시간 업데이트에는 webhook을 사용하고, API 호출은 백필, 감사, 재구축 용도로만 사용하십시오. /decision/ 엔드포인트는 API 키당 분당 GET 요청 600회로 속도가 제한됩니다(속도 제한 참조). 오류 동작은 다음과 같습니다. 알 수 없는 session_id는 {"detail": "Not found."}와 함께 404를 반환합니다. 인증 실패는 403으로 나타나며, 이 endpoint는 401을 반환하지 않습니다. 응답에 포함된 미디어 URL은 수명이 짧은 사전 서명 링크이므로, 저장하지 말고 즉시 가져오십시오. → 세션 조회 API 참조

전체 코드 예제

Node.js / Express

Python / FastAPI


세션 상태

다음은 status의 가능한 10가지 값입니다. 대소문자를 구분하는 정확한 문자열이며, Kyc Expired는 대문자 K가 하나만 들어간다는 점에 유의하십시오. 전체 수명 주기, 상태 전환 및 Mermaid 다이어그램은 인증 상태를 참조하십시오.

다음 단계

  1. 연동 방식 선택:
  2. webhook 구성: webhook
  3. 용량 계획: 속도 제한
  4. 모든 상태 처리: 인증 상태
  5. 워크플로 사용자 지정: 워크플로
  6. API 연결 확인: 상태 확인

도움이 필요하신가요?

마지막 수정일 2026년 11월 7일