Bynn Flutter SDK

The Bynn Flutter SDK provides comprehensive identity verification and KYC (Know Your Customer) capabilities for Flutter applications. Integrate advanced document verification, liveness detection, and age verification seamlessly into your mobile app.

Features

  • Document Verification: Capture and verify government-issued IDs and passports
  • Liveness Detection: Advanced facial recognition with anti-spoofing technology
  • Age Verification: Streamlined liveness-only flow for age verification
  • Phone & Email Verification: Multi-factor authentication via OTP
  • Real-time Processing: WebSocket-based status updates
  • Multi-language Support: Localized UI
  • Native Performance: iOS and Android native integration with optimized camera handling

Requirements

  • Flutter SDK: >=3.6.0 <4.0.0
  • iOS: >=12.0
  • Android: >=API 21
  • Dart SDK: >=3.0.0

Installation

Add the dependency to your pubspec.yaml:

dependencies:
  bynn_id_verification: ^1.0.0

Then run:

flutter pub get

iOS Setup

Add camera permissions to your ios/Runner/Info.plist:

<key>NSCameraUsageDescription</key>
<string>Camera access is required for document and identity verification</string>

Android Setup

Add camera permissions to your android/app/src/main/AndroidManifest.xml:

<uses-permission android:name="android.permission.CAMERA" />

Usage

Basic Integration

import 'package:bynn_id_verification/bynn.dart';

// Present verification flow as a modal
await BynnIDVerification.shared.presentVerificationFlow(
  context: context,
  apiKey: 'your_api_key_here',
  kycLevel: 'your_kyc_level',
  uniqueId: 'user_unique_identifier',
  firstName: 'John',
  lastName: 'Doe',
  phoneNumber: '+1234567890',
  email: 'john.doe@example.com',
  onVerificationCompleted: () {
    print('Verification completed successfully!');
  },
  onVerificationCancelled: () {
    print('Verification was cancelled by user');
  },
  onVerificationError: (error) {
    print('Verification failed: $error');
  },
);

Age Verification Flow

For age verification:

await BynnIDVerification.shared.presentVerificationFlow(
  context: context,
  apiKey: 'your_api_key_here',
  kycLevel: 'your_kyc_level',
  uniqueId: 'user_unique_identifier', // required 
  ageVerification: true, // Enable age verification mode
  onVerificationCompleted: () {
    print('Age verification completed!');
  },
  onVerificationError: (error) {
    print('Age verification failed: $error');
  },
);

Configuration Options

Parameter Type Required Description
apiKey String Yes Your Bynn API key
kycLevel String Yes Verification level provided by Bynn
uniqueId String Yes (age verification) Unique user identifier (non-PII)
firstName String No User's first name
lastName String No User's last name
phoneNumber String No User's phone number for verification
email String No User's email for verification
ageVerification bool No Enable age verification mode (default: false)
showCompletionView bool No Show completion screen (default: true)

Verification Flow Types

Determined per KYC

Age Verification Flow

A streamlined flow for age verification:

  1. Consent: User consent for age verification
  2. Liveness Detection: Facial verification for age estimation
  3. Processing: Age verification through facial analysis
  4. Completion: Age verification result

Error Handling

The SDK provides comprehensive error handling through callback functions:

onVerificationError: (String error) {
  // Handle different error scenarios
  if (error.contains('network')) {
    // Handle network connectivity issues
  } else if (error.contains('document')) {
    // Handle document-related errors
  } else if (error.contains('liveness')) {
    // Handle liveness detection failures
  }
  
  // Show user-friendly error message
  showDialog(
    context: context,
    builder: (context) => AlertDialog(
      title: Text('Verification Error'),
      content: Text(error),
      actions: [
        TextButton(
          onPressed: () => Navigator.of(context).pop(),
          child: Text('OK'),
        ),
      ],
    ),
  );
}

Support

License

This project is licensed under the MIT License - see the LICENSE file for details.

Libraries

bynn
data/api_client
data/api_error
data/api_request
data/requests/address_verification_request
data/requests/age_verification_request
data/requests/complete_age_verification_request
data/requests/complete_liveness_request
data/requests/create_session_request
data/requests/email_verification_confirm_request
data/requests/email_verification_start_request
data/requests/funds_verification_request
data/requests/phone_verification_confirm_request
data/requests/phone_verification_start_request
data/requests/preflight_request
data/requests/start_age_verification_request
data/requests/start_liveness_capture_request
data/requests/upload_media_request
data/responses/address_verification_response
data/responses/age_verification_response
data/responses/complete_age_verification_response
data/responses/create_session_response
data/responses/email_verification_confirm_response
data/responses/email_verification_start_response
data/responses/funds_verification_response
data/responses/liveness_capture_response
data/responses/liveness_completion_response
data/responses/phone_verification_confirm_response
data/responses/phone_verification_start_response
data/responses/preflight_response
data/responses/start_age_verification_response
data/responses/upload_media_response
data/websocket_manager
generated/app_localizations
generated/app_localizations_af
generated/app_localizations_am
generated/app_localizations_ar
generated/app_localizations_az
generated/app_localizations_azb
generated/app_localizations_be
generated/app_localizations_bg
generated/app_localizations_bm
generated/app_localizations_bn
generated/app_localizations_bs
generated/app_localizations_ca
generated/app_localizations_ceb
generated/app_localizations_cs
generated/app_localizations_cy
generated/app_localizations_da
generated/app_localizations_de
generated/app_localizations_el
generated/app_localizations_en
generated/app_localizations_eo
generated/app_localizations_es
generated/app_localizations_et
generated/app_localizations_eu
generated/app_localizations_fa
generated/app_localizations_fi
generated/app_localizations_fil
generated/app_localizations_fr
generated/app_localizations_fy
generated/app_localizations_gl
generated/app_localizations_gu
generated/app_localizations_ha
generated/app_localizations_he
generated/app_localizations_hi
generated/app_localizations_hr
generated/app_localizations_ht
generated/app_localizations_hu
generated/app_localizations_hy
generated/app_localizations_id
generated/app_localizations_ig
generated/app_localizations_is
generated/app_localizations_it
generated/app_localizations_ja
generated/app_localizations_jv
generated/app_localizations_ka
generated/app_localizations_kk
generated/app_localizations_km
generated/app_localizations_kn
generated/app_localizations_ko
generated/app_localizations_ky
generated/app_localizations_la
generated/app_localizations_lb
generated/app_localizations_lo
generated/app_localizations_lt
generated/app_localizations_lv
generated/app_localizations_mg
generated/app_localizations_mi
generated/app_localizations_mk
generated/app_localizations_ml
generated/app_localizations_mn
generated/app_localizations_mr
generated/app_localizations_ms
generated/app_localizations_mt
generated/app_localizations_my
generated/app_localizations_ne
generated/app_localizations_nl
generated/app_localizations_no
generated/app_localizations_ny
generated/app_localizations_or
generated/app_localizations_pa
generated/app_localizations_pl
generated/app_localizations_ps
generated/app_localizations_pt
generated/app_localizations_ro
generated/app_localizations_ru
generated/app_localizations_si
generated/app_localizations_sk
generated/app_localizations_sl
generated/app_localizations_so
generated/app_localizations_sq
generated/app_localizations_sr
generated/app_localizations_sv
generated/app_localizations_sw
generated/app_localizations_ta
generated/app_localizations_te
generated/app_localizations_tg
generated/app_localizations_th
generated/app_localizations_tl
generated/app_localizations_tr
generated/app_localizations_ug
generated/app_localizations_uk
generated/app_localizations_ur
generated/app_localizations_uz
generated/app_localizations_vi
generated/app_localizations_xh
generated/app_localizations_yi
generated/app_localizations_yo
generated/app_localizations_zh
generated/app_localizations_zu
liveness/liveness_platform_interface
models/app_screen
models/aws_credentials
models/branding
models/camera
models/camera_error
models/camera_state
models/country_code
models/detect_blur_and_bright_spot
models/extra_data
models/id_document_state
models/id_document_type
models/liveness_session_config
models/models
models/requirement
models/screen
providers/age_verification_provider
providers/api_client_provider
providers/camera_provider
providers/document_scan_provider
providers/document_upload_provider
providers/liveness_provider
providers/phone_email_provider
providers/session_provider
providers/verification_provider
providers/websocket_provider
strings
views/age_verification_view
views/document_scan_view
views/document_upload_view
views/id_error_view
views/liveness_check_view
views/liveness_info_view
views/phone_email_confirm_view
views/phone_email_verify_view
views/processing_view
views/progress_loader
views/verification_completion_view
views/verification_flow_view