Skip to main content

🚀 Getting Started

Try it live — no code required

See the Web SDK in action right now on the live camera demo page — document auto-capture, face active liveness, face verification, and passive liveness, all running in your browser.

The iApp eKYC SDK is a free, open-source (Apache-2.0) set of client SDKs for iApp Technology's enterprise eKYC APIs — automatic Thai ID card / passport capture, face active liveness, face verification, and passive liveness — for Flutter (Android/iOS) and Web (HTML5/JavaScript).

The SDKs themselves cost nothing. API calls are billed per request to your iApp API key at the same rates as calling the APIs directly — see each capability page for its credit cost.

Source code: https://github.com/iapp-technology/iapp-ekyc-sdk

What the SDK does for you

CapabilityWhat the SDK doesAPI charged
🪪 ID Card auto-captureDetects the card boundary, waits for a sharp stable frame, perspective-corrects, submits1.25 IC front / 0.75 IC back
🛂 Passport auto-captureSame engine tuned for the passport data page (MRZ)0.75 IC
📇 Official card auto-captureDriver license, bank book, ID card with signature1.0–1.25 IC/page
🙂 Face Active LivenessRandomized on-device challenges, best-frame selection, server-signed verdict1 IC
👥 Face VerificationOne-call comparison of two face images0.3 IC
🛡️ Face Passive LivenessSingle-image spoof check0.3 IC

Installation

Flutter

Add the SDK as a git dependency in pubspec.yaml:

dependencies:
iapp_ekyc_sdk:
git:
url: https://github.com/iapp-technology/iapp-ekyc-sdk.git
path: flutter
import 'package:iapp_ekyc_sdk/iapp_ekyc_sdk.dart';

final client = IappEkycClient(apiKey: 'YOUR_API_KEY');

Web

Install from npm:

npm install @iapp-technology/ekyc-sdk
import { IappEkyc } from '@iapp-technology/ekyc-sdk';

const ekyc = new IappEkyc({ apiKey: 'YOUR_API_KEY' });

Or load the UMD bundle via a script tag, which exposes the window.IappEkyc namespace (the class lives inside it):

<script src="https://unpkg.com/@iapp-technology/ekyc-sdk"></script>
<script>
const ekyc = new window.IappEkyc.IappEkyc({ apiKey: 'YOUR_API_KEY' });
</script>

API Key Setup

Get an API key from the API Key Management page.

Keep your key out of shipped clients

Any key that ships in a client app can be extracted (APK decompilation, browser dev tools). For production, use the backend-proxy pattern: point the SDK at your own backend and keep the iApp key server-side.

IappEkycClient(apiKey: '', baseUrl: 'https://your-backend.example.com/ekyc')

When apiKey is empty the SDK sends no apikey header; your proxy attaches the real key and forwards to https://api.iapp.co.th. At minimum, create a dedicated restricted key per app so a leaked key can be revoked independently. Full guidance: SECURITY.md on GitHub.

Theming

Both platforms ship the same professional light-blue default theme and accept full overrides. Token names and default values are identical across platforms:

TokenDefaultUsed for
primary#0284C7buttons, active guide frame, progress
primaryDark#0C4A6Eheadings, instruction text
primaryLight#BAE6FDidle guide frame, subtle accents
surface#F0F9FFsheets, instruction chips
onPrimary#FFFFFFtext/icons on primary
success#22C55Equad locked, challenge passed
warning#F59E0Bhold still / too blurry
error#EF4444failures
overlayScrim#0C4A6E at 60%camera overlay outside the guide
brandDeep#113F7Boptional iApp brand accent
borderRadius16chips, buttons, result cards
guideStrokeWidth3guide frame stroke
fontFamilyplatform defaultoptional override

FlutterEkycTheme is a plain immutable class (no dependency on Theme.of):

const theme = EkycTheme.lightBlue;             // default
final custom = EkycTheme.lightBlue.copyWith(
primary: Color(0xFF113F7B),
borderRadius: 12,
);
DocumentCaptureView.start(context, theme: custom, ...);

Web — tokens are injected as CSS custom properties on the mount element:

new IappEkyc({ apiKey, theme: { primary: '#113F7B', borderRadius: 12 } });
/* or override with plain CSS */
#ekyc-mount { --iapp-ekyc-primary: #113f7b; --iapp-ekyc-border-radius: 12px; }

More detail: THEMING.md on GitHub.

Localization

All UI strings ship in English, Thai, and Chinese:

// Flutter
DocumentCaptureView.start(context, client: client,
documentType: DocumentType.thaiIdFront, locale: EkycLocale.th);
// Web: 'en' | 'th' | 'zh'
await ekyc.captureDocument({ mount, documentType: 'thaiIdFront', locale: 'th' });

Platform Requirements

Flutter

  • Flutter ≥ 3.32 / Dart ≥ 3.8
  • Android: minSdk 24
  • iOS: 15.5+ and an NSCameraUsageDescription entry in Info.plist (see the flutter/example app in the repo for the required permission strings)

Web

  • Modern browsers with WebAssembly and getUserMedia
  • HTTPS required (or localhost) — browsers block camera access on insecure origins
  • OpenCV/MediaPipe assets are lazy-loaded only when a capture flow starts; self-host them via the assetBaseUrl option if your CSP forbids CDN requests

Next Steps