انتقل إلى المحتوى الرئيسي

[AR] API Documentation

[AR] Complete reference for Chari Money's Banking-as-a-Service API. Integrate financial services into your applications with our robust and secure endpoints.

[AR] Getting Started

[AR] Version 1.8 · [AR] Last updated 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.

[AR] Authentication Headers

Incluez les en-têtes suivants dans toutes vos requêtes API :

HeaderType[AR] RequiredDescription
Chari-Api-Keystring[AR] RequiredClé API pour l'authentification. Fournie par Chari pour chaque environnement.
C-Request-Idstring[AR] OptionalIdentifiant unique par requête pour le traçage. Renvoyé dans la réponse. Format recommandé : UUID v4. Ex : 69906411-0aa24a89-ab2005ca-9d18dc15

[AR] Test Credit Card (Sandbox)

[AR] PAN

4918914107195005

[AR] CVV

123

[AR] Expiry

08/25 (ou toute date future)

[AR] 3DS Code

555
[AR] New

[AR] LLM & AI Pack

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.

OpenAPI 3.0JSON SchemaMermaidMarkdowncURL
[AR] Download .zip

Postman Collection

Téléchargez la collection Postman complète pour tester tous les endpoints de l'API.

[AR] Download

[AR] Changelog

v1.8

2025-11-05

Documentation initiale. Couverture complète de l'API v1.8.

v1.8.1

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.

I

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.

GET{host}/api/customers/status

Vérifier le statut (Chari)

Récupère le statut d'inscription actuel d'un client auprès de Chari uniquement.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringquery[AR] RequiredNuméro de téléphone du client. Format : +212*********

[AR] 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é.
GET{host}/api/customers/default

Vérifier le wallet par défaut

Vérifie si Chari est le wallet par défaut du client auprès de Switch.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringquery[AR] RequiredNuméro de téléphone du client. Format : +212*********

[AR] Notes

  • true : Chari est le wallet par défaut du client.
  • false : Chari n'est PAS le wallet par défaut du client.
POST{host}/api/customers/register202

Inscription

Lance le processus d'inscription d'un nouveau client. Un OTP sera envoyé par SMS pour confirmation.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringbody[AR] RequiredNuméro de téléphone du client. Format : +212*********
FirstNamestringbody[AR] RequiredPrénom. Minimum 2 lettres (caractères latins uniquement).
LastNamestringbody[AR] RequiredNom de famille. Minimum 2 lettres (caractères latins uniquement).
Cinstringbody[AR] RequiredNuméro de carte d'identité. Minimum 5 caractères.
WalletTypestringbody[AR] Required"P" : Particulier / "C" : Commerçant
POST{host}/api/customers/register200

Inscription 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.

ParameterTypeIn[AR] RequiredDescription
phoneNumberstringbody[AR] RequiredNuméro de téléphone. Format : +212*********
firstNamestringbody[AR] RequiredPrénom (min. 2 lettres latines).
lastNamestringbody[AR] RequiredNom de famille (min. 2 lettres latines).
cinstringbody[AR] RequiredNuméro de carte d'identité (min. 5 caractères).
rcNumberstringbody[AR] RequiredNuméro du registre de commerce.
walletTypestringbody[AR] Required"C" (Commerçant).
kycDocuments[n].docTypeintbody[AR] RequiredType de document (voir la table "Types de documents").
kycDocuments[n].docFrontfilebody[AR] RequiredImage recto du document.
kycDocuments[n].docBackfilebody[AR] OptionalImage verso du document (si applicable).

[AR] 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.
POST{host}/api/customers/register/confirm

Confirmation OTP

Confirme l'inscription d'un client en saisissant le code OTP reçu par SMS.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringbody[AR] RequiredNuméro de téléphone du client. Format : +212*********
Codestringbody[AR] RequiredCode OTP reçu par SMS. Format : xxx-xxx
autoActivatebooleanbody[AR] OptionalSi 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.
POST{host}/api/customers/confirm/resend-otp

Renvoyer l'OTP

Renvoie le code OTP pour l'inscription ou la confirmation.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringquery[AR] RequiredNuméro de téléphone du client. Format : +212*********
POST{host}/api/customers/login

Connexion par PIN

Authentifie un client existant avec son code PIN.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringbody[AR] RequiredNuméro de téléphone du client. Format : +212*********
Pinstringbody[AR] RequiredCode PIN du client.

[AR] Notes

  • logged : true si l'authentification a réussi, false sinon.
  • remainingAttempts : nombre de tentatives restantes avant le verrouillage du compte.
POST{host}/api/customers/pin

Créer un PIN

Définit un code PIN sécurisé pour un client inscrit et confirmé.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringbody[AR] RequiredNuméro de téléphone du client. Format : +212*********
Pinstringbody[AR] RequiredCode PIN du client (4 chiffres obligatoires).
PATCH{host}/api/customers/pin

Modifier le PIN

Modifie le code PIN existant d'un client.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringbody[AR] RequiredNuméro de téléphone du client. Format : +212*********
OldPinstringbody[AR] RequiredPIN actuel du client.
NewPinstringbody[AR] RequiredNouveau PIN du client.
POST{host}/api/customers/pin/reset[AR] Coming Soon

Réinitialiser le PIN

Réinitialise le code PIN d'un client. Disponible dans une prochaine version.

[AR] No parameters required.

GET{host}/api/customers/balance

Consulter le solde

Récupère le solde actuel du wallet d'un client inscrit.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringquery[AR] RequiredNuméro de téléphone du client. Format : +212*********
GET{host}/api/customers/info

Informations client

Récupère les données de profil détaillées d'un client inscrit (identité, solde, RIB, niveau de compte, partenaire).

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringquery[AR] RequiredNuméro de téléphone du client. Format : +212*********

[AR] 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.
PUT{host}/api/customers/unregister

Désinscription

Désactive ou supprime un client de la plateforme. Une raison de clôture doit être fournie.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringbody[AR] RequiredNuméro de téléphone du client. Format : +212*********
Reasonintbody[AR] RequiredCode de la raison de clôture (voir notes).

[AR] 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
K

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.

[AR] Integration Flow

  1. 1Votre app appelle "/kyc/shareid/auth" pour obtenir un token KYC temporaire.
  2. 2L'app ouvre le SDK ShareID avec ce token.
  3. 3L'utilisateur scanne sa pièce d'identité et effectue un selfie guidé.
  4. 4ShareID exécute les vérifications.
  5. 5Votre app appelle "/kyc/session/complete" pour signaler la fin du flux côté appareil.
  6. 6Un callback est envoyé à notre API avec le statut et les documents — nous stockons/validons et exposons le résultat KYC final.
GET{host}/api/kyc/shareid/auth

Authentification KYC

Obtient un token KYC temporaire pour lancer le SDK ShareID.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringquery[AR] RequiredNuméro de téléphone du client. Format : +212*********

[AR] 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.
POST{host}/api/customers/upgrade/request

Confirmation KYC

Signale la fin du flux KYC côté appareil et demande la mise à niveau du compte.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringquery[AR] RequiredNuméro de téléphone du client. Format : +212*********
AccountLevelintquery[AR] RequiredNiveau de compte cible (2, 3 ou 4).
POST{host}/api/customers/merchant/kyc/request

Upload documents marchand

Téléverse les documents KYC d'un commerçant pour demander une mise à niveau de compte (multipart/form-data).

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringquery[AR] RequiredNuméro de téléphone du commerçant. Format : +212*********
kycDocuments[n].docTypeintbody[AR] RequiredType de document (voir la table "Types de documents").
kycDocuments[n].docFrontfilebody[AR] RequiredImage recto du document.
kycDocuments[n].docBackfilebody[AR] OptionalImage verso (si applicable).
O

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)

POST{host}/api/operations/cashin/card/preview

Aperç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.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringquery[AR] RequiredNuméro de téléphone du client. Format : +212*********
Amountdecimalbody[AR] RequiredMontant à déposer. Doit être un nombre positif.
POST{host}/api/operations/cashin/card

Exé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.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringquery[AR] RequiredNuméro de téléphone du client.
FirstNamestringbody[AR] RequiredPrénom du titulaire de la carte.
LastNamestringbody[AR] RequiredNom du titulaire de la carte.
Cvvstringbody[AR] RequiredCode de sécurité à 3 chiffres (CVV).
Amountdecimalbody[AR] RequiredMontant à déposer.
Currencystringbody[AR] OptionalCode devise ISO 3 lettres (ex : MAD).
Panstringbody[AR] RequiredNuméro complet de la carte (PAN).
ExpiryDatestringbody[AR] RequiredDate d'expiration au format YYMM.
KeepAliveboolbody[AR] Requiredtrue : sauvegarder la carte pour usage futur / false : usage unique.
CardNamestringbody[AR] OptionalNom choisi par l'utilisateur pour sauvegarder la carte.

[AR] 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.
POST{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.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringquery[AR] RequiredNuméro de téléphone du client.
CardIdintroute[AR] RequiredIdentifiant de la carte sauvegardée.
Cvvstringbody[AR] RequiredCode de sécurité à 3 chiffres.
Amountdecimalbody[AR] RequiredMontant à déposer.
POST{host}/api/operations/cashin/card/agent/preview

Aperçu (par agent)

Vérifie la faisabilité du dépôt via un code agent.

ParameterTypeIn[AR] RequiredDescription
codestringquery[AR] RequiredCode de l'agent.
Amountdecimalbody[AR] RequiredMontant à déposer.
POST{host}/api/operations/cashin/card/agent

Exécuter (par agent)

Dépose des fonds sur le wallet d'un client via un agent.

ParameterTypeIn[AR] RequiredDescription
agentstringquery[AR] RequiredCode de l'agent.
FirstNamestringbody[AR] RequiredPrénom du titulaire de la carte.
LastNamestringbody[AR] RequiredNom du titulaire de la carte.
Cvvstringbody[AR] RequiredCode de sécurité à 3 chiffres.
Amountdecimalbody[AR] RequiredMontant à déposer.
Panstringbody[AR] RequiredNuméro complet de la carte.
ExpiryDatestringbody[AR] RequiredDate d'expiration au format YYMM.
KeepAliveboolbody[AR] RequiredSauvegarder la carte pour usage futur.
Currencystringbody[AR] OptionalCode devise ISO 3 lettres (ex : MAD).
CardNamestringbody[AR] OptionalNom choisi par l'utilisateur pour sauvegarder la carte.

Transfert wallet-à-wallet

POST{host}/api/operations/transfer/preview

Aperçu

Vérifie la faisabilité d'un transfert de fonds entre wallets.

ParameterTypeIn[AR] RequiredDescription
CustomerPhoneNumberstringbody[AR] RequiredNuméro de l'émetteur. Format : +212*********
Amountdecimalbody[AR] RequiredMontant à transférer.
Reasonstringbody[AR] RequiredMotif du transfert.
RecipientPhoneNumberstringbody[AR] RequiredNuméro du bénéficiaire. Format : +212*********
BeneficiaryIdintbody[AR] OptionalRéférence à un bénéficiaire existant (optionnel).
POST{host}/api/operations/transfer

Exécuter

Exécute un transfert de fonds entre wallets.

ParameterTypeIn[AR] RequiredDescription
CustomerPhoneNumberstringbody[AR] RequiredNuméro de l'émetteur.
Amountdecimalbody[AR] RequiredMontant à transférer.
Reasonstringbody[AR] RequiredMotif du transfert.
RecipientPhoneNumberstringbody[AR] RequiredNuméro du bénéficiaire.
BeneficiaryIdintbody[AR] OptionalRéférence à un bénéficiaire existant (optionnel).

Virement bancaire

POST{host}/api/operations/bank-transfer/preview

Aperçu

Vérifie la faisabilité d'un virement vers un compte bancaire externe.

ParameterTypeIn[AR] RequiredDescription
CustomerPhoneNumberstringbody[AR] RequiredRequis si AgentCode est vide.
AgentCodestringbody[AR] OptionalRequis si CustomerPhoneNumber est vide. Code Agent (Principal ou Retail).
Amountdecimalbody[AR] RequiredMontant à virer.
Reasonstringbody[AR] RequiredMotif du virement (caractères latins uniquement).
BeneficiaryIdintbody[AR] OptionalOptionnel si rib + beneficiaryName sont fournis.
BeneficiaryNamestringbody[AR] OptionalOptionnel si beneficiaryId est fourni.
Ribstringbody[AR] OptionalRIB : chaîne numérique de 24 chiffres. Optionnel si beneficiaryId est fourni.

[AR] Notes

  • Au moins un identifiant parmi beneficiaryId ou (rib + beneficiaryName) doit être fourni.
POST{host}/api/operations/bank-transfer

Exécuter

Envoie de l'argent d'un wallet vers un compte bancaire externe.

ParameterTypeIn[AR] RequiredDescription
CustomerPhoneNumberstringbody[AR] RequiredRequis si agentCode est vide.
AgentCodestringbody[AR] OptionalRequis si CustomerPhoneNumber est vide.
Amountdecimalbody[AR] RequiredMontant à virer.
Reasonstringbody[AR] OptionalMotif du virement.
BeneficiaryIdintbody[AR] OptionalOptionnel si rib + beneficiaryName sont fournis.
BeneficiaryNamestringbody[AR] OptionalOptionnel si beneficiaryId est fourni.
Ribstringbody[AR] OptionalRIB : 24 chiffres. Requis si pas de beneficiaryId.

Paiement marchand

POST{host}/api/operations/merchant/payment/push/manual/preview

Par téléphone — Aperçu

Vérifie la faisabilité d'un paiement marchand par numéro de téléphone.

ParameterTypeIn[AR] RequiredDescription
CustomerPhoneNumberstringbody[AR] RequiredNuméro du client payeur.
Amountdecimalbody[AR] RequiredMontant du paiement.
Reasonstringbody[AR] RequiredMotif du paiement.
RecipientPhoneNumberstringbody[AR] RequiredNuméro du marchand.
BeneficiaryIdintbody[AR] OptionalRéférence à un bénéficiaire existant (optionnel).
POST{host}/api/operations/merchant/payment/push/manual

Par téléphone — Exécuter

Effectue un paiement marchand par numéro de téléphone.

ParameterTypeIn[AR] RequiredDescription
CustomerPhoneNumberstringbody[AR] RequiredNuméro du client payeur.
Amountdecimalbody[AR] RequiredMontant du paiement.
Reasonstringbody[AR] RequiredMotif du paiement.
RecipientPhoneNumberstringbody[AR] RequiredNuméro du marchand.
BeneficiaryIdintbody[AR] OptionalRéférence à un bénéficiaire existant (optionnel).
POST{host}/api/operations/merchant/payment/push/qrcode/preview

Par QR Code — Aperçu

Vérifie la faisabilité d'un paiement marchand par QR Code.

ParameterTypeIn[AR] RequiredDescription
CustomerPhoneNumberstringbody[AR] RequiredNuméro du client payeur.
QrCodeContentstringbody[AR] RequiredContenu du QR Code scanné.
Amountdecimalbody[AR] RequiredMontant du paiement.
POST{host}/api/operations/merchant/payment/push/qrcode

Par QR Code — Exécuter

Effectue un paiement marchand par QR Code.

ParameterTypeIn[AR] RequiredDescription
CustomerPhoneNumberstringbody[AR] RequiredNuméro du client payeur.
QrCodeContentstringbody[AR] RequiredContenu du QR Code.
Amountdecimalbody[AR] RequiredMontant du paiement.
POST{host}/api/operations/merchant/payment/push/card/preview

Par carte — Aperçu

Vérifie la faisabilité d'un paiement marchand par carte (Card to Wallet).

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringquery[AR] RequiredNuméro du marchand.
Amountdecimalbody[AR] RequiredMontant du paiement.
POST{host}/api/operations/merchant/payment/push/card

Par carte — Exécuter

Effectue un paiement marchand par carte (Card to Wallet).

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringquery[AR] RequiredNuméro du marchand.
Amountdecimalbody[AR] RequiredMontant du paiement.
POST{host}/api/operations/merchant/qrcode/static

Génération QR statique

Génère un QR Code statique avec un montant fixe pour un marchand.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringquery[AR] RequiredNuméro du marchand.
MaskedNumberboolquery[AR] OptionalMasquer le numéro du marchand dans le contenu QR. Ex : +2126######74
Amountdecimalbody[AR] RequiredMontant fixe du QR Code.
GET{host}/api/operations/merchant/qrcode

Génération QR dynamique

Génère un QR Code dynamique (sans montant fixe) pour un marchand.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringquery[AR] RequiredNuméro du marchand.
MaskedNumberboolquery[AR] OptionalMasquer le numéro du marchand.

[AR] 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)

POST{host}/api/operations/chargeback/preview

Aperçu

Vérifie la faisabilité d'un chargeback.

ParameterTypeIn[AR] RequiredDescription
SourcePhoneNumberstringbody[AR] RequiredNuméro du client à l'origine. Format : +212*********
Amountdecimalbody[AR] RequiredMontant du chargeback.
Descriptionstringbody[AR] RequiredMotif du chargeback.
DestinationPhoneNumberstringbody[AR] RequiredNuméro du destinataire. Format : +212*********
OriginalOperationIdintbody[AR] RequiredID de l'opération d'origine qui a déclenché le chargeback.
POST{host}/api/operations/chargeback

Exécuter

Exécute un chargeback.

ParameterTypeIn[AR] RequiredDescription
SourcePhoneNumberstringbody[AR] RequiredNuméro du client à l'origine.
Amountdecimalbody[AR] RequiredMontant du chargeback.
Descriptionstringbody[AR] RequiredMotif du chargeback.
DestinationPhoneNumberstringbody[AR] RequiredNuméro du destinataire.
OriginalOperationIdintbody[AR] RequiredID de l'opération d'origine.

Opérations par référence (Request)

POST{host}/api/operations/cashin/request

Demander un CashIn

Crée une demande de CashIn. Génère une référence unique avec une durée de validité limitée.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringbody[AR] RequiredNuméro de téléphone du client.
Amountdecimalbody[AR] RequiredMontant du CashIn.

[AR] Notes

  • operationType : 1 = CashIn, 2 = CashOut
  • operationStatus : 1 = open (en attente), 2 = completed (exécutée), 3 = failed (échouée)
POST{host}/api/operations/cashout/request

Demander un CashOut

Crée une demande de CashOut. Génère une référence unique avec une durée de validité limitée.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringbody[AR] RequiredNuméro de téléphone du client.
Amountdecimalbody[AR] RequiredMontant du CashOut.

Consulter les opérations

GET{host}/api/operations

Par client

Récupère la liste des opérations d'un client avec filtres optionnels.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringquery[AR] RequiredNuméro de téléphone du client.
PageSizeintquery[AR] OptionalRésultats par page. Par défaut : 10
PageNumberintquery[AR] OptionalNuméro de page. Par défaut : 1
OperationTypelist intquery[AR] Optional1=CASHIN, 2=CASHOUT, 3=TRANSFER, 5=PAYMENT_PUSH, 7=PAYMENT_REFUND, 9=BANK_TRANSFER, 12=CHARGEBACK, 24=PAYMENT_CARD
TransactionStatusintquery[AR] Optional1=PENDING, 2=COMPLETED, 3=FAILED, 4=CANCELLED
Sensintquery[AR] Optional1=CREDIT, 2=DEBIT
Fromdatetimequery[AR] OptionalDate/heure de début du filtre.
Todatetimequery[AR] OptionalDate/heure de fin du filtre.

[AR] 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.
GET{host}/api/operations/{id}

Par ID

Récupère le détail d'une opération spécifique par son ID.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringquery[AR] RequiredNuméro de téléphone du client.
Idintroute[AR] RequiredID de l'opération.

[AR] 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.
GET{host}/api/operations/all

Toutes (par partenaire)

Récupère la liste de toutes les opérations du partenaire.

ParameterTypeIn[AR] RequiredDescription
PageSizeintquery[AR] OptionalRésultats par page. Par défaut : 10
PageNumberintquery[AR] OptionalNuméro de page. Par défaut : 1
OperationTypelist intquery[AR] OptionalFiltrer par type d'opération.
TransactionStatusintquery[AR] OptionalFiltrer par statut.
Sensintquery[AR] Optional1=CREDIT, 2=DEBIT
Fromdatetimequery[AR] OptionalDate/heure de début.
Todatetimequery[AR] OptionalDate/heure de fin.
GET{host}/api/operations/c-request-id[AR] Coming Soon

Par C-Request-Id

Récupère une opération par son identifiant C-Request-Id. Disponible dans une prochaine version.

[AR] No parameters required.

Remboursement

POST{host}/api/operations/refund/preview

Aperçu

Vérifie la faisabilité d'un remboursement après paiement marchand.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringbody[AR] RequiredNuméro du client à rembourser.
OperationIdintbody[AR] RequiredID de l'opération à rembourser.
RefundAmountdecimalbody[AR] RequiredMontant du remboursement.
OrderIdstringbody[AR] RequiredOrderId original du paymentGateway.
TransactionTrackIdstringbody[AR] RequiredTransactionTrackId original du paymentGateway.
POST{host}/api/operations/refund

Exécuter

Exécute le remboursement d'un client après paiement marchand.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringbody[AR] RequiredNuméro du client.
OperationIdintbody[AR] RequiredID de l'opération à rembourser.
RefundAmountdecimalbody[AR] RequiredMontant du remboursement.
OrderIdstringbody[AR] RequiredOrderId original.
TransactionTrackIdstringbody[AR] RequiredTransactionTrackId original.
B

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.

GET{host}/api/customer/beneficiaries

Liste des bénéficiaires

Récupère la liste paginée des bénéficiaires d'un client.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringquery[AR] RequiredNuméro de téléphone du client.
PageSizeintquery[AR] OptionalRésultats par page. Par défaut : 10
PageNumberintquery[AR] OptionalNuméro de page. Par défaut : 1
Searchstringquery[AR] OptionalFiltrer par mot-clé.
Fromdatetimequery[AR] OptionalDate de création — début.
Todatetimequery[AR] OptionalDate de création — fin.
POST{host}/api/customer/beneficiaries

Ajouter un bénéficiaire

Ajoute un nouveau bénéficiaire. Au moins le PhoneNumber ou le RIB doit être fourni.

ParameterTypeIn[AR] RequiredDescription
PhoneNumber (query)stringquery[AR] RequiredNuméro de téléphone du client (propriétaire).
Namestringbody[AR] RequiredNom du bénéficiaire. Minimum 2 lettres.
PhoneNumberstringbody[AR] OptionalNuméro du bénéficiaire. Format : +212*********
Ribstringbody[AR] OptionalRIB du bénéficiaire. 24 chiffres.
Emailstringbody[AR] OptionalEmail du bénéficiaire.

[AR] Notes

  • PhoneNumber ou RIB : au moins l'un des deux doit être fourni.
PUT{host}/api/customer/beneficiaries/{id}

Modifier un bénéficiaire

Met à jour un bénéficiaire existant.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringquery[AR] RequiredNuméro de téléphone du client (propriétaire).
Idintroute[AR] RequiredID du bénéficiaire à modifier.
Namestringbody[AR] RequiredNom. Minimum 2 lettres.
PhoneNumberstringbody[AR] OptionalNuméro du bénéficiaire.
Ribstringbody[AR] OptionalRIB. 24 chiffres.
Emailstringbody[AR] OptionalEmail du bénéficiaire.
DELETE{host}/api/customer/beneficiaries/{Id}

Supprimer un bénéficiaire

Supprime un bénéficiaire existant.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringquery[AR] RequiredNuméro de téléphone du client.
Idintroute[AR] RequiredID du bénéficiaire à supprimer.
C

Cartes tokenisées

Consultez et gérez les cartes bancaires sauvegardées (tokenisées) d'un client.

GET{host}/api/customers/tokenized/cards

Liste des cartes

Récupère toutes les cartes tokenisées d'un client.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringquery[AR] RequiredNuméro de téléphone du client.
PageSizeintquery[AR] OptionalRésultats par page. Par défaut : 10
PageNumberintquery[AR] OptionalNuméro de page. Par défaut : 1

[AR] 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.).
GET{host}/api/customers/tokenized/cards/{id}

Carte par ID

Récupère les détails d'une carte tokenisée spécifique.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringquery[AR] RequiredNuméro de téléphone du client.
Idintroute[AR] RequiredID de la carte.
POST{host}/api/customers/tokenized/cards

Ajouter une carte

Enregistre (tokenise) une nouvelle carte bancaire pour un client.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringquery[AR] RequiredNuméro de téléphone du client.
FirstNamestringbody[AR] RequiredPrénom du titulaire de la carte.
LastNamestringbody[AR] RequiredNom du titulaire de la carte.
Panstringbody[AR] RequiredNuméro complet de la carte (PAN).
ExpiryDatestringbody[AR] RequiredDate d'expiration au format YYMM (ex: 3005).
Cvvstringbody[AR] RequiredCode de vérification (CVV/CVC).
CardNamestringbody[AR] OptionalNom personnalisé de la carte (alias).

[AR] 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).
DELETE{host}/api/customers/tokenized/cards/{id}[AR] Coming Soon

Supprimer une carte

Supprime une carte tokenisée. Disponible dans une prochaine version.

[AR] No parameters required.

A

Agents détaillants

Gérez les agents détaillants : consultation, ajout, et exécution d'opérations CashIn/CashOut par référence.

GET{host}/api/agents/retail

Liste des agents détaillants

Récupère la liste paginée des agents détaillants.

ParameterTypeIn[AR] RequiredDescription
Codestringquery[AR] RequiredCode de l'agent.
PageSizeintquery[AR] OptionalRésultats par page. Par défaut : 10
PageNumberintquery[AR] OptionalNuméro de page. Par défaut : 1
Fromdatetimequery[AR] OptionalCréation de l'agent — date début.
Todatetimequery[AR] OptionalCréation de l'agent — date fin.
GET{host}/api/agents/retail/{code}

Agent par code

Récupère les détails d'un agent détaillant par son code.

ParameterTypeIn[AR] RequiredDescription
Codestringroute[AR] RequiredCode de l'agent.
POST{host}/api/agents/retail

Ajouter un agent

Ajoute un nouvel agent détaillant.

ParameterTypeIn[AR] RequiredDescription
PhoneNumberstringbody[AR] RequiredNuméro de téléphone de l'agent. Format : +212*********
Namestringbody[AR] RequiredNom commercial de l'agent.
FirstNamestringbody[AR] RequiredPrénom. Minimum 2 lettres.
LastNamestringbody[AR] RequiredNom de famille. Minimum 2 lettres.
Cinstringbody[AR] RequiredNuméro de pièce d'identité.
Addressstringbody[AR] OptionalAdresse de l'agent.
Emailstringbody[AR] OptionalEmail de l'agent.
PUT{host}/api/agents/retail/{code}[AR] Coming Soon

Modifier un agent

Met à jour un agent détaillant existant. Disponible dans une prochaine version.

[AR] No parameters required.

GET{host}/api/operations/cashin/request

Consulter CashIn par référence

Récupère les détails d'une opération CashIn demandée via sa référence unique.

ParameterTypeIn[AR] RequiredDescription
Referencestringquery[AR] RequiredRéférence unique de l'opération.

[AR] Notes

  • type : 1 = CashIn, 2 = CashOut
  • status : 1 = open, 2 = completed, 3 = failed
POST{host}/api/agents/operations/cashin

Exé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.

ParameterTypeIn[AR] RequiredDescription
Codestringbody[AR] RequiredCode de l'agent.
Referencestringbody[AR] RequiredRéférence de l'opération.
GET{host}/api/operations/cashout/request

Consulter CashOut par référence

Récupère les détails d'une opération CashOut via sa référence unique.

ParameterTypeIn[AR] RequiredDescription
Referencestringquery[AR] RequiredRéférence unique de l'opération.
POST{host}/api/agents/operations/cashout

Exé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.

ParameterTypeIn[AR] RequiredDescription
Codestringbody[AR] RequiredCode de l'agent.
Referencestringbody[AR] RequiredRéférence de l'opération.
A

Agents principaux

Consultez les informations d'un agent principal.

GET{host}/api/agents/principal

Agent principal par code

Récupère les informations de compte d'un agent principal.

ParameterTypeIn[AR] RequiredDescription
Codestringquery[AR] RequiredCode de l'agent principal.
W

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.

[AR] HTTP Request

POSThttps://{your-domain}/webhooks/chari

[AR] Headers

Content-Type: application/jsonUser-Agent: Chari-BAAS-Webhook/1.0C-Webhook-Id: xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxxApi-Key: xxxxxxxx

Réponse attendue : 200 OK sous 5 secondes (corps vide). Tout code non-2xx déclenche un retry.

[AR] Event Body Properties

PropertyType[AR] RequiredDescription
WebhookIdstring[AR] RequiredIdentifiant du webhook.
EventIdstring[AR] RequiredType d'événement. Ex : bank-transfer.initiated
CRequestIdstring[AR] RequiredIdentifiant de traçage reçu du partenaire.
OperationIdint[AR] RequiredID de l'opération exécutée (peut être 0 si aucune opération créée).
TransactionIdint[AR] OptionalID de la transaction principale.
OperationTypeint[AR] RequiredCode du type d'opération (voir Types).
OperationStatusint[AR] Required1 = Open, 2 = Completed, 3 = Failed
CreatedAtdate[AR] RequiredDate de début du processus.
Amountdecimal[AR] RequiredMontant de l'opération.
FeeAmountdecimal[AR] RequiredMontant des frais.
PrimaryAccountNumberstring[AR] RequiredNuméro de téléphone de l'émetteur.
SecondaryAccountNumberstring[AR] OptionalNuméro de téléphone du destinataire.
Methodstring[AR] OptionalMéthode : Card / Agent / Network
CustomDatastring[AR] OptionalDonnées personnalisées du partenaire (max 128 caractères).
GatewayTrackIdstring[AR] OptionalGateway Transaction Track Id.
GatewayOrderIdstring[AR] OptionalGateway Transaction Order Id.
GatewayReferenceIdstring[AR] OptionalGateway Transaction Reference Id.
BankTransferBeneficiaryNamestring[AR] OptionalNom du bénéficiaire pour les virements bancaires.
NetworkNamestring[AR] OptionalNom du réseau pour les opérations réseau.
Referencestring[AR] OptionalRéférence de l'opération par référence.

[AR] Retry Policy

Backoff:1 min, 5 min, 30 min, 60 min, puis toutes les 6h jusqu'à 72h au total.
Stop:Arrêt au premier 200.
Dead letter:Après 72h sans réponse 200, l'événement est marqué comme non distribuable.

[AR] Events

Event IDDescription
customer.kycProcessus KYC démarré
customer.level.updatedNiveau de compte client mis à jour
operation.createdOpération créée (en attente)
operation.updatedChangement de statut d'opération
cashin.card.authorizedCashIn par carte accepté
payment.card.authorizedPaiement par carte accepté
bank-transfer.initiatedVirement bancaire envoyé
bank-transfer.completedVirement bancaire réglé
bank-transfer.failedVirement bancaire rejeté/retourné
bank-transfer.receivedVirement bancaire reçu
transfer.receivedTransfert reçu
cashin.network.executedCashIn par référence exécuté
cashout.network.executedCashOut par référence exécuté

[AR] Example Event Body

json
{
  "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"
  }
}
F

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.

[AR] C-Request-Id Header

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.

T

Types et références

[AR] Operation Types

IDCode
1CASHIN
2CASHOUT
3TRANSFER
4DEPOSIT
5PAYMENT_PUSH
6PAYMENT_PULL
7PAYMENT_REFUND
8ALIMENTATION_AGENT
9BANK_TRANSFER
10MOBILE_TOP_UP
12CHARGEBACK
24PAYMENT_CARD

[AR] Transaction Types

IDCode
1CASHIN
2CASHOUT
3TRANSFER
5PAYMENT_PUSH
6TRANSACTION_FEES
7PAYMENT_REFUND
9CHARGEBACK
10CHARGEBACK_CANCELLATION
16BANK_TRANSFER
18CASHBACK

[AR] Transaction Statuses

IDCodeDescription
1PENDINGEn attente
2COMPLETEDTerminée
3FAILEDÉchouée
4CANCELLEDAnnulée

[AR] Transaction Direction (Sens)

IDCodeDescription
1CREDITCrédit (entrée de fonds)
2DEBITDébit (sortie de fonds)

[AR] Customer Statuses

IDCodeDescription
0NOT_EXISTSLe numéro n'existe pas chez ChariMoney
1NOT_CONFIRMEDExiste mais non confirmé (OTP non saisi)
2CONFIRMEDConfirmé et inscrit au Switch
3ACTIVEInscrit, actif et PIN créé
4LOCKED_TEMPORARYTemporairement bloqué (tentatives excessives)
5LOCKEDBloqué

[AR] Account Levels

IDCodeDescription
1BASICNiveau de base — inscription sans KYC
2KYC_LEVEL_2Niveau 2 — vérification ShareID (document + selfie)
3KYC_LEVEL_3Niveau 3 — vérification avancée
4KYC_LEVEL_4Niveau 4 — vérification complète

[AR] Document Types

IDCodeDescription
1IdentityCardCarte d'identité nationale
2DrivingLicensePermis de conduire
3PassportPasseport
4ResidencePermitCarte de séjour
5ProofOfIncomeJustificatif de revenus
6ProofOfResidenceJustificatif de domicile
7SelfieSelfie / Photo de visage
8CommercialRegisterRegistre de commerce
C

Codes d'erreur

[AR] HTTP Status Codes

401 UnauthorizedIdentifiants d'authentification (API KEY) non autorisés.
422 UnprocessableLe serveur ne peut pas traiter la requête.
423 LockedL'accès est verrouillé pour le client donné.
400 Bad RequestErreur spécifique avec un code d'erreur Chari (voir ci-dessous).

[AR] Error Response Format

json
{
  "errorCode": 20005,
  "errorDescription": "The specified user could not be found."
}

[AR] Chari Error Codes

10xxxGénéral

CodeMessage[AR] Related Endpoints
10001Paramètres manquants.

20xxxClient

CodeMessage[AR] Related Endpoints
20000Le format du numéro de téléphone est invalide.
20005L'utilisateur spécifié est introuvable.
20006Les paramètres initiaux fournis sont incorrects ou invalides.
20007Le code de catégorie marchand (MCC) fourni est incorrect ou non reconnu.
20008L'inscription est temporairement verrouillée pour des raisons de sécurité.
20009La demande est en attente de confirmation. Veuillez patienter.
20017Aucune demande en attente n'est associée au numéro de téléphone fourni.

26xxxPIN / Authentification

CodeMessage[AR] Related Endpoints
26001Le PIN saisi est incorrect.
26004Un PIN a déjà été défini pour ce wallet.
26005Le PIN fourni ne respecte pas le format requis (doit être un nombre à 4 chiffres).

27xxxBénéficiaire

CodeMessage[AR] Related Endpoints
27000Le bénéficiaire existe déjà avec le même numéro de téléphone.
27001Le bénéficiaire n'existe pas.

32xxxKYC / Mise à niveau

CodeMessage[AR] Related Endpoints
32000Une demande de mise à niveau est déjà en cours d'examen pour ce compte.
I

Infrastructure et sécurité

[AR] Environments

Sandbox

https://sandbox.charimoney.com

Environnement de développement et de test. Les transactions sont simulées.

Production

Communiqué sur demande

Transactions réelles. Nécessite une approbation préalable et des tests réussis en sandbox.

[AR] Security & Compliance

  • 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.

[AR] Next Steps for Integration

  1. 1
    Demander les clés API

    Contactez le support pour recevoir vos clés dédiées sandbox et production.

  2. 2
    Soumettre les IP/domaines

    Fournissez la liste des IP publiques ou domaines pour le whitelisting.

  3. 3
    Tester en sandbox

    Effectuez tous vos tests d'intégration dans l'environnement sandbox.

  4. 4
    Passer en production

    Une fois approuvé, basculez vers la production avec votre clé API live.