Developer velocity

Ship AI ID extraction inside your app.

Drop OMGlens into Flutter, iOS, Android, React Native, or PhoneGap—the same scan meter and structured fields land in your product. We license and meter scans; we do not host a backend copy of your guests’ data.

  • Flutter Available
  • iOS Available
  • Android Available
  • React Native Available
  • PhoneGap Available
Data Encryption
Your camera
Align ID in frame Hold steady… Captured
photoBytes → SDK
OMGlens SDK
AI
prepextractnormalize
scan()
Your app UI
Guest check-in LocalSealed
Elena Vasquez E•••a V•••••z Somchai Prasert S•••••i P•••••t Mai Nguyen M•i N••••n
EN + original scriptPartial mask
Name (EN) Elena Vasquez E•••a V•••••z
Original Elena Vásquez E•••a V•••••z
Document Passport
Nationality Spain
Date of birth 18 Apr 1992 1992
Confidence
94%
Save guest Your API
fullName.en documentType nationality confidence fullName.original dateOfBirth

Integrate in days, not quarters

main.dart

1 import 'package:omg_lens_sdk/omg_lens.dart';
2  
3 final sdk = await OmgLens.initialize(
4 licenseKey: 'OMGL-XXXXX-XXXXX-XXXXX-XXXXX',
5 appBundleId: 'com.example.myapp',
6 );
7 final scan = await sdk.scan(
8 photoBytes,
9 // noteLanguage: Explain add-on, a short note in the phone's language.
10 options: const ScanOptions(detectFace: true, noteLanguage: 'hi'),
11 );
12  
13 // Public view. Strict leaves the name null until unmask.
14 print(scan.data.firstName?.english);
15 print(scan.usage?.remaining);
16 print(scan.note?.text); // null without Explain
17 print(scan.note?.originality?.label); // e.g. "Check manually"
18  
19 if (scan.vault != null) {
20 final full = await sdk.unmask(scan);
21 print(full.documentNumber);
22 print(full.firstName?.english);
23 }
24 sdk.dispose();

Same order on every stack: initialize, scan, then unmask when the result has a vault. Licence tokens stay in Keystore or Keychain. A scan that times out is not billed twice. Watch a scan seal and open.

SDKs for your mobile stack

Pick the package that matches how you ship—one organization license works across app IDs you register.

  • Flutter Available

    Dart package for iOS & Android from one codebase.

  • iOS Available

    Native Swift package. Keychain-backed licence, HTTPS in release.

  • Android Available

    Native Kotlin library. Keystore-backed licence, HTTPS in release.

  • React Native Available

    Bridge over the native Android and iOS SDKs.

  • PhoneGap Available

    Cordova / PhoneGap plugin over the native SDKs.

Flutter, iOS, Android, React Native, and PhoneGap all ship the same initialize / scan / dispose contract, license, meter, and extraction quality.

Developer-grade

Embed futuristic ID intelligence

On-device prep, encrypted transport, and OCR-compatible schemas—quota surfaced in your UI.

  • Embed

    Drop-in intelligence

    Initialize once with your license—return structured identity fields inside your mobile product.

  • Edge preprocessing

    Rotate, compress, and strip noise on device before the AI pass—lighter payloads, sharper signal.

  • Quota in your UI

    Surface remaining scans after init and each success—transparent to your end customers.

  • Usage summary

    usageSummary() for your home screen

    One call returns the account’s real figures for today, 7 or 30 days in the user’s time zone: scans, billed pages, failures by reason, scans to review, re-reads, scans queued on the phone and the plan left. Counts only, cached for offline, on all five SDKs; markReviewed() keeps the review count honest.

  • OCR-compatible

    Same schema as the app

    Flutter, native, React Native, or PhoneGap—one extraction shape, including english/original name pairs for OCR and validation pipelines.

  • Data Encryption

    scan(), then unmask()

    The public result is safe to show. unmask() opens the envelope on that phone — Flutter, iOS, Android, React Native, and PhoneGap.

  • Explain

    scan.note in any language

    Pass noteLanguage and the same scan returns a short, plain-language note with expiry warnings and an originality check. No second call, no extra wait, and it never repeats the guest’s details.

  • Offline

    scanOrQueue() when the signal drops

    With the free Offline add-on, a scan taken without internet waits on the phone, encrypted, and is read by the same server AI when the connection is back. Results arrive through the queue; nothing is lost.

  • Plan feature

    scanBatch() and scanPages()

    Read a stack of documents three at a time, each its own result, queued offline or with a clear error. scanPages() reads up to 10 pages as one document in a single call, billed per page, and readPageMarker() tells on the phone which capture is the next page.

  • Document types

    documentType: "auto"

    One scan call for every document type. scan.document says what was read; scan.fields holds its fields, and documentTypes() tells your app how to draw each one, so new types need no app update.

  • Document types

    document.back and scanBack()

    The same call that reads the front says whether this document needs its back, with a reason to show. scanBack(photo, front) reads it as the same document; front and back are billed as one scan.

  • On-device ML

    PrecheckException before upload

    Apple Vision on iOS and Google ML Kit on Android check each photo on the phone: payment cards, selfies and non-documents are stopped before upload, so no AI call is spent. canScanAnyway tells your UI when to offer Scan anyway.

Mobile app

Kick the tires in our app

Same AI core as the SDK—download for trial, scan a few IDs, then plug your license into Flutter, Android, iOS, React Native, or PhoneGap.

App Store & Google Play listings are on the way. Tap below and we’ll send your trial build link (TestFlight or Android APK).