Documentation API
Référence complète de l'API Banking-as-a-Service de Chari Money. Intégrez des services financiers dans vos applications grâce à nos endpoints robustes et sécurisés.
Démarrage rapide
Version 1.8 · Dernière mise à jour 5 novembre 2025
Bienvenue dans la documentation officielle de l'API Banking-as-a-Service (BAAS) de Chari Money. Cette API REST permet aux fintechs, plateformes et développeurs d'intégrer une infrastructure financière complète dans leurs applications : ouverture de comptes avec vérification KYC, transactions wallet-à-wallet, dépôts par carte bancaire (3D Secure), virements bancaires via RIB, paiements marchands multi-canal (téléphone, QR Code, carte), gestion des bénéficiaires, agents retail et webhooks temps réel. Tous les endpoints suivent un modèle preview/execute avec confirmation asynchrone par webhook.
En-têtes d'authentification
Incluez les en-têtes suivants dans toutes vos requêtes API :
| Header | Type | Requis | Description |
|---|---|---|---|
Chari-Api-Key | string | Requis | Clé API pour l'authentification. Fournie par Chari pour chaque environnement. |
C-Request-Id | string | Optionnel | Identifiant unique par requête pour le traçage. Renvoyé dans la réponse. Format recommandé : UUID v4. Ex : 69906411-0aa24a89-ab2005ca-9d18dc15 |
Carte de test (Sandbox)
PAN
4918914107195005CVV
123Expiration
08/25 (ou toute date future)Code 3DS
555Pack LLM & IA
Pack complet optimisé pour les LLMs et assistants IA : documentation Markdown, JSON Schemas, diagrammes Mermaid, spécification OpenAPI 3.0, exemples cURL et règles de validation. Idéal pour RAG, code generation et intégration avec Cursor, Copilot ou Claude.
Postman Collection
Téléchargez la collection Postman complète pour tester tous les endpoints de l'API.
Journal des modifications
2025-11-05
Documentation initiale. Couverture complète de l'API v1.8.
2025-12-01
Ajout des endpoints register-with-docs, merchant-kyc-upload, add-tokenized-card. Tables de référence enrichies (docTypes, customerStatuses, accountLevels). Codes d'erreur détaillés avec mapping endpoint. Paramètre autoActivate sur confirm. Correction de la route confirm.
Inscription client
Gestion complète du cycle de vie client : vérification de statut, inscription, confirmation OTP, gestion du PIN, consultation du solde et des informations, et désinscription.
{host}/api/customers/statusVérifier le statut (Chari)
Récupère le statut d'inscription actuel d'un client auprès de Chari uniquement.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | query | Requis | Numéro de téléphone du client. Format : +212********* |
Notes
- •0 : Not exists — Le numéro n'existe pas chez ChariMoney.
- •1 : Not confirmed — Le numéro existe chez ChariMoney mais n'est pas encore enrôlé chez Switch (OTP non saisi).
- •2 : Confirmed — Le numéro existe et est enregistré auprès de Switch.
- •3 : Active — Enregistré auprès de Switch et actif chez ChariMoney (PIN créé).
- •4 : Locked temporary — Le numéro est temporairement bloqué (nombre de tentatives dépassé).
- •5 : Locked — Le numéro est bloqué.
{host}/api/customers/defaultVérifier le wallet par défaut
Vérifie si Chari est le wallet par défaut du client auprès de Switch.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | query | Requis | Numéro de téléphone du client. Format : +212********* |
Notes
- •true : Chari est le wallet par défaut du client.
- •false : Chari n'est PAS le wallet par défaut du client.
{host}/api/customers/register202Inscription
Lance le processus d'inscription d'un nouveau client. Un OTP sera envoyé par SMS pour confirmation.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | body | Requis | Numéro de téléphone du client. Format : +212********* |
FirstName | string | body | Requis | Prénom. Minimum 2 lettres (caractères latins uniquement). |
LastName | string | body | Requis | Nom de famille. Minimum 2 lettres (caractères latins uniquement). |
Cin | string | body | Requis | Numéro de carte d'identité. Minimum 5 caractères. |
WalletType | string | body | Requis | "P" : Particulier / "C" : Commerçant |
{host}/api/customers/register200Inscription avec documents
Inscrit un commerçant avec ses documents KYC en une seule étape (multipart/form-data). Même route que l'inscription classique, mais avec des fichiers joints.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
phoneNumber | string | body | Requis | Numéro de téléphone. Format : +212********* |
firstName | string | body | Requis | Prénom (min. 2 lettres latines). |
lastName | string | body | Requis | Nom de famille (min. 2 lettres latines). |
cin | string | body | Requis | Numéro de carte d'identité (min. 5 caractères). |
rcNumber | string | body | Requis | Numéro du registre de commerce. |
walletType | string | body | Requis | "C" (Commerçant). |
kycDocuments[n].docType | int | body | Requis | Type de document (voir la table "Types de documents"). |
kycDocuments[n].docFront | file | body | Requis | Image recto du document. |
kycDocuments[n].docBack | file | body | Optionnel | Image verso du document (si applicable). |
Notes
- •Content-Type doit être multipart/form-data (pas application/json).
- •Les fichiers acceptés sont les images (JPEG, PNG) et PDF.
- •Voir la table "Types de documents" pour les valeurs docType valides.
{host}/api/customers/register/confirmConfirmation OTP
Confirme l'inscription d'un client en saisissant le code OTP reçu par SMS.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | body | Requis | Numéro de téléphone du client. Format : +212********* |
Code | string | body | Requis | Code OTP reçu par SMS. Format : xxx-xxx |
autoActivate | boolean | body | Optionnel | Si true, active directement le client sans nécessiter l'étape de création de PIN. Utile si vous ne comptez pas utiliser le système de PIN de ChariMoney. |
{host}/api/customers/confirm/resend-otpRenvoyer l'OTP
Renvoie le code OTP pour l'inscription ou la confirmation.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | query | Requis | Numéro de téléphone du client. Format : +212********* |
{host}/api/customers/loginConnexion par PIN
Authentifie un client existant avec son code PIN.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | body | Requis | Numéro de téléphone du client. Format : +212********* |
Pin | string | body | Requis | Code PIN du client. |
Notes
- •logged : true si l'authentification a réussi, false sinon.
- •remainingAttempts : nombre de tentatives restantes avant le verrouillage du compte.
{host}/api/customers/pinCréer un PIN
Définit un code PIN sécurisé pour un client inscrit et confirmé.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | body | Requis | Numéro de téléphone du client. Format : +212********* |
Pin | string | body | Requis | Code PIN du client (4 chiffres obligatoires). |
{host}/api/customers/pinModifier le PIN
Modifie le code PIN existant d'un client.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | body | Requis | Numéro de téléphone du client. Format : +212********* |
OldPin | string | body | Requis | PIN actuel du client. |
NewPin | string | body | Requis | Nouveau PIN du client. |
{host}/api/customers/pin/resetBientôt disponibleRéinitialiser le PIN
Réinitialise le code PIN d'un client. Disponible dans une prochaine version.
Aucun paramètre requis.
{host}/api/customers/balanceConsulter le solde
Récupère le solde actuel du wallet d'un client inscrit.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | query | Requis | Numéro de téléphone du client. Format : +212********* |
{host}/api/customers/infoInformations client
Récupère les données de profil détaillées d'un client inscrit (identité, solde, RIB, niveau de compte, partenaire).
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | query | Requis | Numéro de téléphone du client. Format : +212********* |
Notes
- •accountLevel : niveau de compte (1 = basique, 2-4 = niveaux KYC supérieurs).
- •customerStatus : statut du client (voir l'endpoint "Check Status with Chari").
- •rib : Relevé d'Identité Bancaire associé au wallet.
{host}/api/customers/unregisterDésinscription
Désactive ou supprime un client de la plateforme. Une raison de clôture doit être fournie.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | body | Requis | Numéro de téléphone du client. Format : +212********* |
Reason | int | body | Requis | Code de la raison de clôture (voir notes). |
Notes
- •1 : Clôture à l'initiative de l'EDP — Raison non spécifiée
- •2 : Clôture à l'initiative de l'EDP — Suspicion de fraude
- •3 : Clôture à l'initiative du client — Résiliation du contrat
- •4 : Clôture à l'initiative du client — Téléphone perdu ou volé
- •5 : Clôture à l'initiative du client — Raison non spécifiée
KYC (Vérification d'identité)
Flux KYC mobile (iOS/Android) propulsé par ShareID. Votre application lance le SDK ShareID pour le scan de document et la capture de selfie ; ShareID effectue les contrôles de qualité, d'authenticité et de correspondance visage/document. Sur demande, nous vous fournissons les SDK ShareID (Android/iOS) et les credentials d'installation.
Flux d'intégration
- 1Votre app appelle "/kyc/shareid/auth" pour obtenir un token KYC temporaire.
- 2L'app ouvre le SDK ShareID avec ce token.
- 3L'utilisateur scanne sa pièce d'identité et effectue un selfie guidé.
- 4ShareID exécute les vérifications.
- 5Votre app appelle "/kyc/session/complete" pour signaler la fin du flux côté appareil.
- 6Un callback est envoyé à notre API avec le statut et les documents — nous stockons/validons et exposons le résultat KYC final.
{host}/api/kyc/shareid/authAuthentification KYC
Obtient un token KYC temporaire pour lancer le SDK ShareID.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | query | Requis | Numéro de téléphone du client. Format : +212********* |
Notes
- •baseUrl : URL de base du SDK ShareID à utiliser.
- •applicant_id : identifiant unique de la demande KYC.
- •token : jeton JWT temporaire pour l'authentification côté SDK.
{host}/api/customers/upgrade/requestConfirmation KYC
Signale la fin du flux KYC côté appareil et demande la mise à niveau du compte.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | query | Requis | Numéro de téléphone du client. Format : +212********* |
AccountLevel | int | query | Requis | Niveau de compte cible (2, 3 ou 4). |
{host}/api/customers/merchant/kyc/requestUpload documents marchand
Téléverse les documents KYC d'un commerçant pour demander une mise à niveau de compte (multipart/form-data).
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | query | Requis | Numéro de téléphone du commerçant. Format : +212********* |
kycDocuments[n].docType | int | body | Requis | Type de document (voir la table "Types de documents"). |
kycDocuments[n].docFront | file | body | Requis | Image recto du document. |
kycDocuments[n].docBack | file | body | Optionnel | Image verso (si applicable). |
Opérations
Toutes les opérations financières : dépôts par carte, transferts wallet-à-wallet, virements bancaires, paiements marchand, chargebacks, remboursements et requêtes par référence.
Dépôt par carte (CashIn Card)
{host}/api/operations/cashin/card/previewAperçu (par téléphone)
Vérifie la faisabilité du dépôt de fonds sur le wallet d'un client depuis une carte bancaire.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | query | Requis | Numéro de téléphone du client. Format : +212********* |
Amount | decimal | body | Requis | Montant à déposer. Doit être un nombre positif. |
{host}/api/operations/cashin/cardExécuter (par téléphone)
Dépose des fonds sur le wallet d'un client depuis une carte bancaire. Déclenche une authentification 3D Secure.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | query | Requis | Numéro de téléphone du client. |
FirstName | string | body | Requis | Prénom du titulaire de la carte. |
LastName | string | body | Requis | Nom du titulaire de la carte. |
Cvv | string | body | Requis | Code de sécurité à 3 chiffres (CVV). |
Amount | decimal | body | Requis | Montant à déposer. |
Currency | string | body | Optionnel | Code devise ISO 3 lettres (ex : MAD). |
Pan | string | body | Requis | Numéro complet de la carte (PAN). |
ExpiryDate | string | body | Requis | Date d'expiration au format YYMM. |
KeepAlive | bool | body | Requis | true : sauvegarder la carte pour usage futur / false : usage unique. |
CardName | string | body | Optionnel | Nom choisi par l'utilisateur pour sauvegarder la carte. |
Notes
- •Après l'authentification 3D Secure, l'utilisateur est redirigé vers acceptURL ou declineURL.
- •RESPONSE_CODE dans l'URL de redirection : 0 = succès, toute autre valeur = échec.
- •REASON_CODE : raison lisible du résultat (ex : SUCCESS, DECLINED).
- •Validez RESPONSE_CODE et REASON_CODE pour déterminer la suite dans votre application.
{host}/api/operations/cashin/card/{cardId}Exécuter avec carte sauvegardée
Dépose des fonds depuis une carte déjà tokenisée et sauvegardée.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | query | Requis | Numéro de téléphone du client. |
CardId | int | route | Requis | Identifiant de la carte sauvegardée. |
Cvv | string | body | Requis | Code de sécurité à 3 chiffres. |
Amount | decimal | body | Requis | Montant à déposer. |
{host}/api/operations/cashin/card/agent/previewAperçu (par agent)
Vérifie la faisabilité du dépôt via un code agent.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
code | string | query | Requis | Code de l'agent. |
Amount | decimal | body | Requis | Montant à déposer. |
{host}/api/operations/cashin/card/agentExécuter (par agent)
Dépose des fonds sur le wallet d'un client via un agent.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
agent | string | query | Requis | Code de l'agent. |
FirstName | string | body | Requis | Prénom du titulaire de la carte. |
LastName | string | body | Requis | Nom du titulaire de la carte. |
Cvv | string | body | Requis | Code de sécurité à 3 chiffres. |
Amount | decimal | body | Requis | Montant à déposer. |
Pan | string | body | Requis | Numéro complet de la carte. |
ExpiryDate | string | body | Requis | Date d'expiration au format YYMM. |
KeepAlive | bool | body | Requis | Sauvegarder la carte pour usage futur. |
Currency | string | body | Optionnel | Code devise ISO 3 lettres (ex : MAD). |
CardName | string | body | Optionnel | Nom choisi par l'utilisateur pour sauvegarder la carte. |
Transfert wallet-à-wallet
{host}/api/operations/transfer/previewAperçu
Vérifie la faisabilité d'un transfert de fonds entre wallets.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
CustomerPhoneNumber | string | body | Requis | Numéro de l'émetteur. Format : +212********* |
Amount | decimal | body | Requis | Montant à transférer. |
Reason | string | body | Requis | Motif du transfert. |
RecipientPhoneNumber | string | body | Requis | Numéro du bénéficiaire. Format : +212********* |
BeneficiaryId | int | body | Optionnel | Référence à un bénéficiaire existant (optionnel). |
{host}/api/operations/transferExécuter
Exécute un transfert de fonds entre wallets.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
CustomerPhoneNumber | string | body | Requis | Numéro de l'émetteur. |
Amount | decimal | body | Requis | Montant à transférer. |
Reason | string | body | Requis | Motif du transfert. |
RecipientPhoneNumber | string | body | Requis | Numéro du bénéficiaire. |
BeneficiaryId | int | body | Optionnel | Référence à un bénéficiaire existant (optionnel). |
Virement bancaire
{host}/api/operations/bank-transfer/previewAperçu
Vérifie la faisabilité d'un virement vers un compte bancaire externe.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
CustomerPhoneNumber | string | body | Requis | Requis si AgentCode est vide. |
AgentCode | string | body | Optionnel | Requis si CustomerPhoneNumber est vide. Code Agent (Principal ou Retail). |
Amount | decimal | body | Requis | Montant à virer. |
Reason | string | body | Requis | Motif du virement (caractères latins uniquement). |
BeneficiaryId | int | body | Optionnel | Optionnel si rib + beneficiaryName sont fournis. |
BeneficiaryName | string | body | Optionnel | Optionnel si beneficiaryId est fourni. |
Rib | string | body | Optionnel | RIB : chaîne numérique de 24 chiffres. Optionnel si beneficiaryId est fourni. |
Notes
- •Au moins un identifiant parmi beneficiaryId ou (rib + beneficiaryName) doit être fourni.
{host}/api/operations/bank-transferExécuter
Envoie de l'argent d'un wallet vers un compte bancaire externe.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
CustomerPhoneNumber | string | body | Requis | Requis si agentCode est vide. |
AgentCode | string | body | Optionnel | Requis si CustomerPhoneNumber est vide. |
Amount | decimal | body | Requis | Montant à virer. |
Reason | string | body | Optionnel | Motif du virement. |
BeneficiaryId | int | body | Optionnel | Optionnel si rib + beneficiaryName sont fournis. |
BeneficiaryName | string | body | Optionnel | Optionnel si beneficiaryId est fourni. |
Rib | string | body | Optionnel | RIB : 24 chiffres. Requis si pas de beneficiaryId. |
Paiement marchand
{host}/api/operations/merchant/payment/push/manual/previewPar téléphone — Aperçu
Vérifie la faisabilité d'un paiement marchand par numéro de téléphone.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
CustomerPhoneNumber | string | body | Requis | Numéro du client payeur. |
Amount | decimal | body | Requis | Montant du paiement. |
Reason | string | body | Requis | Motif du paiement. |
RecipientPhoneNumber | string | body | Requis | Numéro du marchand. |
BeneficiaryId | int | body | Optionnel | Référence à un bénéficiaire existant (optionnel). |
{host}/api/operations/merchant/payment/push/manualPar téléphone — Exécuter
Effectue un paiement marchand par numéro de téléphone.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
CustomerPhoneNumber | string | body | Requis | Numéro du client payeur. |
Amount | decimal | body | Requis | Montant du paiement. |
Reason | string | body | Requis | Motif du paiement. |
RecipientPhoneNumber | string | body | Requis | Numéro du marchand. |
BeneficiaryId | int | body | Optionnel | Référence à un bénéficiaire existant (optionnel). |
{host}/api/operations/merchant/payment/push/qrcode/previewPar QR Code — Aperçu
Vérifie la faisabilité d'un paiement marchand par QR Code.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
CustomerPhoneNumber | string | body | Requis | Numéro du client payeur. |
QrCodeContent | string | body | Requis | Contenu du QR Code scanné. |
Amount | decimal | body | Requis | Montant du paiement. |
{host}/api/operations/merchant/payment/push/qrcodePar QR Code — Exécuter
Effectue un paiement marchand par QR Code.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
CustomerPhoneNumber | string | body | Requis | Numéro du client payeur. |
QrCodeContent | string | body | Requis | Contenu du QR Code. |
Amount | decimal | body | Requis | Montant du paiement. |
{host}/api/operations/merchant/payment/push/card/previewPar carte — Aperçu
Vérifie la faisabilité d'un paiement marchand par carte (Card to Wallet).
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | query | Requis | Numéro du marchand. |
Amount | decimal | body | Requis | Montant du paiement. |
{host}/api/operations/merchant/payment/push/cardPar carte — Exécuter
Effectue un paiement marchand par carte (Card to Wallet).
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | query | Requis | Numéro du marchand. |
Amount | decimal | body | Requis | Montant du paiement. |
{host}/api/operations/merchant/qrcode/staticGénération QR statique
Génère un QR Code statique avec un montant fixe pour un marchand.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | query | Requis | Numéro du marchand. |
MaskedNumber | bool | query | Optionnel | Masquer le numéro du marchand dans le contenu QR. Ex : +2126######74 |
Amount | decimal | body | Requis | Montant fixe du QR Code. |
{host}/api/operations/merchant/qrcodeGénération QR dynamique
Génère un QR Code dynamique (sans montant fixe) pour un marchand.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | query | Requis | Numéro du marchand. |
MaskedNumber | bool | query | Optionnel | Masquer le numéro du marchand. |
Notes
- •QR statique : le montant est fixe et intégré dans le QR.
- •QR dynamique : le client saisit le montant lors du paiement.
- •qrCodeReference : référence unique attribuée aux QR dynamiques.
Chargeback (Rétrofacturation)
{host}/api/operations/chargeback/previewAperçu
Vérifie la faisabilité d'un chargeback.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
SourcePhoneNumber | string | body | Requis | Numéro du client à l'origine. Format : +212********* |
Amount | decimal | body | Requis | Montant du chargeback. |
Description | string | body | Requis | Motif du chargeback. |
DestinationPhoneNumber | string | body | Requis | Numéro du destinataire. Format : +212********* |
OriginalOperationId | int | body | Requis | ID de l'opération d'origine qui a déclenché le chargeback. |
{host}/api/operations/chargebackExécuter
Exécute un chargeback.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
SourcePhoneNumber | string | body | Requis | Numéro du client à l'origine. |
Amount | decimal | body | Requis | Montant du chargeback. |
Description | string | body | Requis | Motif du chargeback. |
DestinationPhoneNumber | string | body | Requis | Numéro du destinataire. |
OriginalOperationId | int | body | Requis | ID de l'opération d'origine. |
Opérations par référence (Request)
{host}/api/operations/cashin/requestDemander un CashIn
Crée une demande de CashIn. Génère une référence unique avec une durée de validité limitée.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | body | Requis | Numéro de téléphone du client. |
Amount | decimal | body | Requis | Montant du CashIn. |
Notes
- •operationType : 1 = CashIn, 2 = CashOut
- •operationStatus : 1 = open (en attente), 2 = completed (exécutée), 3 = failed (échouée)
{host}/api/operations/cashout/requestDemander un CashOut
Crée une demande de CashOut. Génère une référence unique avec une durée de validité limitée.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | body | Requis | Numéro de téléphone du client. |
Amount | decimal | body | Requis | Montant du CashOut. |
Consulter les opérations
{host}/api/operationsPar client
Récupère la liste des opérations d'un client avec filtres optionnels.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | query | Requis | Numéro de téléphone du client. |
PageSize | int | query | Optionnel | Résultats par page. Par défaut : 10 |
PageNumber | int | query | Optionnel | Numéro de page. Par défaut : 1 |
OperationType | list int | query | Optionnel | 1=CASHIN, 2=CASHOUT, 3=TRANSFER, 5=PAYMENT_PUSH, 7=PAYMENT_REFUND, 9=BANK_TRANSFER, 12=CHARGEBACK, 24=PAYMENT_CARD |
TransactionStatus | int | query | Optionnel | 1=PENDING, 2=COMPLETED, 3=FAILED, 4=CANCELLED |
Sens | int | query | Optionnel | 1=CREDIT, 2=DEBIT |
From | datetime | query | Optionnel | Date/heure de début du filtre. |
To | datetime | query | Optionnel | Date/heure de fin du filtre. |
Notes
- •collection : liste paginée des opérations.
- •count : nombre total d'opérations correspondant aux filtres.
- •accountNumber : peut être un numéro de téléphone, un RIB ou un accountId.
{host}/api/operations/{id}Par ID
Récupère le détail d'une opération spécifique par son ID.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | query | Requis | Numéro de téléphone du client. |
Id | int | route | Requis | ID de l'opération. |
Notes
- •operationId : identifiant de l'opération globale.
- •transactionId : identifiant de la transaction principale (une opération peut générer plusieurs transactions : débit émetteur, crédit destinataire, frais, etc.).
- •transactionReference : référence de la transaction principale.
- •amount : montant initial.
- •totalAmount : montant après application des frais et commissions.
{host}/api/operations/allToutes (par partenaire)
Récupère la liste de toutes les opérations du partenaire.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PageSize | int | query | Optionnel | Résultats par page. Par défaut : 10 |
PageNumber | int | query | Optionnel | Numéro de page. Par défaut : 1 |
OperationType | list int | query | Optionnel | Filtrer par type d'opération. |
TransactionStatus | int | query | Optionnel | Filtrer par statut. |
Sens | int | query | Optionnel | 1=CREDIT, 2=DEBIT |
From | datetime | query | Optionnel | Date/heure de début. |
To | datetime | query | Optionnel | Date/heure de fin. |
{host}/api/operations/c-request-idBientôt disponiblePar C-Request-Id
Récupère une opération par son identifiant C-Request-Id. Disponible dans une prochaine version.
Aucun paramètre requis.
Remboursement
{host}/api/operations/refund/previewAperçu
Vérifie la faisabilité d'un remboursement après paiement marchand.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | body | Requis | Numéro du client à rembourser. |
OperationId | int | body | Requis | ID de l'opération à rembourser. |
RefundAmount | decimal | body | Requis | Montant du remboursement. |
OrderId | string | body | Requis | OrderId original du paymentGateway. |
TransactionTrackId | string | body | Requis | TransactionTrackId original du paymentGateway. |
{host}/api/operations/refundExécuter
Exécute le remboursement d'un client après paiement marchand.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | body | Requis | Numéro du client. |
OperationId | int | body | Requis | ID de l'opération à rembourser. |
RefundAmount | decimal | body | Requis | Montant du remboursement. |
OrderId | string | body | Requis | OrderId original. |
TransactionTrackId | string | body | Requis | TransactionTrackId original. |
Bénéficiaires
Gérez les bénéficiaires d'un client : consultation, ajout, modification et suppression. Les bénéficiaires peuvent être identifiés par numéro de téléphone et/ou RIB.
{host}/api/customer/beneficiariesListe des bénéficiaires
Récupère la liste paginée des bénéficiaires d'un client.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | query | Requis | Numéro de téléphone du client. |
PageSize | int | query | Optionnel | Résultats par page. Par défaut : 10 |
PageNumber | int | query | Optionnel | Numéro de page. Par défaut : 1 |
Search | string | query | Optionnel | Filtrer par mot-clé. |
From | datetime | query | Optionnel | Date de création — début. |
To | datetime | query | Optionnel | Date de création — fin. |
{host}/api/customer/beneficiariesAjouter un bénéficiaire
Ajoute un nouveau bénéficiaire. Au moins le PhoneNumber ou le RIB doit être fourni.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber (query) | string | query | Requis | Numéro de téléphone du client (propriétaire). |
Name | string | body | Requis | Nom du bénéficiaire. Minimum 2 lettres. |
PhoneNumber | string | body | Optionnel | Numéro du bénéficiaire. Format : +212********* |
Rib | string | body | Optionnel | RIB du bénéficiaire. 24 chiffres. |
Email | string | body | Optionnel | Email du bénéficiaire. |
Notes
- •PhoneNumber ou RIB : au moins l'un des deux doit être fourni.
{host}/api/customer/beneficiaries/{id}Modifier un bénéficiaire
Met à jour un bénéficiaire existant.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | query | Requis | Numéro de téléphone du client (propriétaire). |
Id | int | route | Requis | ID du bénéficiaire à modifier. |
Name | string | body | Requis | Nom. Minimum 2 lettres. |
PhoneNumber | string | body | Optionnel | Numéro du bénéficiaire. |
Rib | string | body | Optionnel | RIB. 24 chiffres. |
Email | string | body | Optionnel | Email du bénéficiaire. |
{host}/api/customer/beneficiaries/{Id}Supprimer un bénéficiaire
Supprime un bénéficiaire existant.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | query | Requis | Numéro de téléphone du client. |
Id | int | route | Requis | ID du bénéficiaire à supprimer. |
Cartes tokenisées
Consultez et gérez les cartes bancaires sauvegardées (tokenisées) d'un client.
{host}/api/customers/tokenized/cardsListe des cartes
Récupère toutes les cartes tokenisées d'un client.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | query | Requis | Numéro de téléphone du client. |
PageSize | int | query | Optionnel | Résultats par page. Par défaut : 10 |
PageNumber | int | query | Optionnel | Numéro de page. Par défaut : 1 |
Notes
- •customerBankCardId : identifiant unique de la carte sauvegardée.
- •maskedPan : numéro de carte masqué (4 derniers chiffres).
- •issuer : nom de la banque émettrice.
- •scheme : réseau de la carte (Visa, Mastercard, etc.).
{host}/api/customers/tokenized/cards/{id}Carte par ID
Récupère les détails d'une carte tokenisée spécifique.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | query | Requis | Numéro de téléphone du client. |
Id | int | route | Requis | ID de la carte. |
{host}/api/customers/tokenized/cardsAjouter une carte
Enregistre (tokenise) une nouvelle carte bancaire pour un client.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | query | Requis | Numéro de téléphone du client. |
FirstName | string | body | Requis | Prénom du titulaire de la carte. |
LastName | string | body | Requis | Nom du titulaire de la carte. |
Pan | string | body | Requis | Numéro complet de la carte (PAN). |
ExpiryDate | string | body | Requis | Date d'expiration au format YYMM (ex: 3005). |
Cvv | string | body | Requis | Code de vérification (CVV/CVC). |
CardName | string | body | Optionnel | Nom personnalisé de la carte (alias). |
Notes
- •Le PAN (numéro de carte) sera stocké de manière sécurisée et tokenisé.
- •Utilisez la carte de test sandbox pour les tests (voir la section Carte de test).
{host}/api/customers/tokenized/cards/{id}Bientôt disponibleSupprimer une carte
Supprime une carte tokenisée. Disponible dans une prochaine version.
Aucun paramètre requis.
Agents détaillants
Gérez les agents détaillants : consultation, ajout, et exécution d'opérations CashIn/CashOut par référence.
{host}/api/agents/retailListe des agents détaillants
Récupère la liste paginée des agents détaillants.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
Code | string | query | Requis | Code de l'agent. |
PageSize | int | query | Optionnel | Résultats par page. Par défaut : 10 |
PageNumber | int | query | Optionnel | Numéro de page. Par défaut : 1 |
From | datetime | query | Optionnel | Création de l'agent — date début. |
To | datetime | query | Optionnel | Création de l'agent — date fin. |
{host}/api/agents/retail/{code}Agent par code
Récupère les détails d'un agent détaillant par son code.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
Code | string | route | Requis | Code de l'agent. |
{host}/api/agents/retailAjouter un agent
Ajoute un nouvel agent détaillant.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
PhoneNumber | string | body | Requis | Numéro de téléphone de l'agent. Format : +212********* |
Name | string | body | Requis | Nom commercial de l'agent. |
FirstName | string | body | Requis | Prénom. Minimum 2 lettres. |
LastName | string | body | Requis | Nom de famille. Minimum 2 lettres. |
Cin | string | body | Requis | Numéro de pièce d'identité. |
Address | string | body | Optionnel | Adresse de l'agent. |
Email | string | body | Optionnel | Email de l'agent. |
{host}/api/agents/retail/{code}Bientôt disponibleModifier un agent
Met à jour un agent détaillant existant. Disponible dans une prochaine version.
Aucun paramètre requis.
{host}/api/operations/cashin/requestConsulter CashIn par référence
Récupère les détails d'une opération CashIn demandée via sa référence unique.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
Reference | string | query | Requis | Référence unique de l'opération. |
Notes
- •type : 1 = CashIn, 2 = CashOut
- •status : 1 = open, 2 = completed, 3 = failed
{host}/api/agents/operations/cashinExécuter CashIn par référence
L'agent exécute une opération CashIn en utilisant la référence générée par le client.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
Code | string | body | Requis | Code de l'agent. |
Reference | string | body | Requis | Référence de l'opération. |
{host}/api/operations/cashout/requestConsulter CashOut par référence
Récupère les détails d'une opération CashOut via sa référence unique.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
Reference | string | query | Requis | Référence unique de l'opération. |
{host}/api/agents/operations/cashoutExécuter CashOut par référence
L'agent exécute une opération CashOut en utilisant la référence générée par le client.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
Code | string | body | Requis | Code de l'agent. |
Reference | string | body | Requis | Référence de l'opération. |
Agents principaux
Consultez les informations d'un agent principal.
{host}/api/agents/principalAgent principal par code
Récupère les informations de compte d'un agent principal.
| Parameter | Type | In | Requis | Description |
|---|---|---|---|---|
Code | string | query | Requis | Code de l'agent principal. |
Webhooks
Les webhooks permettent au BAAS Chari de notifier votre système des événements (opération complétée, mises à jour KYC, etc.) en quasi temps réel. Votre serveur expose un endpoint HTTPS ; nous envoyons des événements JSON signés par POST.
Requête HTTP
https://{your-domain}/webhooks/chariEn-têtes
Content-Type: application/jsonUser-Agent: Chari-BAAS-Webhook/1.0C-Webhook-Id: xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxxApi-Key: xxxxxxxxRéponse attendue : 200 OK sous 5 secondes (corps vide). Tout code non-2xx déclenche un retry.
Propriétés du body d'événement
| Property | Type | Requis | Description |
|---|---|---|---|
WebhookId | string | Requis | Identifiant du webhook. |
EventId | string | Requis | Type d'événement. Ex : bank-transfer.initiated |
CRequestId | string | Requis | Identifiant de traçage reçu du partenaire. |
OperationId | int | Requis | ID de l'opération exécutée (peut être 0 si aucune opération créée). |
TransactionId | int | Optionnel | ID de la transaction principale. |
OperationType | int | Requis | Code du type d'opération (voir Types). |
OperationStatus | int | Requis | 1 = Open, 2 = Completed, 3 = Failed |
CreatedAt | date | Requis | Date de début du processus. |
Amount | decimal | Requis | Montant de l'opération. |
FeeAmount | decimal | Requis | Montant des frais. |
PrimaryAccountNumber | string | Requis | Numéro de téléphone de l'émetteur. |
SecondaryAccountNumber | string | Optionnel | Numéro de téléphone du destinataire. |
Method | string | Optionnel | Méthode : Card / Agent / Network |
CustomData | string | Optionnel | Données personnalisées du partenaire (max 128 caractères). |
GatewayTrackId | string | Optionnel | Gateway Transaction Track Id. |
GatewayOrderId | string | Optionnel | Gateway Transaction Order Id. |
GatewayReferenceId | string | Optionnel | Gateway Transaction Reference Id. |
BankTransferBeneficiaryName | string | Optionnel | Nom du bénéficiaire pour les virements bancaires. |
NetworkName | string | Optionnel | Nom du réseau pour les opérations réseau. |
Reference | string | Optionnel | Référence de l'opération par référence. |
Politique de retry
Événements
| Event ID | Description |
|---|---|
customer.kyc | Processus KYC démarré |
customer.level.updated | Niveau de compte client mis à jour |
operation.created | Opération créée (en attente) |
operation.updated | Changement de statut d'opération |
cashin.card.authorized | CashIn par carte accepté |
payment.card.authorized | Paiement par carte accepté |
bank-transfer.initiated | Virement bancaire envoyé |
bank-transfer.completed | Virement bancaire réglé |
bank-transfer.failed | Virement bancaire rejeté/retourné |
bank-transfer.received | Virement bancaire reçu |
transfer.received | Transfert reçu |
cashin.network.executed | CashIn par référence exécuté |
cashout.network.executed | CashOut par référence exécuté |
Exemple de body d'événement
{
"data": {
"WebhookId": 12345,
"CRequestId": "a4d1e0b5-9f6a-4c1d-bc7b-2d0a7f4b9b12",
"OperationId": 924381,
"OperationType": 5,
"OperationStatus": 2,
"CreatedAt": "2025-11-05T10:12:00Z",
"ExecutedAt": "2025-11-05T10:12:22Z",
"Amount": 25000.00,
"FeeAmount": 350.00,
"CustomData": "{\"note\":\"Salary for October\"}",
"PrimaryAccountNumber": "+212711111111",
"SecondaryAccountNumber": "+212722222222",
"Method": "BankTransfer",
"Reference": "BANK-REF-9FJ2X7",
"BankTransferBeneficiaryName": "Aminata Diop"
}
}Format de réponse
Toutes les réponses de l'API sont enveloppées dans un objet `data`. Le header C-Request-Id que vous envoyez est renvoyé dans la réponse pour faciliter le traçage.
En-tête C-Request-Id
L'API prend en charge le header C-Request-Id pour permettre le suivi des requêtes. Vous pouvez inclure un C-Request-Id unique dans les headers de requête, qui sera renvoyé dans la réponse. Cela facilite le logging, le debugging et le traçage des requêtes dans des systèmes distribués.
Types et références
Types d'opérations
| ID | Code |
|---|---|
| 1 | CASHIN |
| 2 | CASHOUT |
| 3 | TRANSFER |
| 4 | DEPOSIT |
| 5 | PAYMENT_PUSH |
| 6 | PAYMENT_PULL |
| 7 | PAYMENT_REFUND |
| 8 | ALIMENTATION_AGENT |
| 9 | BANK_TRANSFER |
| 10 | MOBILE_TOP_UP |
| 12 | CHARGEBACK |
| 24 | PAYMENT_CARD |
Types de transactions
| ID | Code |
|---|---|
| 1 | CASHIN |
| 2 | CASHOUT |
| 3 | TRANSFER |
| 5 | PAYMENT_PUSH |
| 6 | TRANSACTION_FEES |
| 7 | PAYMENT_REFUND |
| 9 | CHARGEBACK |
| 10 | CHARGEBACK_CANCELLATION |
| 16 | BANK_TRANSFER |
| 18 | CASHBACK |
Statuts de transaction
| ID | Code | Description |
|---|---|---|
| 1 | PENDING | En attente |
| 2 | COMPLETED | Terminée |
| 3 | FAILED | Échouée |
| 4 | CANCELLED | Annulée |
Direction de transaction (Sens)
| ID | Code | Description |
|---|---|---|
| 1 | CREDIT | Crédit (entrée de fonds) |
| 2 | DEBIT | Débit (sortie de fonds) |
Statuts client
| ID | Code | Description |
|---|---|---|
| 0 | NOT_EXISTS | Le numéro n'existe pas chez ChariMoney |
| 1 | NOT_CONFIRMED | Existe mais non confirmé (OTP non saisi) |
| 2 | CONFIRMED | Confirmé et inscrit au Switch |
| 3 | ACTIVE | Inscrit, actif et PIN créé |
| 4 | LOCKED_TEMPORARY | Temporairement bloqué (tentatives excessives) |
| 5 | LOCKED | Bloqué |
Niveaux de compte
| ID | Code | Description |
|---|---|---|
| 1 | BASIC | Niveau de base — inscription sans KYC |
| 2 | KYC_LEVEL_2 | Niveau 2 — vérification ShareID (document + selfie) |
| 3 | KYC_LEVEL_3 | Niveau 3 — vérification avancée |
| 4 | KYC_LEVEL_4 | Niveau 4 — vérification complète |
Types de documents
| ID | Code | Description |
|---|---|---|
| 1 | IdentityCard | Carte d'identité nationale |
| 2 | DrivingLicense | Permis de conduire |
| 3 | Passport | Passeport |
| 4 | ResidencePermit | Carte de séjour |
| 5 | ProofOfIncome | Justificatif de revenus |
| 6 | ProofOfResidence | Justificatif de domicile |
| 7 | Selfie | Selfie / Photo de visage |
| 8 | CommercialRegister | Registre de commerce |
Codes d'erreur
Codes de statut HTTP
Format de réponse d'erreur
{
"errorCode": 20005,
"errorDescription": "The specified user could not be found."
}Codes d'erreur Chari
10xxxGénéral
| Code | Message | Endpoints associés |
|---|---|---|
| 10001 | Paramètres manquants. |
20xxxClient
| Code | Message | Endpoints associés |
|---|---|---|
| 20000 | Le format du numéro de téléphone est invalide. | |
| 20005 | L'utilisateur spécifié est introuvable. | |
| 20006 | Les paramètres initiaux fournis sont incorrects ou invalides. | |
| 20007 | Le code de catégorie marchand (MCC) fourni est incorrect ou non reconnu. | |
| 20008 | L'inscription est temporairement verrouillée pour des raisons de sécurité. | |
| 20009 | La demande est en attente de confirmation. Veuillez patienter. | |
| 20017 | Aucune demande en attente n'est associée au numéro de téléphone fourni. |
26xxxPIN / Authentification
| Code | Message | Endpoints associés |
|---|---|---|
| 26001 | Le PIN saisi est incorrect. | |
| 26004 | Un PIN a déjà été défini pour ce wallet. | |
| 26005 | Le PIN fourni ne respecte pas le format requis (doit être un nombre à 4 chiffres). |
27xxxBénéficiaire
| Code | Message | Endpoints associés |
|---|---|---|
| 27000 | Le bénéficiaire existe déjà avec le même numéro de téléphone. | |
| 27001 | Le bénéficiaire n'existe pas. |
32xxxKYC / Mise à niveau
| Code | Message | Endpoints associés |
|---|---|---|
| 32000 | Une demande de mise à niveau est déjà en cours d'examen pour ce compte. |
Infrastructure et sécurité
Environnements
Sandbox
https://sandbox.charimoney.comEnvironnement de développement et de test. Les transactions sont simulées.
Production
Communiqué sur demandeTransactions réelles. Nécessite une approbation préalable et des tests réussis en sandbox.
Sécurité et conformité
- •L'authentification API est gérée par clés API.
- •Les requêtes provenant d'IP/domaines non autorisés seront rejetées.
- •En cas de compromission d'une clé API, elle doit être immédiatement révoquée et rotée.
- •Un rate limiting peut s'appliquer pour prévenir les abus (contactez le support pour les limites).
- •L'environnement de production nécessite une approbation préalable et des tests réussis en sandbox.
Prochaines étapes d'intégration
- 1Demander les clés API
Contactez le support pour recevoir vos clés dédiées sandbox et production.
- 2Soumettre les IP/domaines
Fournissez la liste des IP publiques ou domaines pour le whitelisting.
- 3Tester en sandbox
Effectuez tous vos tests d'intégration dans l'environnement sandbox.
- 4Passer en production
Une fois approuvé, basculez vers la production avec votre clé API live.