> ## Documentation Index
> Fetch the complete documentation index at: https://jdev-e8db0569.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# startVerification()

> Start the SEON verification flow and get the result.

Starts the SEON verification flow. The SDK must be initialized with [`initialize()`](/api-reference/initialize) before calling this method.

## Signature

```dart theme={null}
// On SeonOrchestration
static Future<SeonVerificationResult> startVerification()
```

## Parameters

None.

## Returns

`Future<SeonVerificationResult>` — Resolves with the verification result.

See [SeonVerificationResult](/api-reference/types#seonverificationresult) for the result structure and [SeonVerificationStatus](/api-reference/enums#seonverificationstatus) for all possible status values.

## Errors

Throws `SeonException` on failure.

| Error Code                              | Raw String                   | Description                                                    |
| --------------------------------------- | ---------------------------- | -------------------------------------------------------------- |
| `SeonErrorCode.eNotInitialized`         | `E_NOT_INITIALIZED`          | `initialize()` has not been called yet                         |
| `SeonErrorCode.eNoActivity`             | `E_NO_ACTIVITY`              | (Android only) No activity is available to launch verification |
| `SeonErrorCode.eVerificationFailed`     | `E_VERIFICATION_FAILED`      | The verification process failed unexpectedly                   |
| `SeonErrorCode.eVerificationInProgress` | `E_VERIFICATION_IN_PROGRESS` | A verification is already in progress                          |

## Example

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

try {
  final result = await SeonOrchestration.startVerification();

  switch (result.status) {
    case SeonVerificationStatus.completedSuccess:
      print('Verification passed!');
      break;
    case SeonVerificationStatus.completedPending:
      print('Verification pending review');
      break;
    case SeonVerificationStatus.completedFailed:
      print('Verification failed');
      break;
    case SeonVerificationStatus.interruptedByUser:
      print('User cancelled');
      break;
    case SeonVerificationStatus.missingLocationPermission:
      print('Location permission required');
      break;
    case SeonVerificationStatus.error:
      print('Error: ${result.errorMessage}');
      break;
    default:
      break;
  }
} on SeonException catch (e) {
  print('Verification failed: $e');
}
```

## Handling Permission Denial

On Android, if the user denies location permission, the SDK returns `missingLocationPermission` instead of throwing an error:

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

final result = await SeonOrchestration.startVerification();

if (result.status == SeonVerificationStatus.missingLocationPermission) {
  showDialog(
    context: context,
    builder: (ctx) => AlertDialog(
      title: const Text('Permission Required'),
      content: const Text('Please enable location services in Settings'),
      actions: [
        TextButton(onPressed: () => Navigator.pop(ctx), child: const Text('Cancel')),
        TextButton(
          onPressed: () => openAppSettings(),
          child: const Text('Open Settings'),
        ),
      ],
    ),
  );
}
```

## Platform Behavior

<Tabs>
  <Tab title="iOS">
    * Presents the verification UI using a `UINavigationController`
    * If the root view controller is already a `UINavigationController`, it is used directly
    * Otherwise, a new navigation controller is created and presented modally
    * Delegate callbacks are bridged to the stored MethodChannel result
  </Tab>

  <Tab title="Android">
    * Launches a transparent proxy `Activity` (`SeonVerificationActivity`)
    * The proxy Activity registers an `ActivityResultLauncher` and starts the SEON flow
    * When complete, the Activity resolves the stored MethodChannel result and finishes itself
    * The transparent theme ensures users don't see the proxy Activity
  </Tab>
</Tabs>

<Warning>
  Only one verification can run at a time. Calling `startVerification()` while a verification is in progress will throw a `SeonException` with code `SeonErrorCode.eVerificationInProgress`.
</Warning>
