API v4.1 Tester l'API →
Introduction

API MIA KAPITAL

Infrastructure de scoring financier certifiée SYSCOHADA. Analysez la solvabilité de vos MPME en moins de 60 secondes — conforme aux normes BCEAO, COBAC et aux Actes Uniformes OHADA.

🏦 Institutions financières

Intégrez directement dans votre core banking via l'API REST. Licences annuelles avec SLA garanti.

📊 MPME

Plans mensuels avec quota d'analyses. Résultats avec certificat PKI signé MIA VERIFIED™.

🔒 Sécurité

JWT HS256 + rotation des refresh tokens. Rate limiting Redis par IP. Audit trail complet.

⚡ Performance

Latence médiane < 400ms. Uptime SLA 99.9%. Réponses compressées Brotli/Gzip.

Démarrage rapide

En 3 étapes

De zéro à votre première analyse SYSCOHADA en moins de 5 minutes.

1 — Créer un compte

cURL
POST https://api.miakapital.com/api/auth/register

{
  "email":       "vous@entreprise.com",
  "password":    "MotDePasse1Securise",
  "fullName":    "Kofi Mensah",
  "companyName": "SARL Mensah & Co",
  "country":     "Bénin",
  "sector":      "commerce"
}

2 — Récupérer votre token d'accès

Réponse JSON
{
  "success":      true,
  "data": {
    "accessToken":  "eyJhbGciOiJIUzI1NiIsInR5...",  // Valide 15 minutes
    "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5...",  // Valide 7 jours
    "user": {
      "id":    "usr_01HXYZ...",
      "email": "vous@entreprise.com"
    }
  }
}

3 — Lancer votre première analyse

cURL JavaScript Python
POST https://api.miakapital.com/api/score
Authorization: Bearer <accessToken>

{
  "companyName":      "SARL Mensah & Co",
  "country":          "Bénin",
  "sector":           "commerce",
  "fiscalYear":       2024,
  "revenue":          85000000,
  "netIncome":        6970000,
  "totalAssets":      120000000,
  "totalLiabilities": 46000000,
  "cash":             15000000,
  "cogs":             61200000
}
Configuration

URLs de base

EnvironnementURLUsage
Production https://api.miakapital.com Données réelles, facturation active
Sandbox https://sandbox.miakapital.com Tests et intégration, aucune facturation
Sandbox obligatoire pour les tests. N'utilisez jamais des données de clients réels en sandbox. Les scores générés en sandbox ne produisent pas de certificats PKI valides.
Authentification

Inscription

POST /api/auth/register Crée un compte et retourne les tokens

Corps de la requête

ChampTypeRequisDescription
emailstringrequisAdresse email unique
passwordstringrequisMin 8 caractères, 1 majuscule, 1 chiffre
fullNamestringrequisPrénom et nom complets
companyNamestringrequisRaison sociale
countrystringrequisPays OHADA (ex: "Bénin")
sectorstringoptionnelSecteur d'activité
phonestringoptionnelNuméro de téléphone
201 Créé 409 Email déjà utilisé 422 Validation échouée

Connexion

POST /api/auth/login Retourne accessToken + refreshToken

L'accessToken expire après 15 minutes. Utilisez le refreshToken (valide 7 jours) pour en obtenir un nouveau sans demander à l'utilisateur de se reconnecter.

Protection anti-timing. Le temps de réponse est identique que l'email existe ou non — protection contre l'énumération de comptes. Après 5 échecs consécutifs, le compte est verrouillé temporairement.
ChampTypeRequis
emailstringrequis
passwordstringrequis
200 OK 401 Identifiants incorrects 403 Compte verrouillé

Rotation du refresh token

POST /api/auth/refresh Échange un refresh token contre un nouveau pair

À chaque appel, l'ancien refresh token est blacklisté dans Redis et un nouveau pair (access + refresh) est émis. Implémentez ce mécanisme côté client pour maintenir les sessions sans re-authentification.

JSON
// Requête
{ "refreshToken": "eyJhbGci..." }

// Réponse 200
{
  "accessToken":  "eyJhbGci...",
  "refreshToken": "eyJhbGci..."  // Nouveau token — invalide l'ancien
}

Profil utilisateur

GET /api/auth/me Retourne le profil authentifié

Requiert le header Authorization: Bearer <accessToken>.

200 OK 401 Token manquant ou expiré
Scoring SYSCOHADA

Lancer une analyse

POST /api/score Analyse financière + certificat PKI

Produit un score sur 100 points, une note A+→D, les ratios détaillés calibrés sur les benchmarks sectoriels OHADA, et un certificat PKI MIA VERIFIED™ signé cryptographiquement (plans Pro et supérieurs).

Corps de la requête

ChampTypeRequisDescription
companyNamestringrequisRaison sociale de l'entreprise
countrystringrequisPays OHADA
sectorstringrequisSecteur d'activité
fiscalYearnumberrequisExercice fiscal (ex: 2024)
revenuenumberrequisChiffre d'affaires en FCFA
netIncomenumberrequisRésultat net en FCFA
totalAssetsnumberrequisTotal bilan actif en FCFA
totalLiabilitiesnumberrequisTotal dettes en FCFA
cashnumberrequisTrésorerie disponible en FCFA
cogsnumberrequisCoût des marchandises vendues en FCFA
legalFormstringoptionnelSARL · SA · SAS · EI · GIE
externalIdstringoptionnelIdentifiant interne pour corrélation
201 Créé 400 Données invalides 403 Quota dépassé 401 Non authentifié

Structure de réponse

JSON — Réponse 201
{
  "success": true,
  "data": {
    "id":           "ana_01JXYZ...",
    "rawScore":     68.42,      // Score sur 100
    "grade":        "A",         // A+ | A | B+ | B | C | D
    "gradeLabel":   "Très bon — Risque faible",
    "zone":         "UEMOA",      // UEMOA | CEMAC | OHADA_OUT
    "ratios": {
      "netMargin":    0.082,    // Marge nette (pondération 25%)
      "grossMargin":  0.280,    // Marge brute (15%)
      "debtRatio":    0.383,    // Ratio d'endettement (20%)
      "currentRatio": 1.65,     // Liquidité courante (20%)
      "roa":          0.058,    // Rentabilité des actifs (10%)
      "workingCapital":28970000  // Fonds de roulement en FCFA (10%)
    },
    "certificate": {
      "id":        "CERT-BJ-2024-0087",
      "status":    "VALID",
      "verifyUrl": "https://verify.miakapital.com/ana_01JXYZ...",
      "pdfUrl":    "https://api.miakapital.com/api/score/ana_01JXYZ.../pdf"
    },
    "createdAt":    "2024-11-15T09:42:31.000Z"
  }
}

Grille de notation

NoteScoreInterprétationDécision crédit recommandée
A+85 – 100Excellent — Risque très faibleApprobation directe
A70 – 84Très bon — Risque faibleApprobation avec garanties standard
B+58 – 69Bon — Risque modéré faibleApprobation avec conditions
B45 – 57Acceptable — Risque modéréAnalyse approfondie requise
C30 – 44Fragile — Risque élevéRefus ou garanties renforcées
D0 – 29Critique — Risque très élevéRefus recommandé
Webhooks

Configuration

Recevez des notifications HTTP en temps réel sur votre endpoint dès qu'une analyse est complétée ou qu'un certificat change de statut. Disponible sur les plans institutionnels.

POST /api/webhooks/register Enregistre ou met à jour un endpoint
JSON — Corps
{
  "url":    "https://votre-systeme.com/hooks/mia",
  "events": ["score.completed", "certificate.issued"],
  "secret": "votre_secret_hmac_sha256"  // Pour vérifier la signature
}

Vérification de signature

Chaque requête webhook inclut le header X-MIA-Signature contenant un HMAC-SHA256 du corps calculé avec votre secret. Vérifiez-le avant de traiter l'événement.

JavaScript — Vérification
import crypto from 'crypto';

function verifyWebhook(body, signature, secret) {
  const expected = 'sha256=' +
    crypto.createHmac('sha256', secret)
           .update(body)
           .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(signature)
  );
}

Événements disponibles

ÉvénementDescription
score.completedAnalyse financière terminée, score disponible
certificate.issuedCertificat PKI MIA VERIFIED™ généré et signé
certificate.revokedCertificat révoqué suite à mise à jour
quota.thresholdQuota mensuel atteint à 80% ou 100%
subscription.renewedAbonnement renouvelé avec succès
Référence

Zone OHADA — 17 pays

MIA KAPITAL couvre l'intégralité des États membres de l'OHADA. Les benchmarks sectoriels sont calibrés par zone monétaire.

Zone UEMOA — Franc CFA BCEAO (XOF)

🇧🇯
Bénin
BJ · UEMOA
🇧🇫
Burkina Faso
BF · UEMOA
🇨🇮
Côte d'Ivoire
CI · UEMOA
🇬🇼
Guinée-Bissau
GW · UEMOA
🇲🇱
Mali
ML · UEMOA
🇳🇪
Niger
NE · UEMOA
🇸🇳
Sénégal
SN · UEMOA
🇹🇬
Togo
TG · UEMOA

Zone CEMAC — Franc CFA BEAC (XAF)

🇨🇲
Cameroun
CM · CEMAC
🇨🇫
Centrafrique
CF · CEMAC
🇹🇩
Tchad
TD · CEMAC
🇨🇬
Congo
CG · CEMAC
🇬🇦
Gabon
GA · CEMAC
🇬🇶
Guinée Équatoriale
GQ · CEMAC

Autres États membres OHADA

🇰🇲
Comores
KM
🇨🇩
R.D. Congo
CD
🇬🇳
Guinée
GN

Secteurs d'activité

Utilisez les valeurs exactes ci-dessous dans le champ sector. Les benchmarks financiers sont calibrés par secteur et par zone OHADA.

Valeur APILibellé
commerceCommerce et distribution
agricultureAgriculture, élevage, pêche
industrieIndustrie manufacturière
servicesServices aux entreprises
constructionBTP et génie civil
transportTransport et logistique
numeriqueTechnologies et numérique
santeSanté et pharmacie
energieÉnergie et mines
immobilierImmobilier et foncier
tourismeTourisme et hôtellerie
Si votre secteur ne figure pas dans la liste, omettez le champ ou utilisez services. MIA KAPITAL appliquera les benchmarks du secteur default.
Rate Limiting

Limites de débit

Tous les limiteurs sont Redis-backed et multi-instances. Les headers standards RateLimit-Remaining, RateLimit-Reset sont retournés sur chaque réponse.

Global100 req / 15 min
Appliqué à toutes les routes. Clé par adresse IP.
Authentification10 tentatives / 15 min
Routes /api/auth/login et /api/auth/register. Les requêtes réussies ne sont pas comptabilisées.
Analyses20 analyses / heure
Route /api/score. Indépendant du quota mensuel du plan.
Vérification certificats30 req / 15 min
Route /verify/:token. Clé par IP + User-Agent pour détecter les scans automatisés.
Un dépassement retourne HTTP 429 avec un header Retry-After indiquant le délai d'attente en secondes. Implémentez un backoff exponentiel dans votre client.

Codes d'erreur

Toutes les réponses d'erreur suivent le même format : {"success": false, "message": "..."}. Le champ message est en français, adapté à l'affichage direct.
Code HTTPSignificationCauses fréquentes
400Requête invalideChamps manquants, type incorrect
401Non authentifiéToken absent, expiré ou révoqué
403Accès refuséCompte verrouillé, quota dépassé, plan insuffisant
404Ressource introuvableID analyse ou certificat inexistant
409ConflitEmail déjà utilisé à l'inscription
422Validation échouéeValeurs hors plage, secteur inconnu
429Trop de requêtesRate limit dépassé — voir header Retry-After
500Erreur serveurContacter support@miakapital.com