Identity Verification iOS SDK
Beta
Last updated: January 21, 2026
You can use the Identity Verification iOS SDK to redirect applicants to attempts in your iOS mobile app.
Information
To enable the SDK for your Identity Verification configuration ID supports the SDK, contact your account manager or request support.
You must have integrated the Identity Verification solution.
The following minimum versions apply:
- iOS 15
- Swift 5.5
- Xcode 16
Follow these steps:
- Install the SDK and add your logo.
- Add the camera permissions request.
- Customize and localize the user interface (UI).
- Initialize the SDK.
When you receive the Identify Verification iOS SDK ZIP file from your account manager, install the SDK using Swift Package Manager:
- In your Xcode project, go to File > Add packages.
- Enter the following URL:
https://github.com/checkout/checkout-ios-identity-verification. - Add
CheckoutIDVto your app target.
Alternatively, you can add the dependencies in your Package.swift:
1.dependencies = [2.package(url: "https://github.com/checkout/checkout-ios-identity-verification", from: "0.1.0")3]45.targets = [6.target(7name: "<your-app>",8dependencies: [9.product(name: "CheckoutIDV", package: "checkout-ios-identity-verification")10]11)12]
Information
Star the SDK in GitHub to receive notifications when Checkout.com releases updates to the SDK.
In your Xcode project's assets library, add your business's logo as a PNG file.
Information
For information on providing a logo for dark mode, see Apple Developer – Providing images for different appearances.
In your app's Info.plist file, add a message telling applicants that your app is requesting permission to access their device camera to complete the verification.
1<key>NSCameraUsageDescription</key>2<string>We need access to your camera to verify your identity.</string>
Information
For more information, see Apple Developer – NSCameraUsageDescription.
If the applicant first denies camera permission and then manually enables it in their iOS Settings, the operating system terminates and then restarts your app to apply the change.
You are responsible for providing a smooth user experience when handling this scenario. For example, by restoring the app's state and re-initiating the verification on relaunch.
You can use the IDVTheme struct to customize the following elements of the verification UI:
- Button corner radius
- Colors
- Fonts
- Logo
1import CheckoutIDV23let theme = IDVTheme(4colors: ...,5typography: ...,6buttonCornerRadius: ...,7logoImage: ...8)
You can use the IDVConfiguration struct to customize the commercial name for your business that appears in the UI:
1let configuration = IDVConfiguration(commercialName: "<your-business-name>", theme: theme)
The UI supports the following languages:
- Chinese (simplified)
- Dutch
- English (UK)
- English (US)
- Estonian
- Finnish
- French
- German
- Italian
- Japanese
- Korean
- Latvian
- Polish
- Portuguese
- Romanian
- Russian
- Slovak
- Spanish
- Swedish
- Call the Create an attempt endpoint from your back end, which returns the following:
- The attempt URL, which is valid for 15 minutes, in the
verification_urlfield - The
client_secret, which is valid for 48 hours, to authorize the verification
- With the SDK, create an
IdentityVerificationinstance with your configuration and theme.
Information
The lifecycle of the IdentityVerification must outlive the IdentityVerificationView.
We recommend having a long-living view, or having your preferred dependency container own it.
- Create the
IdentityVerificationView, which takes the clientIdentityVerificationas a parameter. When the view is displayed, start the client by calling thestartmethod and pass the attempt URL and the client secret:
1import SwiftUI2import CheckoutIDV34struct ContentView: View {5@StateObject private var idvClient = IdentityVerification(configuration: .init(commercialName: "<Your-business-name>", theme: .default))6var body: some View {7IdentityVerificationView(idv: idvClient)8.task {9let returnReason = await idvClient.start(clientSecret: "<Your-client-secret>", verificationURL: "<Attempt-url>")10// Handle the return reason11switch returnReason {12case .success:13print("success")14default:15print("error")16}17}18}19}
The method returns the verification result as a ReturnReason.
To retry a verification, call the start method again.
When the verification is completed and the result is available, catch the ReturnReason enum.
| Enum | Description |
|---|---|
| The verification was completed successfully. |
| The applicant selected a button to refuse to perform the verification. This can have the value |
| The applicant needs to retry the verification. This can have the following values:
|
Information
Each ReturnReason value returns a response code that provides more information about the reason.
See Identities response codes.