무료
월 $0. 신용카드 정보가 필요 없습니다.
- 무료 KYC 번들 (신분증 확인 + 패시브 라이브니스 + 얼굴 매칭 + 기기 및 IP 분석), 매월 500건 제공
- 차단된 사용자
- 중복 감지
- 모든 세션에서 200개 이상의 사기 신호 감지
- Didit 네트워크 전반에 걸쳐 재사용 가능한 KYC
- 사례 관리 플랫폼
- 워크플로 빌더
- 공개 문서, 샌드박스, SDK, MCP(Model Context Protocol) 서버
- 커뮤니티 지원


전 세계 2,000개 이상의 기관에서 신뢰합니다.

피싱 방지 로그인
가입 시 확인된 신원을 재사용하여 재방문 사용자를 인증하세요. SIM 스왑 및 피싱 방지, 통화당 $0.10, 모든 시장에서 일반적인 SMS 왕복 비용보다 저렴합니다.
신분증, 라이브니스, 얼굴 매칭, 제재 목록, 주소, 연령, 전화번호, 이메일, 맞춤 질문 등 원하는 검사를 선택하세요. 대시보드에서 플로우로 드래그하거나, 동일한 플로우를 API에 게시할 수 있습니다. 조건에 따라 분기하고 A/B 테스트를 실행하며, 코드가 필요 없습니다.
저희 Web, iOS, Android, React Native 또는 Flutter SDK를 사용하여 네이티브로 임베드하세요. 호스팅된 페이지로 리디렉션하거나, 이메일, SMS, WhatsApp 등 어디든 사용자에게 링크를 보내세요. 스택에 맞는 방식을 선택하세요.
Didit은 카메라, 조명 신호, 모바일 핸드오프 및 접근성을 호스팅합니다. 사용자가 플로우를 진행하는 동안, 저희는 200개 이상의 사기 신호를 실시간으로 평가하고 모든 필드를 신뢰할 수 있는 데이터 소스와 대조하여 확인합니다. 2초 이내에 결과가 나옵니다.
실시간 서명된 웹훅은 사용자가 승인, 거부 또는 검토로 전송되는 즉시 데이터베이스를 동기화합니다. 필요에 따라 API를 폴링하거나, 콘솔을 열어 모든 세션, 모든 신호를 검사하고 케이스를 원하는 방식으로 관리할 수 있습니다.

$ curl -X POST https://verification.didit.me/v3/session/ \
-H "x-api-key: $DIDIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"workflow_id": "wf_bio_auth",
"vendor_data": "user-42",
// base64-encoded reference selfie, ≤ 1MB
// omit this field for liveness-only mode
"portrait_image": "/9j/4AAQSkZJRgABAQE..."
}'{ "session_url": "verify.didit.me/..." }// Your endpoint receives a signed payload
app.post("/webhooks/didit", (req, res) => {
const sig = req.headers["x-signature-v2"];
const expected = crypto.createHmac("sha256", SECRET)
.update(req.rawBody).digest("hex");
if (sig !== expected) return res.sendStatus(401);
const { status, decision, vendor_data } = req.body;
// status: Approved | Declined | In Review | ...
res.sendStatus(200);
});webhook_type: "status.updated", status: "Approved"# Didit Biometric Authentication — integrate in 5 minutes
You are integrating Didit's Biometric Authentication module into <my_stack>.
This is a returning-user passwordless re-verification flow — a drop-in
replacement for SMS or email 2FA at high-value actions (large transfers,
password reset, large withdrawals, sensitive setting changes). It is NOT
the first-time KYC sign-up flow — for that, see Didit Liveness at
docs.didit.me/core-technology/liveness/overview.
Every URL, header, and enum value below is canonical — do not paraphrase
or "improve" them.
## 1. Provision an account
- Sign up: https://business.didit.me (no credit card required).
- Or provision programmatically: POST https://apx.didit.me/auth/v2/programmatic/register/
(returns an API key bound to the workspace + application).
## 2. Create the biometric_authentication workflow (one time)
Biometric Authentication is a workflow_type, not a feature flag. Create
the workflow once, reuse the workflow_id for every authentication.
POST https://verification.didit.me/v3/workflows/
Header: x-api-key: <your-api-key>
Body:
- workflow_label (your label, e.g. "step-up-2fa")
- workflow_type "biometric_authentication" (snake_case enum)
- features the array
[{ feature: "LIVENESS" }] (liveness-only mode)
OR
[{ feature: "LIVENESS" }, { feature: "FACE_MATCH" }] (face-match mode)
- liveness_method "PASSIVE" | "FLASHING" | "ACTIVE_3D" (PASSIVE recommended for low-friction step-up)
Store the returned workflow_id — you will reuse it on every auth.
## 3. Authenticate a returning user
POST https://verification.didit.me/v3/session/
Header: x-api-key: <your-api-key>
Header: Content-Type: application/json
Body:
- workflow_id (from step 2)
- vendor_data (your own user id, e.g. "user-42")
- callback (optional URL we redirect the user to after capture)
- metadata (optional JSON, surfaced back on the webhook)
- portrait_image (Base64 JPEG, REQUIRED when the workflow has FACE_MATCH;
OMIT for liveness-only mode)
The portrait_image is the stored reference photo from the user's original
KYC verification (you already have it as id_verification.portrait_image in
the original session response). Send it as a Base64-encoded JPEG, max 1 MB.
Response: session_url — redirect the user to it. Didit hosts the capture
(camera, motion prompts, low-light fallback, accessibility) and posts the
verdict back via webhook.
## 4. Webhooks
- Register a webhook destination once via
POST https://verification.didit.me/v3/webhook/destinations/
Body: url, subscribed_events: ["session.verified", "session.declined",
"session.review_started"]
- Response includes secret_shared_key — store it.
- Every webhook delivery carries an X-Signature-V2 header you MUST verify
before trusting the payload. HMAC-SHA256 verification MUST run against the raw body bytes (the raw payload as Didit sent it) BEFORE any JSON parsing — re-serialising the parsed body changes whitespace and key order, which invalidates the signature.Algorithm:
1. sortKeys(payload) recursively
2. shortenFloats (truncate trailing zeros after the decimal point)
3. JSON.stringify the result
4. HMAC-SHA256 with the secret_shared_key
5. Hex-encode, compare to the X-Signature-V2 header.
## 5. Reading the report
The webhook payload (and the GET /v3/session/{id}/decision/ response)
returns the combined biometric_authentication shape:
status "Approved" | "Declined" | "Not Finished"
workflow_id string
session_id uuid
session_number integer
vendor_data your user id
liveness:
status "Approved" | "Declined" | "Not Finished"
method "PASSIVE" | "FLASHING" | "ACTIVE_3D"
score number 0-100
reference_image signed URL to the captured selfie (expires in 1 hour)
video_url signed URL (FLASHING and ACTIVE_3D only, expires in 1 hour)
warnings array
face_match: (only present in face-match mode)
status "Approved" | "Declined" | "Not Finished"
score number 0-100 (similarity %)
source_image signed URL to the captured selfie
target_image signed URL to the supplied portrait_image
warnings array
Overall status is "Approved" only when liveness.status == "Approved" AND
(face_match is absent OR face_match.status == "Approved").
Auto-decline triggers (always enforced by Didit, not configurable):
FACE_IN_BLOCKLIST, NO_FACE_DETECTED, LIVENESS_FACE_ATTACK, NO_REFERENCE_IMAGE
Configurable risks (action per workflow — Decline, Review, or Approve):
LOW_LIVENESS_SCORE, LOW_FACE_MATCH_SIMILARITY
## 6. Hard rules — do not change
- Base URL for /v3/* endpoints is verification.didit.me (NOT apx.didit.me).
- workflow_type is snake_case: biometric_authentication.
- Feature enums inside the workflow are UPPERCASE: LIVENESS, FACE_MATCH.
- Liveness method enum is UPPERCASE: PASSIVE, FLASHING, ACTIVE_3D.
- Auth header is x-api-key (lowercase, hyphenated).
- Webhook signature header is X-Signature-V2 (NOT X-Signature).
- Always verify webhook signatures before trusting payload data.
- Status casing matches exactly: "Approved", "Declined", "In Review",
"Not Finished" (title-cased, space-separated).
- portrait_image is Base64 JPEG, max 1 MB, required only in face-match mode.
## 7. Pricing reference (public)
- Biometric Authentication: $0.10 per authentication (passwordless re-auth).
- 500 free authentications every month, forever, on every account.
- For the original sign-up KYC, see https://didit.me/pricing (full KYC
bundle is $0.33 per onboarded user, which includes Liveness + Face Match +
ID Verification + Device & IP Analysis).
## 8. When to use this versus Liveness directly
- First-time KYC sign-up: use Liveness (the feature) inside an ID
Verification workflow. See docs.didit.me/core-technology/liveness/overview.
- Step-up at sensitive actions (transfer, password reset, large
withdrawal): use this Biometric Authentication workflow.
- High-volume passive monitoring (any login): use this workflow with
liveness-only mode (no portrait_image) — fastest, lowest friction.
## 9. Verify your integration
- Sandbox starts on signup at https://business.didit.me — no separate flag.
- Test images: deterministic synthetic faces returned in sandbox
(Approved by default; trigger Declined by sending the canonical "spoof"
test image).
- Switch to live: flip the application's environment toggle in console.
When in doubt: https://docs.didit.me/core-technology/biometric-auth/overview
월 $0. 신용카드 정보가 필요 없습니다.
사용한 만큼만 지불하세요. 25개 이상의 모듈. 모듈별 공개 가격, 월 최소 요금 없음.
맞춤형 MSA 및 SLA. 대규모 볼륨 및 규제 프로그램에 적합합니다.
무료로 시작 → 확인 실행 시에만 지불 → 맞춤형 계약, SLA 또는 데이터 상주를 위해 엔터프라이즈 잠금 해제.
Didit은 신원 및 사기 방지 인프라입니다. 우리가 직접 제품을 만들 때 있었으면 좋겠다고 생각했던 플랫폼이죠. 개방적이고 유연하며 개발자 친화적이어서, 블랙박스처럼 통합하는 대신 스택의 실제 구성 요소로 작동합니다.
하나의 API로 사람 본인 인증(KYC, know your customer), 기업 본인 인증(KYB, know your business), 암호화폐 지갑 심사(KYT, know your transaction), 그리고 실시간 거래 모니터링을 처리합니다. 이 모든 것은 다음을 목표로 구축된 스택 위에서 이루어집니다.
기반 기술: 14,000개 이상의 문서 유형, 48개 이상의 언어, 1,000개 이상의 데이터 소스, 그리고 모든 세션에서 200개 이상의 사기 신호를 처리합니다. Didit 인프라는 모든 세션에서 동적으로 학습하며 매일 발전합니다.
LIVENESS 기능과 선택적 FACE_MATCH 기능을 결합한 workflow_type(스네이크 케이스: biometric_authentication)입니다. Liveness 자체는 가입 기능입니다. 첫 KYC(know-your-customer) 흐름은 /products/liveness를 참조하세요. 둘 다 동일한 iBeta Level 1 Presentation Attack Detection (PAD) 인증 엔진을 사용하므로, 사용자가 온보딩 시 통과한 모델이 모든 로그인 시에도 동일하게 확인합니다.status(Approved, Declined, Not Finished), status, method(PASSIVE, FLASHING, 또는 ACTIVE_3D), score 0-100, reference_image, video_url, warnings를 포함하는 liveness 블록, 그리고 status, score 0-100, source_image, target_image, warnings를 포함하는 face_match 블록(워크플로에 FACE_MATCH가 있을 때만 존재)을 반환합니다. 서명된 이미지 및 비디오 URL은 60분 후에 만료됩니다. 전체 status는 Liveness가 승인되고 (얼굴 일치가 없거나 얼굴 일치가 승인될 때만) Approved입니다.전체 과정은 일반적으로 처음부터 끝까지 30초 이내에 완료됩니다., 신분증을 들고, 서류를 촬영하고, 셀카를 찍으면 끝입니다. 이는 시장에서 가장 빠른 속도입니다. 기존 KYC 제공업체는 동일한 과정에 90초 이상이 소요되는 경우가 많습니다.
백엔드에서 Didit은 사용자가 셀카를 완료한 시점부터 웹훅이 실행되는 시점까지 측정했을 때, p99 기준으로 2초 이내에 결과를 반환합니다. 모바일 캡처는 느린 휴대폰과 느린 네트워크에 최적화되어 있습니다. 점진적 이미지 압축, 지연 소프트웨어 개발 키트 로드, 그리고 사용자가 웹에서 시작하는 경우 QR 코드를 통해 데스크톱에서 휴대폰으로 한 번의 탭으로 전환하는 기능을 제공합니다.
FACE_IN_BLOCKLIST, NO_FACE_DETECTED, LIVENESS_FACE_ATTACK, NO_REFERENCE_IMAGE의 네 가지 위험은 자동 거절됩니다. LOW_LIVENESS_SCORE 및 LOW_FACE_MATCH_SIMILARITY와 같은 구성 가능한 경고를 통해 애플리케이션별로 검토 및 거절 임계값을 조정할 수 있습니다.모든 세션은 7가지 명확한 상태 중 하나로 처리되므로, 개발자 코드는 항상 다음 단계를 알 수 있습니다.
Approved, 모든 검사를 통과했습니다. 사용자를 다음 단계로 진행하세요.Declined, 하나 이상의 검사에 실패했습니다. 전체 흐름을 다시 실행하지 않고도 사용자가 특정 실패 단계(예: 셀카 다시 촬영)를 재시도하도록 허용할 수 있습니다.In Review, 규정 준수 검토를 위해 플래그가 지정되었습니다. 콘솔에서 케이스를 열고 모든 신호를 확인한 후 승인 또는 거절을 결정하세요.In Progress, 사용자가 흐름 중간에 있습니다.Not Started, 링크가 전송되었지만 사용자가 아직 열지 않았습니다. 너무 오래 방치되면 알림을 보내세요.Abandoned, 사용자가 링크를 열었지만 제시간에 완료하지 못했습니다. 다시 참여를 유도하거나 만료시키세요.Expired, 세션 링크가 만료되었습니다. 새 세션을 생성하세요.모든 상태 변경 시 서명된 웹훅이 실행되므로 데이터베이스는 항상 동기화 상태를 유지합니다. 중단되거나 거절된 세션은 무료입니다.
프로덕션 데이터는 기본적으로 Amazon Web Services의 유럽 연합에서 처리 및 저장됩니다. 엔터프라이즈 계약의 경우 규제 기관의 요구 사항에 따라 다른 지역을 요청할 수 있습니다.
모든 곳에서 암호화됩니다. 모든 데이터베이스, 객체 스토어 및 백업에서 AES-256 암호화가 적용됩니다. 모든 API 호출, 웹훅 및 비즈니스 콘솔 세션에서 전송 중인 데이터는 Transport Layer Security 1.3으로 보호됩니다. 생체 인식 데이터는 별도의 고객 마스터 키로 암호화됩니다.
데이터 보존 기간은 직접 제어할 수 있습니다. 기본 보존 기간은 무기한(무제한)이지만, 애플리케이션별로 30일에서 10년 사이로 더 짧게 구성할 수 있으며, 대시보드 또는 API를 통해 언제든지 개별 세션을 삭제할 수 있습니다.
인증: SOC 2 Type 1 (Type 2 감사 진행 중), ISO/IEC 27001:2022, iBeta Level 1 PAD, 그리고 Didit의 원격 신원 확인이 대면 확인보다 안전하다는 스페인 Tesoro / SEPBLAC / CNMV의 공식 인증을 받았습니다. 전체 보고서는 /security-compliance에서 확인하세요.
Didit은 신원 인프라에 중요한 규제 기관에 대해 기본적으로 규정을 준수합니다.
자세한 메모, 모든 인증서, 모든 규제 기관 서신: /security-compliance.
세 가지 통합 경로 중 스택에 맞는 것을 선택하세요.
세 가지 모두 동일한 대시보드, 동일한 청구, 동일한 성공 기반 가격이 적용됩니다. 단계별 가이드는 docs.didit.me/integration/integration-prompt에서 확인하세요.