Documentation

De zéro au premier scan en une heure.

Intégrez la vérification d'identité dans votre application Flutter existante — Android et iOS. Aucun code natif à écrire, aucun dépôt Maven à ajouter.

cortixia_kyc_sdk v0.4.0

1 Installation

Le SDK s'installe comme dépendance git. Prérequis :

  • Android — minSdkVersion 26, appareil équipé du NFC ; permissions INTERNET, CAMERA et NFC
  • iOS — Xcode 15+, iPhone réel, compte développeur Apple payant (exigé par le NFC — voir la section iOS)
  • Aucun code natif à intégrer, aucun dépôt Maven supplémentaire
  • Build de release Android : ajoutez les règles ProGuard ci-dessous (ML Kit)
  • Communication en HTTPS uniquement
pubspec.yaml
dependencies:
  cortixia_kyc_sdk:
    git:
      url: https://git.cortixia.io/mohamed.zidoun/cortixia-kyc-flutter-sdk.git
      ref: v0.4.0

Configuration iOS

Les parcours carte d'identité et passeport fonctionnent sur iOS à partir du SDK v0.4.0. Le NFC exige un compte développeur Apple payant (les équipes personnelles gratuites n'y ont pas droit). Trois réglages dans votre dossier ios/ :

ios/Runner/Info.plist
<key>NSCameraUsageDescription</key>
<string>La caméra est utilisée pour scanner votre document et vérifier votre identité.</string>
<key>NFCReaderUsageDescription</key>
<string>Le lecteur NFC lit la puce de votre document d'identité.</string>
<key>com.apple.developer.nfc.readersession.iso7816.select-identifiers</key>
<array>
  <string>A0000002471001</string>
</array>
Xcode — Signing & Capabilities
+ Capability → Near Field Communication Tag Reading
(crée Runner.entitlements avec
 com.apple.developer.nfc.readersession.formats = [TAG])
ios/Podfile
platform :ios, '15.5'   # requis par google_mlkit_*
  • iOS affiche sa propre feuille système « Ready to Scan » pendant la lecture NFC.
  • L'antenne NFC de l'iPhone est sur le bord supérieur du dos — tenez-y le document (contrairement à Android, où elle est au centre).
  • Le parcours permis de conduire reste Android uniquement.

Build de release Android

Le SDK utilise ML Kit pour la lecture MRZ. En build de release, R8 échoue tant que les recognizers de langue optionnels (chinois, devanagari, japonais, coréen) ne sont pas ignorés. Ajoutez ces règles à android/app/proguard-rules.pro et référencez le fichier dans votre bloc release.

android/app/proguard-rules.pro
-dontwarn com.google.mlkit.vision.text.chinese.ChineseTextRecognizerOptions$Builder
-dontwarn com.google.mlkit.vision.text.chinese.ChineseTextRecognizerOptions
-dontwarn com.google.mlkit.vision.text.devanagari.DevanagariTextRecognizerOptions$Builder
-dontwarn com.google.mlkit.vision.text.devanagari.DevanagariTextRecognizerOptions
-dontwarn com.google.mlkit.vision.text.japanese.JapaneseTextRecognizerOptions$Builder
-dontwarn com.google.mlkit.vision.text.japanese.JapaneseTextRecognizerOptions
-dontwarn com.google.mlkit.vision.text.korean.KoreanTextRecognizerOptions$Builder
-dontwarn com.google.mlkit.vision.text.korean.KoreanTextRecognizerOptions
android/app/build.gradle.kts — android { buildTypes { release { … } } }
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
    getDefaultProguardFile("proguard-android-optimize.txt"),
    "proguard-rules.pro"
)

2 Votre jeton API

Le jeton (format ck_live_…) est créé avec votre compte et visible sur votre tableau de bord. Il identifie votre entreprise, porte vos packs et votre quota. Créer un compte — 50 crédits d'essai, sans carte bancaire.

main.dart
import 'package:cortixia_kyc_sdk/cortixia_kyc_sdk.dart';

await CortixiaKyc.initialize(
  CortixiaKycConfig(apiToken: 'ck_live_VOTRE_JETON'),
);

Côté REST, le même jeton s'envoie en en-tête X-API-Key ou Authorization: Bearer.

3 Premier scan

Un appel ouvre le parcours complet : caméra → MRZ → lecture NFC → liveness. Le SDK gère les écrans, vous recevez le résultat.

scan.dart
final result = await CortixiaKyc.scanIdCard(context);
// aussi : scanPassport(context) · scanDrivingLicence(context)

if (result.status == KycStatus.success) {
  final data = result.document!;    // identité décodée
  print(data.personal['firstName']);
  print(data.personal['nin']);
  final photo = data.biometric['faceImage']; // JPEG base64
  final liveness = result.liveness; // null si l'étape a été ignorée
}

Les documents pris en charge : Carte d'identité biométrique · Passeport · Permis de conduire.

À la carte

Points d'entrée modulaires

Chaque capacité s'appelle aussi seule — utile quand votre système possède déjà une partie du parcours.

scanMrz — lire la MRZ sans toucher la puce

final mrz = await CortixiaKyc.scanMrz(context, KycDocumentType.idCard);
if (mrz != null) {
  print(mrz.documentNumber);   // clés nécessaires à la lecture NFC
  print(mrz.birthDateMrz);     // AAMMJJ brut
  print(mrz.expiryDateMrz);
}

readChip — lire la puce avec des clés que vous avez déjà

// À partir d'une MRZ déjà lue…
final data = await CortixiaKyc.readChip(context, KycDocumentType.idCard, mrz: mrz);

// …ou à partir de clés que vous possédez déjà
final data2 = await CortixiaKyc.readChip(
  context, KycDocumentType.passport,
  documentNumber: '123456789', birthDate: '950312', expiryDate: '360422',
);

checkLiveness — vérification de présence seule

// Contre une photo de référence que vous fournissez
final liveness = await CortixiaKyc.checkLiveness(
  context, referenceFace: mesOctetsJpeg,
);
if (liveness != null && liveness.passed) {
  // isMatch == true et isSpoof == false
}

scanMrz nécessite le pack MRZ, readChip le pack NFC, checkLiveness le pack Liveness — le serveur reste seul juge des droits.

Référence

Endpoints REST

Ce que le SDK appelle pour vous — utilisables aussi directement.

Endpoint Rôle Facturation
POST /api/sdk/v1/init Valide votre jeton et renvoie votre plan, votre quota et vos packs actifs. Non facturé
POST /api/sdk/v1/mrz Valide et décode les lignes MRZ lues par la caméra. 1 crédit
POST /api/sdk/v1/decode Décode les groupes de données lus sur la puce du document. 1 crédit
POST /api/sdk/v1/liveness Compare une vidéo selfie à une photo de référence. 1 crédit
POST /api/sdk/v1/events Télémétrie du SDK (début et fin de scan). Non facturé
curl
curl -X POST https://www.e-kyc.online/api/sdk/v1/init \
  -H "X-API-Key: ck_live_VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{"sdk_version": "0.4.0", "platform": "android"}'

Erreurs

Codes d'erreur

Chaque refus porte un code stable et un message en clair.

HTTP Code Signification
401 invalid_token Jeton absent, inconnu ou révoqué.
402 quota_exceeded Crédits épuisés pour la période en cours.
402 no_active_subscription Aucun abonnement actif sur le compte.
402 pack_not_entitled Le pack requis n'est pas activé sur le compte.
400 invalid_datagroups Les données envoyées ne sont pas exploitables.
502 liveness_unavailable Le service de liveness est momentanément indisponible.

Une fois connecté, tous ces extraits sont pré-remplis avec votre jeton réel. Documentation personnalisée →

Prêt à scanner ?

Créez votre compte, copiez votre jeton, lancez votre premier scan. 50 crédits offerts.