KYC Docs Get credentials
Docs › Blink SDK › iOS

iOS

Drop-in identity verification for iOS with Swift concurrency. Your backend creates the session; the SDK presents the capture screens and runs the document and liveness steps.

package BlinkKyc 1.3.0 iOS 15+ install Swift Package Manager

Prepare the environment

  1. In Xcode, choose File › Add Package Dependencies… and enter the Blink package URL provided with your credentials. Add the BlinkKyc product to your app target.
  2. Add a camera usage description to Info.plist:
Info.plistxml
<key>NSCameraUsageDescription</key>
<string>We use the camera to photograph your document and confirm your identity.</string>

Verification flow

Get a session token from your backend (Session API), then present the capture from a view controller:

VerifyViewController.swiftswift
import BlinkKyc

func startVerification(sessionToken: String) {
    Task {
        do {
            let outcome = try await BlinkKyc(baseUrl: URL(string: "https://kyc-api.blink-pay.net")!,
                                             sessionToken: sessionToken)
                .document(type: .passport)   // .passport | .nationalId | .idCard | .drivingLicence
                .face()                      // liveness + face match
                .present(on: self)           // the SDK owns the camera UI
                .onProgress { progress in print(progress.step) }
                .run()

            // outcome.result is a device copy — confirm it on your backend.
        } catch {
            // BlinkStepError: a step failed (e.g. DOCUMENT_UNREADABLE).
            // BlinkError: session, network or capture problem — switch on its code.
        }
    }
}

Test on a real iPhone. The simulator has no camera, so the capture screens cannot run there.

UI customisation

VerifyViewController.swiftswift
BlinkKyc(baseUrl: apiURL, sessionToken: sessionToken,
         theme: BlinkTheme(accent: UIColor(red: 0.08, green: 0.50, blue: 0.24, alpha: 1)))

More in Customisation.

Next

Handle the device outcome and errors (SDK result), then read the authoritative decision on your backend (Result API).