Skip to main content

Getting Started

The iApp eKYC SDK is a free, open-source (Apache-2.0) client for the iApp eKYC APIs. It captures a Thai ID card, passport or official document from the camera, runs face liveness and verification, and calls the API for you; each call is billed to your API key at the same price as calling the API directly. Source code: github.com/iapp-technology/iapp-ekyc-sdk. Try it in your browser on the live camera demo.

Install and capture​

Get an API key from API Key Management. Flutter and Web run the capture engine on the device. The native wrappers for iOS, Android and React Native run the same engine, loaded from https://iapp.co.th/sdk/webview.html at runtime, so capture is identical on every platform and the app needs internet access.

  1. Requires Flutter ≥ 3.32 and Dart ≥ 3.8; Android minSdk 24; iOS 15.5+ with NSCameraUsageDescription in Info.plist (the repository's flutter/example app has the permission strings).
  2. Add the SDK as a git dependency in pubspec.yaml.
  3. Create the client and capture the front of a Thai ID card.
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');

final front = await DocumentCaptureView.start(
context,
client: client,
documentType: DocumentType.thaiIdFront,
locale: EkycLocale.th,
);

API key​

A key shipped inside an app can be extracted, from a decompiled APK or the browser's developer tools. In production, point the SDK at your own backend and keep the iApp key there:

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

With an empty apiKey the SDK sends no apikey header; your backend adds the real key and forwards the call to https://api.iapp.co.th. At minimum, give each app its own restricted key so a leaked one can be revoked on its own. Details: SECURITY.md.

Flows and prices​

Each flow calls one API and is billed at that API's price.

Theme and language​

Every platform ships a light-blue default theme and accepts overrides under the same token names; the native wrappers take them through their config objects. Screen text ships in English, Thai and Chinese: locale: 'th' on Web, EkycLocale.th on Flutter, config.locale = .th on iOS, .locale(EkycLocale.TH) on Android and locale="th" on React Native.

EkycTheme is a plain immutable class with 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, ...);
Theme tokens and defaults
TokenDefaultUsed for
primary#0284C7buttons, active guide frame, progress
primaryDark#0C4A6Eheadings, instruction text
primaryLight#BAE6FDidle guide frame, subtle accents
surface#F0F9FFsheets, instruction chips
onPrimary#FFFFFFtext and 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

More: THEMING.md.

© 2026 iApp Technology Co., Ltd.TermsPrivacyStatussale@iapp.co.th