> ## Documentation Index
> Fetch the complete documentation index at: https://docs.idmetagroup.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Mobile SDK

> Embed IDmeta Trust Flows in Android and iOS apps with the Flutter plugin.

A [Trust Flow](https://docs.idmetagroup.com/trust-flows/creating-a-trust-flow.md) is the sequence of checks you configure in the IDmeta Dashboard — for example document capture, biometrics, or government data. The Mobile SDK runs that same sequence inside your own app, on the applicant's device.

The SDK is the Flutter plugin [`idmeta_flutter`](https://pub.dev/packages/idmeta_flutter). Your app calls `IdmetaFlutter.startVerification`. The plugin opens the verification UI, captures what the Trust Flow asks for, and sends it to IDmeta. Your app does not receive the outcome as a return value from that call. Read results in the Dashboard, through [webhooks](https://docs.idmetagroup.com/developer-tools/webhooks), or with the [Trust Validation Result](https://docs.idmetagroup.com/api-reference/processes/trust-validation-result/overview.md) API.

These pages assume a Flutter host app. Native Android or iOS apps can wrap the plugin through Flutter add-to-app, but that path is not covered here.

If you need a ready-made Android app and do not want to embed the SDK, use the [Kiosk App](https://docs.idmetagroup.com/developer-tools/kiosk-app.md) instead.

## How it works

1. You create a Trust Flow in the Dashboard. That flow is the source of truth for which checks run.
2. Your app launches the flow with `IdmetaFlutter.startVerification`, passing the Trust Flow ID and your account credentials.
3. The SDK presents its own UI on top of your app and walks the applicant through those checks.
4. The SDK calls the IDmeta API. The device must stay online for the whole session.
5. When the applicant finishes, the case appears in the Dashboard. If the Trust Flow has a [verification webhook](https://docs.idmetagroup.com/developer-tools/adding-webhooks-to-trust-flow.md), IDmeta also posts the outcome to your endpoint, including any `metadata` you passed at start.

## What it is built on

* A Flutter plugin for Android and iOS
* On-device document and biometric capture
* The same Trust Flows as Direct Link and the API

## What you need

The SDK authenticates as an IDmeta user and runs one Trust Flow. Collect these three values before you call `startVerification`.

| Value | Where to get it | What it is for |
| - | - | - |
| Trust Flow ID | The Trust Flow in the Dashboard | Selects which checks the SDK runs |
| User API token | **Profile > API Tokens**. See [App tokens](https://docs.idmetagroup.com/developer-tools/app-tokens.md). | Authenticates the SDK to IDmeta |
| Client ID | **Profile > API Tokens** on the same profile page | Identifies your account |

Use them from a Flutter app that meets the [requirements](#requirements) below.

## Requirements

| Item | Requirement |
| - | - |
| Flutter | 3.44.1 or later |
| Dart | 3.12.1 or later (bundled with Flutter 3.44.1+) |
| Android | API 24 (Android 7.0) or later, compileSdk 37, Java 17 |
| Build machine | macOS or Windows. `flutter pub get` currently fails on Linux, including Linux CI runners. |
| iOS | iOS 16.0 or later |
| Network | Required during verification |

These are the requirements for the latest version. For what changed in each release, see the [Changelog](https://docs.idmetagroup.com/developer-tools/mobile-sdk-changelog.md).

## Install

Add the plugin to your Flutter app:

```bash theme={null}
flutter pub add idmeta_flutter
```

## Start a verification

Call this from a Flutter widget that has a valid `BuildContext` — for example a button in your onboarding screen. The SDK pushes its UI onto the navigation stack.

```dart theme={null}
import 'package:idmeta_flutter/idmeta_flutter.dart';

IdmetaFlutter.startVerification(
  context: context,
  userToken: '<USER_API_TOKEN>',
  trustFlowId: 123,
  clientId: '<CLIENT_ID>',
  metadata: {
    'referenceId': '1001',
  },
);
```

| Parameter | Required | Meaning |
| - | - | - |
| `context` | Yes | `BuildContext` used to open the flow UI |
| `userToken` | Yes | User API token from **Profile > API Tokens** |
| `trustFlowId` | Yes | Trust Flow ID from the Dashboard |
| `clientId` | Yes | Client ID from **Profile > API Tokens** |
| `metadata` | No | Key/value map returned on webhooks, for your own reference IDs |
| `stvid` | No | Previous Trust Validation ID, when a later flow must link to an earlier session |
| `baseUrl` | No | API host override. Defaults to `https://integrate.idmetagroup.com/api` |
| `licenseKeys` | No | Capture licences issued for your app ID. See [Your own capture licences](#your-own-capture-licences). |

### Your own capture licences

Document capture licences are tied to an app ID. By default the SDK loads them from IDmeta for your Client ID. If the licences on your IDmeta account were issued for a different app ID, pass licences issued for your app:

```dart theme={null}
IdmetaFlutter.startVerification(
  // ...
  licenseKeys: const IdmetaLicenseKeys(
    documentVerification: '<DOCUMENT_VERIFICATION_LICENSE>',
    documentVerificationV2: '<DOCUMENT_VERIFICATION_V2_LICENSE>',
  ),
);
```

Every key is optional. Any key you leave out is still loaded from IDmeta.

## Platform setup

The plugin will not build or capture on a device until the native projects are configured. Do this after you add the package, then come back and call `startVerification`.

> [card] [Android setup](https://docs.idmetagroup.com/developer-tools/android-setup.md)
>
> Gradle settings, minSdk, and permissions.

> [card] [iOS setup](https://docs.idmetagroup.com/developer-tools/ios-setup.md)
>
> Podfile, iOS 16, and Info.plist usage strings.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.