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

# KYC SDK & 연동: 웹, 모바일 & Zapier

> Didit 웹 및 네이티브 SDK, Python·Node.js·Go·Java·PHP·Ruby·.NET 서버 SDK, 플러그인으로 웹, 모바일, 백엔드 앱에 KYC를 연동하세요.

> [!NOTE]
>
> 최종 사용자 로그인은 [인증](https://docs.didit.me/ko/authentication/overview.md)을 참조하십시오. 인증, 모니터링, 로그인을 함께 구성하려면 [공유 연동 프롬프트](https://docs.didit.me/ko/integration/integration-prompt.md)를 사용하십시오. 인증 SDK의 제공 여부는 아래의 신원 인증 SDK 버전과 별개입니다.

AI Agent Integration Prompt
        프롬프트를 클립보드에 복사



      
      

\<pre>

\``I want to integrate Didit identity verification into my application. Analyze my project and recommend the best integration approach.

\## My Project Context
\[Describe your stack: framework, language, web vs mobile, etc.]

\## Two Integration Approaches

Didit offers two main integration approaches. Choose based on your use case:

\### Approach 1: SDK Integration via Sessions (RECOMMENDED)
Best for: User-facing verification flows (KYC onboarding, age verification, identity checks).
How it works: Your backend creates a session, your frontend presents a verification UI using an SDK, the user completes verification, and your backend receives results via webhook.
Why recommended: Didit-hosted verification flows are A/B tested and optimized for the highest completion rates, fastest speed, and best security. The SDKs handle camera permissions, NFC, liveness detection, document capture, and all edge cases out of the box.

\### Approach 2: Standalone API (Direct REST Calls)
Best for: Server-to-server operations, batch processing, custom verification pipelines, or when you want full control over the verification UI.
How it works: Your backend calls Didit APIs directly for individual checks (ID verification, AML screening, liveness, face matching, age estimation, phone/email verification, proof of address, etc.).
When to use: When you already have your own capture UI, when you're doing backend-only batch processing, or when you need to compose individual verification steps into a custom pipeline.
Docs: Each standalone API has its own documentation under [Standalone APIs](https://docs.didit.me/standalone-apis/id-verification.md).

\## SDK Availability — All SDKs Are Available

\### For Web Apps
1\. **JavaScript SDK** (@didit-protocol/sdk-web) — RECOMMENDED for web. Works with React, Vue, Angular, Next.js, Nuxt, Svelte, and vanilla JS. Modal and inline/embedded modes. Full TypeScript support. Install: npm install @didit-protocol/sdk-web
2\. InContext Iframe — Embed verification in your page with <iframe>. Simplest setup, no npm needed. Good for quick prototypes.
3\. Redirect — Redirect user to Didit-hosted page, they return via callback URL. Best for cross-device flows or when iframe camera access is problematic.
4\. WordPress/WooCommerce Plugin — For WordPress sites. No-code setup.
5\. Shopify Plugin — For Shopify stores. No-code setup.
6\. Salesforce — Salesforce-side integration. See /integration/web-sdks/salesforce.

\### For Mobile Apps (ALWAYS prefer native SDKs over WebView)
1\. **iOS Native SDK** — RECOMMENDED for iOS. Swift/SwiftUI/UIKit. iOS 13.0+ (NFC requires iOS 15.0+). Best UX, NFC passport/ID reading, optimized camera, 54 languages. SPM: https://github.com/didit-protocol/sdk-ios. CocoaPods: pod 'DiditSDK'
2\. **Android Native SDK** — RECOMMENDED for Android. Kotlin/Jetpack Compose. minSdk 23 (Android 6.0+); ML auto-detection on API 24+. Best UX, NFC, optimized camera, 54 languages. Maven: me.didit:didit-sdk (via https://raw.githubusercontent.com/didit-protocol/sdk-android/main/repository)
3\. **React Native SDK** — RECOMMENDED for React Native. RN 0.76+ (New Architecture), iOS 13.0+ / Android API 24+. Cross-platform TypeScript API wrapping native iOS and Android SDKs. NFC support, Expo config plugin (development build required). Install: npm install @didit-protocol/sdk-react-native
4\. **Flutter SDK** — RECOMMENDED for Flutter. Flutter 3.3+, Dart 3.11+, iOS 13.0+ / Android API 23+. Cross-platform Dart API wrapping native iOS and Android SDKs. NFC support. pub.dev: didit_sdk
5\. WebView (FALLBACK ONLY) — Only use if no native SDK is available for your platform. Loses NFC, camera optimization, and biometric integration.

\### For Backend/Server
1\. **Server SDKs** — RECOMMENDED for backend code. Official typed libraries for the Didit server APIs, with webhook signature verification built in. Python: pip install didit-sdk. Node.js/TypeScript: npm install @didit-protocol/sdk-node. Go: go get github.com/didit-protocol/sdk-go. Java/Kotlin: me.didit:didit-java. PHP: composer require didit-protocol/sdk-php guzzlehttp/guzzle. Ruby: gem install didit-sdk. .NET: dotnet add package Didit. Each reads DIDIT_API_KEY. Docs: https://docs.didit.me/integration/server-sdks/overview
2\. REST API — Server-to-server, for languages without a server SDK. Create sessions, retrieve results, manage users, call standalone APIs.
3\. Webhooks — Receive real-time verification results asynchronously.
4\. Zapier — No-code automation for verification workflows.

\## SDK Session Integration Architecture (Recommended Flow)

\### Step 1: Backend creates a session
With a server SDK: client.sessions.create(workflow_id=..., vendor_data=..., callback=...) (same method in every language, in its own case). The raw request:
POST https://verification.didit.me/v3/session/
Headers: { "x-api-key": DIDIT_API_KEY, "Content-Type": "application/json" }
Body: {
"workflow_id": DIDIT_WORKFLOW_ID,
"callback": "https://myapp.com/done",
"vendor_data": "internal-user-id"
}
Response: {
"session_id": "uuid",
"session_token": "jwt",
"verification_url": "https://verify.didit.me/...",
"status": "Not Started"
}

\### Step 2: Present verification to user (choose one)
\- Web JS SDK: DiditSdk.shared.startVerification({ url: verification_url })
\- Iframe: embed verification_url in <iframe>
\- Redirect: window.location.href = verification_url
\- iOS/Android/RN/Flutter native SDK: DiditSdk.startVerification(token: session_token)

\### Step 3: Receive results via webhook
Your backend receives POST with:
\{
"session_id": "uuid",
"status": "Approved" | "Declined" | "In Review" | "In Progress" | "Abandoned",
"vendor_data": "internal-user-id",
"decision": { ... }
}
With a server SDK, webhooks.verify(raw_body, headers, WEBHOOK_SECRET) does all of the checks below and returns a typed event. Without one, verify the webhook signature (HMAC-SHA256, lowercase hex). Pick one header:
\- X-Signature-V2 = HMAC(WEBHOOK_SECRET, canonical_json) — recommended; canonical_json is the body re-serialized with sorted keys, compact separators, and unescaped Unicode (survives middleware re-encoding).
\- X-Signature = HMAC(WEBHOOK_SECRET, raw_body) — simplest, but only if you read the exact raw bytes before any parser touches them.
Also reject if abs(now - X-Timestamp) > 300 and use a constant-time compare. Full scheme: /integration/webhooks

\### Step 4: Update your database
\- "Approved" → user.verified = true, store decision data
\- "Declined" → user.verification_status = "declined", log warnings
\- "In Review" → user.verification_status = "pending_review"
\- "Abandoned" → send reminder to user
\- "Expired" → create new session

\## Decision Data Model (from webhook or GET /v3/session/{id}/decision/)
Every per-feature result is a PLURAL ARRAY (one entry per workflow node). Never code against a singular key like `nfc` or `id_verification`.
\{
"session_id": "uuid",
"session_kind": "KYC",
"status": "Approved",
"id_verifications":    [{ "node_id": "feature_ocr", "status": "Approved", "first_name": "John", "last_name": "Doe", "document_type": "Passport" }],
"nfc_verifications":   [{ "node_id": "feature_nfc", "status": "Approved" }],
"liveness_checks":     [{ "node_id": "feature_liveness", "status": "Approved", "score": 0.99, "method": "passive" }],
"face_matches":        [{ "node_id": "feature_face_match", "status": "Approved", "score": 95 }],
"aml_screenings":      [{ "node_id": "feature_aml", "status": "Approved", "total_hits": 0, "hits": [] }],
"phone_verifications": [{ "node_id": "feature_phone", "status": "Approved", "full_number": "+14155552671", "is_disposable": false }],
"email_verifications": [{ "node_id": "feature_email", "status": "Approved", "email": "alex.sample@example.com", "is_breached": false }],
"ip_analyses":         [{ "node_id": "feature_ip",    "status": "Approved" }]
}

\## Choosing the Right Approach

\| Question | → Use SDK Sessions | → Use Standalone API |
\|----------|-------------------|---------------------|
\| User-facing verification? | ✅ Yes | For custom capture UI only |
\| Need highest completion rate? | ✅ Yes (A/B tested flows) | You manage UX yourself |
\| Need NFC passport reading? | ✅ Yes (native SDKs) | Not available |
\| Batch/backend processing? | Not ideal | ✅ Yes |
\| Custom verification pipeline? | Limited to workflows | ✅ Full flexibility |
\| Fastest integration? | ✅ Minutes with UniLink | Requires more setup |

\## Rate Limits
\- POST /v3/session/: 600 session creations per minute per application (scope: session-v2-create). Applies to every application — there is no separate free-tier limit on V3 today.
\- GET endpoints: 300 requests per minute per application (generic-get).
\- Write endpoints (POST/PATCH/DELETE): 300 per minute per application (generic-write).
\- Transaction creates and event ingestion (POST /v3/transactions/, POST /v3/events/, POST /v3/events/batch/): 600 per minute per application (ingest-write), instead of the generic write budget.
\- 429 responses include X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset (epoch seconds), and Retry-After. See /integration/rate-limiting.

\## Environment Variables Needed
\- DIDIT_API_KEY — from Didit Console > API & Webhooks
\- DIDIT_WEBHOOK_SECRET — from Didit Console > API & Webhooks
\- DIDIT_WORKFLOW_ID — from Didit Console > Workflows

\## AI Agent Skills (for Cursor, Claude Code, etc.)
Install pre-built skills: npx clawhub@latest install didit-sessions
GitHub: https://github.com/didit-protocol/skills

\## Docs
\- Quick Start: https://docs.didit.me/getting-started/quick-start
\- API Full Flow: https://docs.didit.me/integration/api-full-flow
\- Webhooks: https://docs.didit.me/integration/webhooks
\- Standalone APIs: https://docs.didit.me/standalone-apis/
\- API Reference: https://docs.didit.me/api-reference/overview

Based on my project, please:
1\. Recommend the best integration approach (SDK sessions vs standalone API) and the best method for my platform
2\. Create the backend endpoint to create sessions (or standalone API calls)
3\. Create the frontend component/view to present verification (if SDK approach)
4\. Create the webhook endpoint to receive results
5\. Add database schema updates to track verification status``

\</pre>



      
      

붙여넣을 곳

플랫폼과 사용 사례에 따라 Didit 연동 방식을 선택하십시오.> [!NOTE]
>
> ### 권장: 세션을 통한 SDK 연동
>
> 최종 사용자를 대상으로 하는 인증(KYC 온보딩, 연령 인증, 신원 확인)에는 **호스팅 세션을 통한 SDK 연동**을 권장합니다. 인증 흐름은 A/B 테스트를 거쳤으며, 가장 높은 완료율, 가장 빠른 속도, 최고 수준의 보안을 위해 최적화되어 있습니다. 웹, iOS, Android, React Native, Flutter를 포함한 모든 SDK를 **현재 사용할 수 있습니다**.
>
> 백엔드에서는 Python, Node.js, Go, Java, PHP, Ruby 또는 .NET용 [서버 SDK](https://docs.didit.me/ko/integration/server-sdks/overview.md)를 사용하여 세션을 생성하고, 결정을 읽고, webhook을 검증하십시오. 서버 간 작업(일괄 처리, 맞춤형 파이프라인)에는 동일한 SDK를 통해 **독립형 API**를 호출하십시오. 개별 인증 엔드포인트는 [독립형 API 문서](https://docs.didit.me/ko/standalone-apis/id-verification.md)를 참조하십시오.> [!WARNING]
>
> 자사 제품에서 Didit 세션을 시작하더라도, 컨트롤러 측 고지 및 동의 계층에 대한 책임은 여전히 귀사에 있습니다. 사용자가 인증을 시작하기 전에 Didit이 워크플로를 제공한다는 사실을 알리고, 자사 개인정보 처리방침 링크를 제공하며, 문서, 셀피, 라이브니스 또는 생체 인식 캡처에 명시적 동의가 필요한 경우 이를 수집하십시오. 자세한 내용은 [보안 및 규정 준수](https://docs.didit.me/ko/getting-started/security-compliance.md), [화이트 라벨](https://docs.didit.me/ko/console/white-label.md), [Create Session](https://docs.didit.me/ko/sessions-api/create-session.md)을 참조하십시오.이 Didit Academy 강의에서는 한 번에 완전한 연동을 구성합니다. SDK, 환경별 API 키, 세션 생성 호출, 그리고 서명 시크릿을 검증하는 webhook 핸들러를 다룹니다.[완전한 연동 가이드 - Didit Academy](https://www.youtube.com/embed/fX03-WEu_EI?rel=0\&playsinline=1)***## 웹JavaScript, iframe 또는 리디렉션으로 웹 앱에 인증을 연동하십시오.> [card] [웹 SDK](https://docs.didit.me/ko/integration/web-sdks/overview.md)
>
> JavaScript SDK, iframe 임베드 또는 리디렉션. React, Vue, Angular, 바닐라 JS.> [card] [JavaScript SDK](https://docs.didit.me/ko/integration/web-sdks/javascript-sdk.md)
>
> 이벤트 콜백과 TypeScript를 통한 완전한 프로그래밍 방식 제어.> [card] [InContext Iframe](https://docs.didit.me/ko/integration/web-sdks/incontext-iframe.md)
>
> 페이지에 인증을 임베드합니다. UniLink를 사용하면 백엔드가 필요하지 않습니다.> [card] [리디렉션](https://docs.didit.me/ko/integration/web-sdks/web-redirect.md)
>
> Didit이 호스팅하는 흐름으로 리디렉션합니다. 기기 간 전환을 지원합니다.***## 모바일기기에서 최고의 카메라, NFC 및 라이브니스 경험을 제공하는 네이티브 SDK입니다.> [card] [네이티브 SDK](https://docs.didit.me/ko/integration/native-sdks/overview.md)
>
> iOS, Android, React Native, Flutter. NFC 및 생체 인식을 완전히 지원합니다.> [card] [iOS SDK](https://docs.didit.me/ko/integration/native-sdks/ios-sdk.md)
>
> SwiftUI 및 UIKit. NFC 여권 판독. 현재 사용 가능합니다.> [card] [Android SDK](https://docs.didit.me/ko/integration/native-sdks/android-sdk.md)
>
> Kotlin 및 Jetpack Compose. NFC 지원. 현재 사용 가능합니다.> [card] [React Native](https://docs.didit.me/ko/integration/native-sdks/react-native-sdk.md)
>
> 네이티브 iOS 및 Android SDK를 감싸는 크로스 플랫폼 TypeScript API. NFC 지원. 현재 사용 가능합니다.> [card] [Flutter](https://docs.didit.me/ko/integration/native-sdks/flutter-sdk.md)
>
> 네이티브 iOS 및 Android SDK를 감싸는 크로스 플랫폼 Dart API. NFC 지원. 현재 사용 가능합니다.> [card] [WebView 대체 수단](https://docs.didit.me/ko/integration/web-sdks/webview-in-ios-android.md)
>
> 네이티브 SDK가 없는 플랫폼용 대체 수단입니다. 가능한 경우 네이티브 SDK를 우선 사용하십시오.***## 서버백엔드용 공식 라이브러리입니다. Didit 서버 API에 대한 타입 지정 호출, webhook 검증, 인증 토큰 검사를 제공합니다.> [card] [서버 SDK](https://docs.didit.me/ko/integration/server-sdks/overview.md)
>
> 설치 매트릭스, 구성, 오류 및 버전 관리.> [card] [Python](https://docs.didit.me/ko/integration/server-sdks/python.md)
>
> 동기 및 비동기 클라이언트. Python 3.10+.> [card] [Node.js](https://docs.didit.me/ko/integration/server-sdks/node.md)
>
> TypeScript 타입, ESM 및 CommonJS. Node.js 18+.> [card] [Go](https://docs.didit.me/ko/integration/server-sdks/go.md)
>
> 표준 라이브러리만 사용. Go 1.22+.> [card] [Java](https://docs.didit.me/ko/integration/server-sdks/java.md)
>
> Java 및 Kotlin, 동기 및 비동기. Java 11+.> [card] [PHP](https://docs.didit.me/ko/integration/server-sdks/php.md)
>
> 어떤 PSR-18 HTTP 클라이언트든 사용 가능. PHP 8.1+.> [card] [Ruby](https://docs.didit.me/ko/integration/server-sdks/ruby.md)
>
> Rails와 잘 맞으며 net/http 기반. Ruby 3.1+.> [card] [.NET](https://docs.didit.me/ko/integration/server-sdks/dotnet.md)
>
> C#, 비동기, 의존성 주입. .NET 8 및 .NET Standard 2.0.***## 통합인기 플랫폼용 플러그인과 노코드 도구입니다.> [card] [Zapier](https://docs.didit.me/ko/integration/engines/zapier.md)
>
> 노코드 트리거와 작업으로 인증을 자동화합니다.> [card] [WordPress 및 WooCommerce](https://docs.didit.me/ko/integration/web-sdks/wordpress-woocommerce.md)
>
> WordPress 및 WooCommerce 사이트용 플러그인.> [card] [Shopify](https://docs.didit.me/ko/integration/web-sdks/shopify.md)
>
> Shopify에서 구매자를 인증하고 연령 제한 상품에 대한 접근을 제한합니다.> [card] [Salesforce](https://docs.didit.me/ko/integration/web-sdks/salesforce.md)
>
> Salesforce 플로우와 레코드에서 Didit 인증을 트리거합니다.***## Quick Comparison| 플랫폼 | 방식 | 상태 | NFC | 카메라 | 적합한 용도 |
| - | - | - | :-: | - | - |
| Web | JavaScript SDK | ✅ 사용 가능 | — | 브라우저 | 전체 제어, React / Vue / Angular |
| Web | InContext Iframe | ✅ 사용 가능 | — | 브라우저 | 빠른 임베드, 백엔드 불필요 |
| Web | 리디렉션 | ✅ 사용 가능 | — | 브라우저 | 기기 간 사용, 간단한 설정 |
| iOS | Native SDK | ✅ 사용 가능 | ✅ | 최적화됨 | 최고의 UX, NFC 칩 판독 |
| Android | Native SDK | ✅ 사용 가능 | ✅ | 최적화됨 | 최고의 UX, NFC 칩 판독 |
| React Native | Native SDK | ✅ 사용 가능 | ✅ | 최적화됨 | 최고의 UX, NFC 칩 판독 |
| Flutter | Native SDK | ✅ 사용 가능 | ✅ | 최적화됨 | 최고의 UX, NFC 칩 판독 |
| Backend | 서버 SDK (Python, Node.js, Go, Java, PHP, Ruby, .NET) | ✅ 사용 가능 | — | — | 세션, 결정, 독립 실행형 API, webhook |
| 노코드 | Zapier | ✅ 사용 가능 | — | — | 자동화된 워크플로 |
| CMS | WordPress | ✅ 사용 가능 | — | — | WP / WooCommerce 사이트 |
| Commerce | Shopify | ✅ 사용 가능 | — | — | Shopify 스토어 |
| CRM | Salesforce | ✅ 사용 가능 | — | — | Salesforce 플로우 및 레코드 |## 다음 단계> [card] [API 전체 흐름](https://docs.didit.me/ko/integration/api-full-flow.md)
>
> 엔드 투 엔드 세션 연동: 세션 생성, webhook, 결과.> [card] [webhook](https://docs.didit.me/ko/integration/webhooks.md)
>
> 실시간 인증 상태 업데이트를 수신합니다.***


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