Skip to main content
These versions refer to Identity verification SDKs. Native Authentication modules and wrappers have a separate release: see the Authentication quickstarts.
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

Biometric consent needs native 4.10.0 or later. For people covered by Illinois, Texas or Colorado law, Didit can ask for explicit biometric consent before the first face capture. The hosted flow (Web SDK, WebView, browser) and native iOS and Android SDK 4.10.0 or later show that step; React Native and Flutter show it in a release that pins native 4.10.0 or later. A native SDK below 4.10.0, or one that does not report its version, cannot: its sessions run as before, and the decision reports biometric_consent.status: "pending" with reason: "BIOMETRIC_CONSENT_UNSUPPORTED_SDK". Upgrade if you verify people in those states.

What’s new in 4.15.1

On iOS and Android, the Travel Rule transfer steps now behave the same as in the hosted flow. The result reference is shown only when the session carries one, and consent links open only safe URL schemes. React Native 4.15.2 and Flutter 4.15.1 pin native 4.15.1 and add no JavaScript or Dart API.

What’s new in 4.15.0

On iOS and Android, the KYB Key People step can let a company listed on a stock exchange, or owned by a listed company, declare that instead of naming a beneficial owner, when the workflow allows it. The company still names at least one director or other senior managing official. DiditSignals adds automatic capture of the app session, screens and interaction (startAutocapture, stopAutocapture, track, trackScreen), and DiditAuth adds re-authentication (reauthenticate). React Native 4.15.0 and Flutter 4.15.0 pin native 4.15.0 and add no JavaScript or Dart API.

What’s new in 4.14.7

On iOS, the device class hash now reads the installed memory instead of its exact bytes, so the same device model gives a stable value. On iOS and Android, capture integrity no longer reports genuine cameras and Xcode runs as injected. React Native 4.14.7 and Flutter 4.14.7 pin native 4.14.7 and add no JavaScript or Dart API.

What’s new in 4.14.6

On iOS and Android, the phone step’s offer for another way to get the code now follows the same order as the web verification flow. When the code was sent by Telegram in Russia, Kazakhstan, Uzbekistan and Kyrgyzstan, WhatsApp is offered first; everywhere else SMS is offered first. React Native 4.14.6 and Flutter 4.14.6 pin native 4.14.6 and add no JavaScript or Dart API.

What’s new in 4.14.5

On Android, every SDK resource now starts with didit_, so the SDK no longer replaces a host app’s own resources (for example ic_close) and a host app’s strings no longer change the SDK’s copy. If you customized the SDK’s wording by overriding its Android resource names, use your application’s copy overrides instead (the Texts tab in Customization in the console). iOS has no functional change; its version stays aligned with Android. React Native 4.14.5 and Flutter 4.14.5 pin native 4.14.5 and add no JavaScript or Dart API.

What’s new in 4.14.4

On iOS and Android, the Czech bank sign-in appears on the method list as the bank’s official button. Czech sessions get the two-part verify button, every other country the logo alone, and the sign-in opens in the system browser. React Native 4.14.4 and Flutter 4.14.4 pin native 4.14.4 and add no JavaScript or Dart API.

What’s new in 4.14.3

On iOS, the selfie result screens show the sandbox banner only for sandbox sessions; live sessions no longer show “SANDBOX · Test data only” there. Android has no functional change; its version stays aligned with iOS. React Native 4.14.3 and Flutter 4.14.3 pin native 4.14.3 and add no JavaScript or Dart API.

What’s new in 4.14.2

In the phone step, when the verification code cannot reach the person because the call failed or the number cannot be reached, the code screen now says so, with Change number and Try again or Call me again, instead of waiting forever. The most used messaging app is offered first in Russia, Kazakhstan, Uzbekistan and Kyrgyzstan. On Android, the Google Wallet step shows a generic wallet icon instead of the Google Wallet logo. The welcome and business verification start titles keep the form of address of the rest of the screen in Spanish, Catalan and Hebrew. React Native 4.14.2 and Flutter 4.14.2 pin native 4.14.2 and add no JavaScript or Dart API.

What’s new in 4.14.1

On the e-signature step, when the SMS code could not be sent, the screen now keeps the code entry and shows why and when the person can retry, instead of a dead end. React Native 4.14.1 and Flutter 4.14.1 pin native 4.14.1 and add no JavaScript or Dart API.

What’s new in 4.14.0

In the phone step, a country whose phone channels list a voice call now offers it on iOS and Android: the channel picker shows Voice call, the code screen says a call reads the code out, and Get a call instead, Call me with the code and Call again are available, in all 54 languages. When a workflow asks for a qualified electronic signature (QES), the code screen says the qualified trust service provider texted the code to the verified phone and the device time zone goes with the request. After a provider failure the person returns to Review and sign with Send a new code (disabled when no code is left), an identity the qualified level cannot use shows Signing has ended, a document over the size limit has its own screen, and a sandbox signature is shown as a test signature. ConnectID’s Representative model is on iOS and Android: before the person picks a bank, Who is involved names the roles and shows the client’s logo with the purpose and an explicit consent, and after verification a Verified with ConnectID screen lists the shared details. UAE PASS uses the official Sign in with UAE PASS button, its opening, checking and confirmed screens, and the mandated messages for a cancelled, failed or unverified sign-in. The Asked to redo screen matches the web flow and the email: one line per step to redo with its reason, a singular or plural title that names your app, an Already done line, and the redo button named in the legal text, in all 54 languages. React Native 4.14.0 and Flutter 4.14.0 pin native 4.14.0 and add no JavaScript or Dart API.

What’s new in 4.13.2

On iOS, a photo requested from a camera that opens but delivers no frames no longer crashes your app: every photo request first checks for a running camera session with an active video connection, and the screen shows its camera error or skip instead. On Android, on the ID lookup selfie, a photo request from a camera that delivers no frames ends in the screen’s camera error after 5 seconds instead of waiting forever. On the welcome screen, while the list of steps goes on below its bottom fade, a round Scroll down button sits horizontally centred on the list (also in right-to-left languages), as in the web flow; a tap scrolls the list down, and the button hides at the end of the list and while a sheet is open. Android 4.13.1 was an interim release with only the Scroll down button; 4.13.2 brings it to iOS, React Native and Flutter. React Native 4.13.2 also fixes a launch crash in Android release builds minified with R8 and proguard-android-optimize.txt: the package now ships its own R8 rules. Flutter 4.13.2 also builds with Android Gradle Plugin 9 and its built-in Kotlin.

What’s new in 4.13.0

In the phone step, every +1 (US and Canada) number shows a short carrier disclosure under Send code (“Standard message and data rates may apply”) with links to the SMS Terms and the Privacy Policy, in the person’s language. The selfie oval now fits above its controls on short screens, and the green Done pill, the Got it after a document photo and the Selfie taken screen are gone: a captured photo goes straight to Processing. When document capture is only the fallback and a digital ID wallet leads, the wallet’s launch screen offers the wallet alone, and a wallet retry keeps the verification open without a document link. A flag is drawn for every country code Didit can send, and never the wrong one. A sandbox scenario armed on a session that already started now shows the reason instead of a generic error. On Android, the Credential Manager wallet reads “Verify with digital ID”, because Google Wallet or any other Android wallet that holds a compatible ID can answer it. iOS does not offer this method.

What’s new in 4.12.2

The welcome screen centres the logo above the left-aligned title, and iOS draws the customer’s logo 72 pt high, as Android and the web do. In the KYB key people step, Add representative opens with a representative role selected and saves the person under representatives even when the workflow switches some roles off. In questionnaires, “Secured by” stays pinned under the button on short screens and at large text, the country picker of an address question is titled for the address, and an open dropdown takes the fields’ corners.

What’s new in 4.12.1

On an iPhone whose storage is full, the document and selfie captures now keep their video: the iOS SDK records them in memory, and never uploads a recording without video frames. A server answer that lags behind an early answer no longer reopens the step that was just answered (the NFC, selfie or document step), on iOS and Android.

What’s new in 4.12.0

Wallet logos for every digital ID wallet the web flow shows (Mobile-ID, ConnectID, Finnish Trust Network, OneID, Bank iD, MojeID, FranceConnect, Auðkenni, the Estonian ID-card and GOV.UK Wallet), on the same white or black plate as the web. Capture hints say what to do when auto-capture is not running, the welcome keeps its legal sentence pinned at large text sizes, and a refused session start no longer offers a retry that cannot work. The document and selfie cameras have a Switch camera button beside the shutter, with Upload moved into Tips, and nothing is captured automatically while a sheet is open over the camera. On Android the Select camera sheet names cameras “Front camera” and “Back camera” in every language.

What’s new in 4.11.0

Version 4.11.0 also carries everything planned for 4.10.0, which was never published, so upgrade straight from 4.9.1. The flow has a redesigned shell with a new top bar, progress in words and a rebuilt welcome screen. Automatic document and selfie capture is now in every variant, on Didit’s own lightweight detectors, so the Core and AutoDetection variants capture the same way. The AutoDetection variant and the Android didit-sdk-autodetection artifact are deprecated and identical to Core, and the Android didit-sdk-autodetection-play artifact is no longer published. New steps: Bank verification, Location (opt-in through the Core-Location, NFC-Location and All-Location iOS variants), electronic signature, and biometric consent.

What’s new in 4.9.1

The document and proof of address country pickers now open on the country detected from the user’s IP address on iOS and Android, even when that lookup finishes after the screen appears. A country set in the session or one the user picked is never overridden. On Android, a questionnaire’s section header and fields are shown in the SDK language, and NFC passport scanning no longer crashes in the full variant. Russian and Kyrgyz verification copy is improved on both platforms.

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+)
  • 54 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)
  • 54 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)
  • 54 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.41+, 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)
  • 54 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).
Last modified on November 12, 2026