1단계: 자격 증명 받기
api_key를 얻는 방법은 두 가지입니다.
옵션 A: 프로그래밍 방식 등록(브라우저 불필요)
CI/CD 및 AI 에이전트에 적합합니다.POST /programmatic/register/와 POST /programmatic/verify-email/ 두 번의 API 호출로 응답에 api_key가 바로 포함되어 반환됩니다.
→ 전체 절차, 비밀번호 규칙, JWT 수명, 잠금 정책은 프로그래밍 방식 등록을 참조하십시오.
옵션 B: Didit 콘솔에서 받기
- Didit 콘솔으로 이동합니다.
- 조직을 생성하거나 선택합니다.
- 설정 → API & Webhooks로 이동합니다.
- 다음 항목을 복사합니다.
- API 키: 모든 인증 호출에서
x-api-key헤더로 사용됩니다. - webhook 비밀 키: webhook HMAC 서명을 검증하는 데 사용됩니다.
- API 키: 모든 인증 호출에서
환경 변수
2단계: 워크플로 만들기
세션을 생성하기 전에 인증 워크플로가 필요합니다. 워크플로는 사용자가 거치게 될 인증 단계를 정의합니다.콘솔에서 만들기
- Didit 콘솔으로 이동하여 워크플로를 선택합니다.
- 워크플로 만들기를 클릭합니다.
- 기본 템플릿을 선택합니다:
- 선택적 기능을 추가합니다:
- 워크플로 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을 사용해 페이지에 검증을 삽입합니다.
옵션 C: 리디렉션
사용자를 검증 URL로 리디렉션합니다.옵션 D: 모바일 WebView
네이티브 SDK가 없는 모바일 앱용입니다.5단계: 결과 수신
webhook 사용 (권장)
인증 상태가 변경되면 webhook이 서버에 실시간으로 알림을 보냅니다. 설정:- 콘솔(API & Webhooks)에서 webhook 대상을 생성하거나,
webhook_version: "v3"와subscribed_events배열(예:["status.updated"])을 포함하여POST /v3/webhook/destinations/를 호출하십시오. - 생성 시 반환되는
secret_shared_key를 저장하십시오. 이 값은 모든 서명 변형에 사용되는 HMAC 비밀 키입니다. - 서버에 webhook endpoint를 구현하십시오.
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를 가져올 수 있습니다: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 다이어그램은 인증 상태를 참조하십시오.
다음 단계
도움이 필요하신가요?
- 지원: support@didit.me
- 프로그래밍 방식 온보딩: 프로그래밍 방식 등록