> ## 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.

# Didit API 레퍼런스: 신원 인증 REST API

> Didit의 전체 REST API 레퍼런스. KYC, KYB, AML, 생체 인증, 거래 모니터링 엔드포인트 제공. OpenAPI 스펙, 사용량 기반 요금, 월 $10 무료.



독립형 API 연동 프롬프트
        프롬프트를 클립보드에 복사



      
      

\<pre>

\``Integrate Didit standalone verification APIs into my backend for server-to-server identity checks.

\## Available Standalone APIs

\### Identity & Documents
\- POST /v3/id-verification/ — multipart/form-data: front_image (required), back_image (optional). Returns: { request_id, id_verification: { status, first_name, last_name, document_type, document_number, date_of_birth, nationality, expiration_date, issuing_state, address, parsed_address, warnings[] } }
\- POST /v3/poa/ — multipart/form-data: document (PDF/image). Returns: { request_id, poa: { status, document_type, issuer, poa_address, poa_parsed_address, issue_date, warnings[] } }
\- POST /v3/database-validation/ — JSON: { issuing_state, validation_type, first_name, last_name, date_of_birth, personal_number, ... }. Returns: { request_id, database_validation: { status, validations } }

\### Document AI
\- POST /v3/document-ai/ — multipart/form-data: document (PDF/image), fields (one JSON-encoded array string of { key, name, instruction, type: "text"|"number"|"date", required, is_full_name }, 1-30 items), expected_first_name + expected_last_name OR expected_company_name (+ expected_company_country), document_ai_name_match_score_threshold (default 80), per-risk *_action params. Returns: { request_id, document_ai: { status, extracted_data: { <key>: value|null }, detected_codes[], fields[], name_match_score, name_on_document, warnings[] } }. $0.20 per document.

\### Biometrics & Face
\- POST /v3/passive-liveness/ — multipart/form-data: user_image. Returns: { request_id, passive_liveness: { status, score, method } }
\- POST /v3/face-match/ — multipart/form-data: user_image + ref_image. Returns: { request_id, face_match: { status, score } }
\- POST /v3/face-search/ — multipart/form-data: user_image. Returns: { request_id, face_search: { status, total_matches, matches[] } }
\- POST /v3/age-estimation/ — multipart/form-data: user_image. Returns: { request_id, age_estimation: { status, age_estimation, score } }

\### Compliance
\- POST /v3/aml/ — JSON: { full_name, entity_type, date_of_birth, nationality, document_number, include_adverse_media, include_ongoing_monitoring }. Returns: { request_id, aml: { status, total_hits, hits[], score, entity_type } }

\### Business Verification (KYB)
\- POST /v3/kyb/search/ — JSON: { country_code (required), name, registration_number, tier: "basic" (default) | "shareholders" | "ubo", search_type: "contains", webhook_url, vendor_data, metadata }. `tier` picks the provider chain the search runs on; retrieve the candidate from select (Lite), shareholders or ubo. Up to $0.50 per successful request, separately from profile retrieval; empty results and failures are not charged. Returns: { request_id, kyb_registry: { companies[] ({ kyb_response_id, name, registration_number, status, type, fetch_status }), pagination, search_status, search_resolved } }. `kyb_response_id` is an opaque handle — pass it straight to select/shareholders/ubo, never parse it.
\- POST /v3/kyb/select/ — JSON: { kyb_response_id (from search), save_api_request, vendor_data, metadata }. **Lite** tier, priced per country ([per-country prices](https://docs.didit.me/getting-started/kyb-registry-pricing.md)). Returns: { request_id, kyb_registry: { status, company_name, registration_number, country_code, company_type, incorporation_date, registered_address, officers[], beneficial_owners[], fetch_status, data_resolved, ... } }
\- POST /v3/kyb/shareholders/ and POST /v3/kyb/ubo/ — same JSON shape as select. **Shareholders** and **UBOs** tiers, priced per country; delivered and billed as the highest tier the country's registries can serve. v3 only.

\### Contact Verification
\- POST /v3/email/send/ — JSON: { email }. Sends OTP code.
\- POST /v3/email/check/ — JSON: { email, code }. Verifies OTP.
\- POST /v3/phone/send/ — JSON: { phone, channel }. Sends OTP via SMS/WhatsApp/Telegram.
\- POST /v3/phone/check/ — JSON: { phone, code }. Verifies OTP.

\### Bank Verification
\- POST /v3/bank/account-check/ - JSON: { country (ISO 3166-1 alpha-3), account: { iban } or { account_number, sort_code | routing_number | ifsc | bsb | transit_institution | bank_code } or { clabe } or { cbu_cvu }, holder: { full_name } or { business_name }, vendor_data }. Checks that a bank account belongs to the name, with no session. Returns: { request_id, result: match | close_match | no_match | cannot_verify, holder_name (close_match only), account (masked), vendor_data, created_at }. Billed once per check the bank answers; errors are never billed.

\## Authentication
All requests require: Headers: { "x-api-key": DIDIT_API_KEY }
For file uploads: multipart/form-data. For JSON: Content-Type: application/json.

\## Common Parameters
\- save_api_request (bool, default true): if true, appears in Console > Manual Checks
\- vendor_data (string): your internal ID for tracking

\## Example: ID Verification (Node.js)
const FormData = require('form-data');
const fs = require('fs');
const form = new FormData();
form.append('front_image', fs.createReadStream('./id_front.jpg'));
form.append('back_image', fs.createReadStream('./id_back.jpg'));

const response = await fetch('https://verification.didit.me/v3/id-verification/', {
method: 'POST',
headers: { 'x-api-key': process.env.DIDIT_API_KEY, ...form.getHeaders() },
body: form
});
const result = await response.json();
// result.id_verification.status: "Approved" or "Declined"
// result.id_verification.first_name, .last_name, .document_number, etc.

\## Example: AML Screening
const response = await fetch('https://verification.didit.me/v3/aml/', {
method: 'POST',
headers: { 'x-api-key': process.env.DIDIT_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
full_name: 'John Doe',
entity_type: 'person',
date_of_birth: '1990-01-15',
nationality: 'US'
})
});
const result = await response.json();
// result.aml.status, result.aml.total_hits, result.aml.hits

\## When to Use Standalone APIs vs Sessions
\- Standalone: you have images/data, server-to-server, batch processing, custom UX
\- Sessions: user-facing flows where Didit handles camera, UX, multi-step, 54 languages

\## Rate Limits
\- Free: 10/min. Paid: 600/min. Exceeded: HTTP 429.

\## Environment Variables
\- DIDIT_API_KEY — from Didit Console > API & Webhooks

\## Docs
\- API Reference: https://docs.didit.me/api-reference/overview
\- Sessions vs APIs: https://docs.didit.me/api-reference/overview
\- Webhooks: https://docs.didit.me/integration/webhooks``

\</pre>



      
      

붙여넣을 곳

Didit은 신원 확인을 위한 **상호 보완적인 두 가지 방식**을 제공합니다. 두 방식의 차이를 이해하는 것은 사용 사례에 맞는 연동 방식을 고르는 데 필수적입니다.### [호스팅 세션](https://docs.didit.me/ko/sessions-api/create-session.md)사전에 구축되고 최적화된 UI를 갖춘 전체 인증 흐름입니다. 사용자는 리디렉션, iframe 또는 네이티브 SDK를 통해 Didit의 호스팅 인터페이스와 상호작용합니다.### [독립형 API](https://docs.didit.me/ko/standalone-apis/id-verification.md)서버 간 직접 API 호출입니다. 데이터(이미지, 문서, 이름)를 보내고 구조화된 인증 결과를 받으며, 최종 사용자 UI는 관여하지 않습니다.***## 호스팅 세션 (사용자 대면 흐름에 권장)호스팅 세션은 대부분의 연동에서 **권장되는 방식**입니다. 세션을 생성하면 Didit이 사용자에게 제공할 `verification_url`을 생성합니다. 사용자는 Didit의 최적화된 인터페이스에서 전체 인증 흐름을 완료하고, 결과는 webhook 또는 API를 통해 받게 됩니다.### 작동 방식**1. 세션 생성**서버가 워크플로 ID와 함께 `POST /v3/session/`을 호출합니다. Didit은 `verification_url`과 `session_token`을 반환합니다.**2. 사용자에게 제시**세션 토큰을 사용해 사용자를 리디렉션하거나, iframe으로 삽입하거나, 네이티브 SDK를 초기화합니다.**3. 사용자가 인증 완료**사용자는 Didit의 최적화된 UI에서 안내에 따라 신분증 촬영, 라이브니스 감지 및 추가 단계를 진행합니다.**4. 결과 수신**Didit은 인증 결정과 함께 서버로 webhook을 보내거나, 조회 API를 사용해 폴링할 수 있습니다.### 세션을 권장하는 이유| 장점 | 세부 정보 |
| - | - |
| **최적화된 UX** | 인증 인터페이스는 가장 높은 완료율을 목표로 전 세계적으로 지속해서 A/B 테스트를 거칩니다 |
| **카메라 처리** | 스마트 카메라 선택, 자동 촬영, 품질 검사 및 기기 호환성이 기본으로 포함됩니다 |
| **안내형 흐름** | 사용자를 위한 단계별 안내, 실시간 피드백 및 오류 복구를 제공합니다 |
| **다중 기능 워크플로** | 단일 흐름에서 여러 기능(신분증 + 라이브니스 감지 + AML + 전화번호 + 이메일)을 연결할 수 있습니다 |
| **보안** | 스푸핑 방지, 능동형 라이브니스 감지 및 기기 지문 인식이 흐름에 내장되어 있습니다 |
| **컴플라이언스** | 세션 단위 감사 추적, 동의 수집 및 데이터 보존 정책이 자동으로 처리됩니다 |
| **현지화** | 브라우저 자동 감지 기능을 제공하며 54개 언어를 지원합니다 |
| **모바일 네이티브** | iOS, Android, React Native, Flutter용 네이티브 SDK를 제공합니다 |
| **유지 관리 불필요** | Didit이 모든 UI 업데이트, 브라우저 및 기기 버그, 카메라 예외 상황을 처리합니다 |### 세션을 사용할 때- **사용자 온보딩 / KYC**: 신규 사용자가 가입하면서 신원을 확인해야 하는 경우
- **연령 확인**: 사용자가 최소 연령 요건을 충족하는지 확인하는 경우
- **재인증**: 기존 사용자를 주기적으로 다시 인증하는 경우
- **생체 인증**: 민감한 작업을 위해 사용자가 얼굴로 인증하는 경우
- **다단계 컴플라이언스**: 신분증 + 라이브니스 감지 + AML + 전화번호를 한 번에 요구하는 흐름이 필요한 경우
- **최종 사용자가 직접 참여하여 상호작용하는 모든 시나리오**### 세션 endpoint| Endpoint | 용도 |
| - | - |
| [세션 생성](https://docs.didit.me/ko/sessions-api/create-session.md) | 사용자를 위한 인증 URL을 생성합니다 |
| [세션 조회](https://docs.didit.me/ko/sessions-api/retrieve-session.md) | 세션의 전체 결과와 결정을 가져옵니다 |
| [세션 목록](https://docs.didit.me/ko/sessions-api/list-sessions.md) | 모든 세션을 조회하고 필터링합니다 |
| [세션 삭제](https://docs.didit.me/ko/sessions-api/delete-session.md) | 세션과 관련된 모든 데이터를 삭제합니다 |
| [PDF 생성](https://docs.didit.me/ko/sessions-api/generate-pdf.md) | 인증 보고서를 PDF로 내보냅니다 |
| [세션 공유](https://docs.didit.me/ko/sessions-api/share-session/share.md) | 파트너와 재사용 가능한 KYC를 위한 공유 토큰을 생성합니다 |
| [공유된 세션 가져오기](https://docs.didit.me/ko/sessions-api/share-session/import.md) | 파트너가 공유한 세션을 가져옵니다(재사용 가능한 KYC) |***## 독립형 API (서버 간 처리용)독립형 API를 사용하면 최종 사용자 UI 없이 **서버에서 직접** 개별 인증 기능을 호출할 수 있습니다. 데이터(이미지, 문서, 이름)를 보내면 구조화된 결과를 받습니다.### 작동 방식**1. 데이터 전송**서버에서 필요한 데이터(이미지, 문서 또는 JSON 필드)와 함께 독립형 endpoint(예: `POST /v3/id-verification/`)를 호출합니다.**2. 결과 수신**Didit이 요청을 동기적으로 처리하고, 응답에 구조화된 인증 결과를 반환합니다.### 독립형 API를 사용하는 경우| 사용 사례 | 예시 |
| - | - |
| **백엔드 처리** | 자체 캡처 UI에서 이미 확보한 신분증 이미지가 있어 이를 검증해야 하는 경우 |
| **일괄 인증** | 운영팀이 업로드한 대량의 신분증 문서를 처리하는 경우 |
| **맞춤형 UX** | 자체 캡처 흐름을 구축했고, 분석에만 Didit을 사용하려는 경우 |
| **서버 간 확인** | 사용자 상호작용 없이 고객 목록에 AML 스크리닝을 실행하는 경우 |
| **자동화 파이프라인** | CI/CD 또는 cron 기반 컴플라이언스 재확인(예: 일일 AML 모니터링) |
| **기존 시스템과의 통합** | Didit의 인증을 기존 문서 관리 시스템에 연결하는 경우 |
| **단일 기능 호출** | 기능 하나만 필요한 경우(예: AML 스크리닝 또는 얼굴 대조만) |### 사용 가능한 독립형 API**신원 및 문서**| API | 기능 |
| - | - |
| [ID Verification](https://docs.didit.me/ko/standalone-apis/id-verification.md) | 신분증(앞면 + 뒷면 이미지)에서 데이터를 추출하고 검증 |
| [Proof of Address](https://docs.didit.me/ko/standalone-apis/proof-of-address.md) | 주소 문서(공과금 고지서, 은행 명세서, 정부 발행 문서)를 검증 |
| [Address Validation](https://docs.didit.me/ko/standalone-apis/address-validation.md) | 주소가 존재하는지 확인하고, 좌표와 함께 정규화된 주소를 반환 |
| [Database Validation](https://docs.didit.me/ko/core-technology/database-validation/overview.md) | 사용자 데이터를 정부 데이터베이스와 대조 |**Document AI**| API | 기능 |
| - | - |
| [Document AI](https://docs.didit.me/ko/standalone-apis/document-ai.md) | 모든 문서(PDF 또는 이미지)에서 정의한 필드를 추출하고, 이름 일치 및 변조 여부를 확인 |**생체 인식 및 얼굴**| API | 기능 |
| - | - |
| [Passive Liveness](https://docs.didit.me/ko/standalone-apis/passive-liveness.md) | 단일 이미지로 실제 사람이 있는지 확인(스푸핑 방지) |
| [Face Match](https://docs.didit.me/ko/standalone-apis/face-match.md) | 두 얼굴을 비교해 동일 인물인지 판단 |
| [Face Search](https://docs.didit.me/ko/standalone-apis/face-search.md) | 이전에 인증된 모든 세션에서 얼굴 검색(1:N) |
| [Age Estimation](https://docs.didit.me/ko/standalone-apis/age-estimation.md) | 얼굴 이미지로 인물의 연령을 추정 |**컴플라이언스 및 위험**| API | 기능 |
| - | - |
| [AML Screening](https://docs.didit.me/ko/standalone-apis/aml-screening.md) | 개인 또는 법인을 제재, PEP 및 감시 목록과 대조 |**은행 계좌 확인**| API | 기능 |
| - | - |
| [Account check](https://docs.didit.me/ko/standalone-apis/bank-account-check.md) | 돈을 보내기 전에, 은행 계좌가 지정한 개인 또는 법인의 소유인지 확인 |**기업 확인(KYB)**| API | 기능 |
| - | - |
| [KYB Registry Search](https://docs.didit.me/ko/standalone-apis/kyb-registry-search.md) | 이름, 등록번호, 국가로 법인 등기부를 검색하며, 성공한 요청당 최대 \$0.50 |
| [KYB Registry Select](https://docs.didit.me/ko/standalone-apis/kyb-registry-select.md) | 선택한 법인의 전체 등기부 프로필(임원, 실소유자, 주소)을 조회 |***## 나란히 비교| | 호스팅 세션 | 독립형 API |
| - | - | - |
| **통합 작업량** | 낮음. 리디렉션, iframe 또는 SDK 사용 | 중간. 데이터 캡처와 제출을 직접 처리 |
| **사용자 상호작용** | 있음. 사용자가 Didit UI에서 흐름을 완료 | 없음. 서버 간 통신만 사용 |
| **카메라/캡처** | Didit이 처리(최적화됨) | 이미지와 데이터를 직접 제공 |
| **다기능 흐름** | 가능. 워크플로에서 기능을 연결 | API 호출당 기능 하나 |
| **UX 최적화** | 지속적으로 A/B 테스트 | UX를 직접 제어 |
| **현지화** | 54개 언어, 자동 감지 | 해당 없음(UI 없음) |
| **webhook** | 자동 상태 알림 | 해당 없음(동기식 응답) |
| **응답 시간** | 비동기(사용자가 원하는 속도로 완료) | 동기식(수 초) |
| **적합한 용도** | 사용자 대상 온보딩 및 인증 | 백엔드 처리 및 자동화 |
| **콘솔 표시 여부** | 대시보드에서 전체 세션 수명 주기 확인 | 수동 확인 섹션에 표시 |***## 둘 다 사용할 수 있나요?**예.** 많은 팀이 두 방식을 함께 사용합니다.1) **온보딩에는 세션 사용**: 신규 사용자는 가입 중에 전체 호스팅 인증 흐름을 거칩니다.
2) **지속적인 모니터링에는 독립형 AML 사용**: 크론 작업이 승인된 모든 사용자를 매일 밤 업데이트된 감시 목록으로 다시 스크리닝합니다.
3) **중복 탐지에는 독립형 얼굴 검색 사용**: 새 세션이 승인되면 서버가 얼굴 검색을 호출해 중복을 확인합니다.
4) **운영에는 독립형 신분증 인증 사용**: 컴플라이언스 팀이 예외 사례 검토를 위해 문서를 수동으로 업로드합니다.### 예시: 결합 아키텍처| 귀사의 애플리케이션 | Didit API | 유형 |
| - | - | - |
| **사용자 가입 흐름** | Sessions API(호스팅 UI) | 사용자 대상 |
| **매일 밤 AML 재스크리닝** | 독립형 AML API | 서버 간 |
| **운영팀 문서 검토** | 독립형 ID Verification API | 서버 간 |
| **중복 얼굴 탐지** | 독립형 Face Search API | 서버 간 |***## 시작하기### [세션으로 빠르게 시작하기](https://docs.didit.me/ko/integration/api-full-flow.md)5분 안에 첫 호스팅 인증 세션을 만드세요.### [API 인증](https://docs.didit.me/ko/getting-started/api-authentication.md)API 키를 발급받고 인증된 요청을 보내 보세요.### [webhook 설정](https://docs.didit.me/ko/integration/webhooks.md)인증 상태가 변경되면 실시간 알림을 받으세요.### [워크플로 만들기](https://docs.didit.me/ko/console/workflows.md)Business Console에서 맞춤형 인증 흐름을 구성하세요.***


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