Skip to main content
Integrate Didit verification natively into your mobile applications with our official SDKs. Native SDKs provide a seamless user experience, better performance, and full access to device capabilities compared to WebView-based integrations.

SDK Availability

What’s new in 4.9.0

All native and cross-platform mobile SDKs now offer an opt-in language selector on the verification welcome screen. Set showLanguageSelector to true to show the same compact, searchable selector used by the web verification flow. The selector is hidden by default, so existing integrations keep their current behavior until they enable it.

Alternative: If a native SDK isn’t available for your platform yet, you can use WebView Integration as a fallback.


How a verification session flows

Every native SDK consumes the same Didit verification session. The flow is:
  1. Your backend calls POST /v3/session/ with workflow_id plus any optional context (vendor_data, contact_details, expected_details, metadata, callback).
  2. Didit returns a session_id, a short-lived session_token, and a hosted url.
  3. Your mobile app receives the session_token from your backend and passes it to the SDK (startVerification(token: …)).
  4. The native SDK opens the verification UI, the user completes the steps, and the SDK returns a result with the session’s terminal status (Approved, Declined, In Review, etc.).
  5. Your backend receives the full decision via a webhook (webhook_type: "status.updated") and persists it.
The SDK result tells you the workflow outcome (status). The complete decision — document fields, face match scores, AML hits, NFC data, warnings — is delivered to your server via webhook and can also be fetched from the Retrieve Session Decision endpoint. Never trust the client-side result alone for authorisation decisions.
All native SDKs also support a UniLink mode (workflow ID only, no backend required). Use UniLink for quick prototypes and the session-token method for production.

iOS SDK

When to use: native Swift / SwiftUI / UIKit apps targeting iOS 13+. A lightweight, server-driven iOS SDK for identity verification with minimal configuration required.

GitHub Repository

View source code and examples on GitHub
Key Features:
  • SwiftUI and UIKit support
  • NFC passport/ID reading (iOS 15+; the no-NFC Core and AutoDetection variants strip NFC and OpenSSL, and deploy to iOS 13+)
  • 53 languages supported
  • Customizable UI theming
  • Session token or workflow ID integration
Quick Start:
→ Full iOS SDK Documentation

Android SDK

When to use: native Kotlin / Jetpack Compose / Java apps targeting Android 6.0 (API 23) or higher. A lightweight, server-driven Android SDK for identity verification with minimal configuration required.

GitHub Repository

View source code and examples on GitHub
Key Features:
  • Kotlin and Jetpack Compose support
  • NFC passport/ID reading (opt-in me.didit:didit-sdk-core artifact strips NFC dependencies)
  • ML-based document and face auto-detection on API 24+ (graceful manual-capture fallback on API 23)
  • 53 languages supported
  • Customizable UI theming
  • Session token or workflow ID integration
Quick Start:
→ Full Android SDK Documentation

React Native SDK

When to use: cross-platform React Native or Expo apps that need a single TypeScript API across iOS and Android (RN 0.76+, New Architecture). A cross-platform React Native SDK that wraps the native iOS and Android SDKs with a unified TypeScript API.

GitHub Repository

View source code and examples on GitHub
Key Features:
  • Single TypeScript API for both iOS and Android
  • Expo support with zero-config config plugin (development build required — no Expo Go)
  • React Native CLI support
  • NFC passport/ID reading (toggle off with DIDIT_SDK_IOS_NFC_ENABLED=false / diditSdkAndroidNfcEnabled=false)
  • 53 languages supported (inherited from native SDKs)
  • Session token or workflow ID integration
Quick Start:
→ Full React Native SDK Documentation

Flutter SDK

When to use: cross-platform Flutter apps that need a single Dart API across iOS and Android (Flutter 3.3+, Dart 3.11+). A cross-platform Flutter SDK that wraps the native iOS and Android SDKs with a unified Dart API.

pub.dev Package

View package on pub.dev
Key Features:
  • Single Dart API for both iOS and Android
  • Platform channel integration with native SDKs
  • NFC passport/ID reading (toggle off with DIDIT_SDK_IOS_NFC_ENABLED=false / diditSdkAndroidNfcEnabled=false)
  • 53 languages supported (inherited from native SDKs)
  • Session token or workflow ID integration
Quick Start:
→ Full Flutter SDK Documentation

Web SDK (JavaScript)

When to use: browser-based apps and web frameworks (React, Vue, Angular, Next.js, Nuxt, Svelte, vanilla JS). The Web SDK opens the hosted verification flow in a modal or inline iframe — for mobile apps, prefer the native SDKs above. A JavaScript SDK for web applications with React, Vue, Angular, Next.js, Nuxt, Svelte, and vanilla JS support.

NPM Package

View package on npm
Key Features:
  • Programmatic session management and event callbacks
  • React, Vue, Angular, Next.js, Nuxt, Svelte, and vanilla JS support
  • Full TypeScript support
  • Modal & inline (embedded) modes
  • State management for custom UI
Quick Start:
→ Full JavaScript SDK Documentation | All Web SDKs

Choosing an integration

Native SDKs are the best fit when you need NFC e-passport reading, the lowest-latency camera capture, and an in-app experience indistinguishable from your other native screens. Use WebView Integration as a fallback when you cannot ship a native SDK update (for example, brownfield apps you cannot rebuild, or platforms without a Didit native SDK).