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
- Portabilité : un KYC validé dans une SGI peut, avec consentement de l'investisseur, être réutilisé par toute autre SGI partenaire sans refaire les documents.
- Preuve cryptographique : chaque artefact validé est scellé par une signature Ed25519 Inopay + horodatage qualifié. Le SGI consommateur vérifie l'authenticité sans dépendre d'Inopay.
- Audit trail inaltérable : toutes les actions (soumission, validation, consultation, retrait de consentement) sont journalisées en log append-only, consultables 5 ans.
- Non-custodial de données : Inopay est sous-traitant au sens de la LOI UEMOA. Les données restent la propriété du SGI et de l'investisseur.
- Niveaux standardisés : 3 niveaux (KYC1/2/3) alignés sur la grille CREPMF anticipée et les meilleures pratiques CIMA.
2. Les 3 niveaux
| Niveau | Pièces exigées | Ticket 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
NEW— parcours initié côté investisseur, brouillon sauvegardé automatiquement.PENDING— soumis, en cours de validation (IA + revue humaine conditionnelle).REQUIRES_COMPLETION— document manquant ou non conforme, demande ciblée envoyée à l'investisseur.VALIDE— accepté, scellé cryptographiquement, utilisable. Valable 12 mois.REJECTED— rejeté après 3 tentatives ou fraude avérée. Investisseur notifié avec motif clair.EXPIRED— au-delà de 12 mois sans renouvellement.REVOKED— révoqué après incident (fraude post-validation, demande investisseur, ordre CREPMF).
4. Architecture technique
Composants
- API REST (
api.getinopay.com/v1/kyc/*) — authentification par clés SGI (inopay_live_*/inopay_test_*), signatures HMAC-SHA256 sur corps des requêtes sensibles. - Pipeline de validation — magic bytes MIME → OCR → vision multimodale (modèle primary : Gemini ; fallback : DeepSeek) → scoring anti-fraude → file de revue humaine conditionnelle.
- Stockage documents — MinIO S3-compatible, chiffrement AES-256-GCM au repos, rotation des clés tous les 90 jours.
- Registre signé — table
kyc_attestationsappend-only, chaque validation produit une attestation Ed25519 avec hash SHA-256 des documents. - Webhooks signés — événements temps réel poussés vers les SGI, signature HMAC-SHA256 dans l'en-tête
X-Inopay-Signature.
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éthode | Endpoint | Description |
|---|---|---|
| POST | /v1/kyc/sessions | Créer une session KYC pour un nouvel investisseur. Retourne une URL unique à envoyer à l'investisseur. |
| GET | /v1/kyc/:id | Récupérer l'état courant + attestation signée (si VALIDE). |
| GET | /v1/kyc/by-email/:email | Vérifier l'existence d'un KYC réutilisable (réponse minimale pour confidentialité). |
| POST | /v1/kyc/:id/request-portability | Demander l'accès à un KYC existant d'un autre SGI. |
| POST | /v1/kyc/:id/complement | Déclencher une demande de complément (document manquant, info à actualiser). |
| POST | /v1/kyc/:id/revoke | Révoquer le KYC (fraude, demande investisseur, ordre régulateur). |
| GET | /v1/kyc/:id/audit-trail | Consulter l'historique complet, signé, pour audit CREPMF. |
| POST | /v1/kyc/verify-attestation | Vérifier hors-ligne une attestation Ed25519 sans appel réseau (optionnel). |
6. Événements webhook
kyc.submitted— nouvelle soumission reçuekyc.validated— validation effective, attestation généréekyc.rejected— rejet avec motifkyc.requires_completion— complément demandé à l'investisseurkyc.portability_requested— un autre SGI demande l'accèskyc.portability_consented— investisseur a accordé l'accèskyc.revoked— révocation effectuéekyc.expired— expiration sans renouvellement
7. Sécurité & conformité
- Chiffrement en transit : TLS 1.3 exclusivement
- Chiffrement au repos : AES-256-GCM, clés gérées HashiCorp Vault (roadmap T2 2026)
- Authentification API SGI : clés distinctes test/prod, rotation possible à la demande
- Rate limiting : 1 000 req/min par clé SGI, 100 KYC/jour/SGI par défaut (ajustable)
- Anti-fraude : détection document modifié (EXIF + hash perceptuel), selfie liveness, bloqueurs VPN détectés
- RGPD / LOI UEMOA : droit d'accès, rectification, effacement (après délais légaux), portabilité
- CREPMF : dépôt d'une demande d'agrément PSP-KYC à échéance 18 mois
- ISO 27001 : certification visée T4 2026
8. Engagements de qualité
| Indicateur | Cible |
|---|---|
| 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é API | 99,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.