Document 3 / 4

Spécification KYC unifié v1

Document de référence pour les équipes produit, conformité et technique des SGI partenaires. Architecture, niveaux, API publique, portabilité inter-SGI et audit cryptographique.

1. Principes fondateurs

2. Les 3 niveaux

NiveauPièces exigéesTicket autoriséSLA 1re validation
KYC1 Pièce d'identité (CNI/passeport) + selfie liveness + accord RGPD/UEMOA < 100 000 FCFA (~150 €) < 24 h ouvrées
KYC2 KYC1 + justificatif de domicile (< 3 mois) + déclaration source des revenus + profil d'investissement (questionnaire AMF-UMOA) < 5 000 000 FCFA (~7 500 €) < 48 h ouvrées
KYC3 KYC2 + filtrage PEP + source détaillée des fonds + lettre de référence bancaire ou avis d'imposition Illimité / institutionnel < 5 jours ouvrés

3. Cycle de vie d'un KYC

  1. NEW — parcours initié côté investisseur, brouillon sauvegardé automatiquement.
  2. PENDING — soumis, en cours de validation (IA + revue humaine conditionnelle).
  3. REQUIRES_COMPLETION — document manquant ou non conforme, demande ciblée envoyée à l'investisseur.
  4. VALIDE — accepté, scellé cryptographiquement, utilisable. Valable 12 mois.
  5. REJECTED — rejeté après 3 tentatives ou fraude avérée. Investisseur notifié avec motif clair.
  6. EXPIRED — au-delà de 12 mois sans renouvellement.
  7. REVOKED — révoqué après incident (fraude post-validation, demande investisseur, ordre CREPMF).

4. Architecture technique

Composants

Flux de portabilité inter-SGI

1. Investisseur existant chez SGI A (KYC VALIDE) → s'inscrit chez SGI B
2. SGI B appelle : GET /v1/kyc/by-email/{email}
   → Inopay répond : { exists: true, level: "KYC2", validated_at: "...", ... }
3. SGI B initie : POST /v1/kyc/{id}/request-portability
   → Inopay envoie un SMS/email à l'investisseur :
     « SGI B souhaite accéder à votre KYC. Autorisez ? »
4. Investisseur clique → consent enregistré (journalisé, signé)
5. SGI B appelle : GET /v1/kyc/{id}
   → Inopay livre l'attestation signée + documents (URLs pré-signées 1 h)
6. SGI B vérifie la signature Ed25519 localement → accepté sans refaire les docs
7. Inopay facture 300 FCFA de réutilisation au SGI B

5. Endpoints API principaux

MéthodeEndpointDescription
POST/v1/kyc/sessionsCréer une session KYC pour un nouvel investisseur. Retourne une URL unique à envoyer à l'investisseur.
GET/v1/kyc/:idRécupérer l'état courant + attestation signée (si VALIDE).
GET/v1/kyc/by-email/:emailVérifier l'existence d'un KYC réutilisable (réponse minimale pour confidentialité).
POST/v1/kyc/:id/request-portabilityDemander l'accès à un KYC existant d'un autre SGI.
POST/v1/kyc/:id/complementDéclencher une demande de complément (document manquant, info à actualiser).
POST/v1/kyc/:id/revokeRévoquer le KYC (fraude, demande investisseur, ordre régulateur).
GET/v1/kyc/:id/audit-trailConsulter l'historique complet, signé, pour audit CREPMF.
POST/v1/kyc/verify-attestationVérifier hors-ligne une attestation Ed25519 sans appel réseau (optionnel).

6. Événements webhook

7. Sécurité & conformité

8. Engagements de qualité

IndicateurCible
Taux de validation automatique (sans revue humaine)≥ 75 % des KYC1, ≥ 50 % des KYC2
Taux de faux positifs (KYC valide rejeté)< 2 %
Taux de faux négatifs (KYC frauduleux validé)< 0,1 % (cible : 0)
Disponibilité API99,5 % mensuelle
Temps de réponse médian API< 300 ms

9. Interopérabilité

L'API Inopay suit la spécification OpenAPI 3.1, documentée et versionnée. Les SGI peuvent générer des clients dans leur langage (Node, Python, Java, Go, PHP).

La spec est exportable au format PAS-CIMA si la CIMA publie un standard régional KYC (travail en cours avec le Conseil Régional).

Version v1 — gelée au 22/04/2026. Évolutions v1.x rétro-compatibles. Évolutions majeures (v2) avec 180 jours de préavis + support v1 pendant 12 mois au-delà de la sortie de la v2.