Documentation d'intĂ©gration â API Marchande Redacok
Version du 08/10/2026. Document public destiné aux développeurs qui intÚgrent la solution de paiement des applications marchandes Redacok. Il ne contient aucune clé ni information confidentielle.
Adresse de ce document : https://redacok.com/documentation-api (page) et https://redacok.com/documentation-api.md (texte brut Markdown).
URL de base : https://redacok.com/api/applications-marchandes
Cette documentation est complÚte : en la lisant de bout en bout, vous savez créer une application, encaisser, envoyer de l'argent, suivre vos soldes, comprendre les frais, gérer les erreurs et passer en production.
1. Vue d'ensemble
Une application marchande est créée par un membre de type Ătablissement, Entreprise, Organisation/Association ou CoopĂ©rative, depuis son tableau de bord Redacok (onglet API Marchande). Redacok propose deux familles d'opĂ©rations :
| Famille | Sens | Ce que fait votre application | Moyens possibles |
|---|---|---|---|
| Recevoir des paiements (partie 4) | Entrant | Vos clients vous paient | Mobile Money, cartes Visa et Mastercard, compte Redacok |
| Envoyer de l'argent (partie 5) | Sortant | Vous payez vos utilisateurs, vendeurs ou livreurs | Compte Redacok, Mobile Money (les cartes bancaires ne s'appliquent pas aux envois) |
Chaque application possĂšde :
| ĂlĂ©ment | RĂŽle |
|---|---|
ClĂ© publique (pk_âŠ) | identifie l'application ; peut apparaĂźtre dans les URL de consultation de statut |
ClĂ© secrĂšte (sk_âŠ) | authentifie vos appels serveur-Ă -serveur ; ne jamais l'exposer cĂŽtĂ© navigateur ou mobile |
| Secret de webhook | sert uniquement à vérifier la signature des notifications que Redacok vous envoie |
| Un wallet | solde « disponible » (argent encaissé en mode Réel, utilisable pour vos envois et retraits) et solde « en cours » (séquestre du mode Sandbox) |
La clĂ© secrĂšte est affichĂ©e Ă la crĂ©ation (et consultable tant que l'application est en mode Sandbox). Elle est effacĂ©e quand le passage en mode RĂ©el est approuvĂ© : conservez-la dans un coffre de secrets dĂšs sa crĂ©ation. Si vous la perdez ou si elle a pu ĂȘtre exposĂ©e, rĂ©gĂ©nĂ©rez-en une depuis le tableau de bord (voir partie 11).
2. Démarrage en 7 étapes
- Créez votre application dans le tableau de bord Redacok (onglet API Marchande) et notez la clé publique, la clé secrÚte et le secret de webhook.
- Renseignez l'adresse de votre webhook (
https://âŠ) et, si vous le souhaitez, l'e-mail des notifications. - Activez, dans le tableau de bord, les moyens de paiement que vous voulez proposer (case par moyen).
- Faites vos essais en Sandbox (partie 9) : 3 paiements de test réussis sont nécessaires pour demander le passage en Réel.
- Demandez le passage en Réel depuis le tableau de bord. La demande est validée par la direction de Redacok.
- AprĂšs le passage en production, contactez toujours le support Redacok (messagerie du tableau de bord) pour faire activer, un Ă un, tous les moyens de paiement dont vous avez besoin, par pays.
- Mettez à jour vos clés de production sur votre serveur et suivez vos soldes dans le tableau de bord.
3. Conventions générales
- Format : toutes les requĂȘtes sont en JSON (
Content-Type: application/json), méthodePOSTsauf indication contraire. - Authentification :
clePubliqueetcleSecretesont envoyĂ©es dans le corps JSON de chaque requĂȘte (pas d'en-tĂȘte Authorization). La consultation d'un statut n'utilise que la clĂ© publique. - Montant : chaĂźne de chiffres, jusqu'Ă 2 dĂ©cimales (
"5000","1500.50"), strictement positive. - Devise :
XAFpar défaut. Une autre devise est convertie en XAF par Redacok ; si votre plateforme convertit déjà , envoyez"XAF". Les soldes et frais sont exprimés en FCFA (XAF). - Numéro de téléphone Mobile Money : format international, chiffres seulement, sans « + » ni espaces (ex.
237670000000). Pour un numéro camerounais de 9 chiffres commençant par 6, Redacok ajoute l'indicatif 237 si vous l'oubliez. Un numéro invalide est refusé immédiatement par l'opérateur : rien n'est débité. - Numéro de compte Redacok : le numéro complet du compte (ex.
CM10000000010000100000170). - Erreurs : une réponse HTTP 4xx contient un champ
messageen français avec la raison (liste complÚte en partie 12). - Délai d'attente conseillé pour vos appels : 30 secondes.
- Usage raisonnable : pour suivre un paiement, interrogez le statut toutes les 5 Ă 10 secondes, pendant 5 minutes au maximum.
4. Recevoir des paiements : POST /paiement/initier
{
"clePublique": "pk_...",
"cleSecrete": "sk_...",
"montant": "5000",
"devise": "XAF",
"referenceMarchand": "VOTRE-REFERENCE-UNIQUE",
"moyenPaiement": "MTN_MOMO",
"numeroCompteClient": "237670000000",
"idempotency_key": "cle-unique-optionnelle"
}| Champ | Détail |
|---|---|
montant | voir partie 3 |
devise | XAF par défaut |
referenceMarchand | votre identifiant de commande, conservé avec le paiement. Redacok ne l'impose pas unique : pour éviter les doublons, utilisez une clé d'idempotence |
moyenPaiement | un code de la liste de la partie 7 |
numeroCompteClient | Mobile Money : numéro du client (partie 3). REDACOK_INTERNE : numéro de compte Redacok du client. Inutile pour VISA et MASTERCARD |
idempotency_key | optionnel, voir partie 10 (peut aussi ĂȘtre envoyĂ©e dans l'en-tĂȘte Idempotency-Key) |
urlSucces, urlAnnulation, urlEchec | optionnels, pour VISA et MASTERCARD : adresses vers lesquelles le client est renvoyé aprÚs la page de carte |
Réponse : { "paiementId": "uuid" }. Pour VISA et MASTERCARD, la réponse contient aussi "paymentUrl" : ouvrez ce lien dans le navigateur du client (sur Android, préférez le navigateur du téléphone à une WebView) pour qu'il saisisse sa carte sur la page sécurisée du partenaire de paiement.
Cycle de vie d'un paiement
| Statut | Signification |
|---|---|
EN_ATTENTE | créé, le client n'a pas encore payé |
APPROUVE | payé ; le montant (moins les frais si vous les assumez) est crédité sur le wallet. Un paiement approuvé ne change plus de statut |
REJETE | refusé par le partenaire de paiement ou par le client |
EXPIRE | non payé au bout de 5 minutes |
Chaque paiement est valable 5 minutes, validation chez l'opĂ©rateur ou saisie de la carte comprises. Un paiement EXPIRE ne peut plus ĂȘtre validĂ© : crĂ©ez-en un nouveau.
Comment le client paie selon le moyen
- Mobile Money : le client reçoit une demande de confirmation sur son téléphone et saisit son code secret. Le numéro est vérifié par l'opérateur dÚs la demande.
- Cartes Visa et Mastercard : le client saisit sa carte sur la page sécurisée (
paymentUrl), puis est renvoyĂ© vers votre application. - `REDACOK_INTERNE` : le client reçoit la demande dans son application Redacok, choisit son compte (Courant ou Ăpargne) et saisit le code PIN de ce compte.
Retour du client aprĂšs un paiement par carte
AprÚs la saisie de sa carte, le client est renvoyé vers votre application :
- paiement validé :
urlSucces; - paiement annulé par le client :
urlAnnulation; - paiement refusé ou échoué :
urlEchec(à défaut,urlAnnulation).
Chaque adresse commence par https:// (ou est le lien d'ouverture de votre application mobile, par exemple monapp://paiement), sans identifiant ni mot de passe, 500 caractĂšres au maximum. Redacok y ajoute les paramĂštres redacok_paiement (le paiementId), redacok_resultat (succes, annulation ou echec), redacok_statut (statut connu Ă cet instant) et redacok_reference (votre referenceMarchand). Le paramĂštre redacok_statut n'est qu'une indication : confirmez toujours le paiement par le webhook ou par la consultation du statut. Sans adresse fournie, le client voit une page de confirmation Redacok neutre.
Consulter un paiement : GET /paiement/{paiementId}/statut?clePublique=pk_...
Réponse : { "statut": "APPROUVE", "montant": "5000.00", "reference": "VOTRE-REFERENCE" }.
Pour les paiements Mobile Money et carte encore EN_ATTENTE, cet appel interroge aussi le partenaire de paiement : c'est le filet de sécurité si un webhook n'arrive pas.
5. Envoyer de l'argent depuis votre wallet
Les trois appels ci-dessous dĂ©bitent le wallet disponible de l'application (jamais nĂ©gatif). MĂȘmes clĂ©s dans le corps JSON. Ils servent Ă payer vos utilisateurs, vendeurs ou livreurs. Les cartes Visa et Mastercard ne s'appliquent pas aux envois.
| Appel | Usage | Champs |
|---|---|---|
POST /paiement/verifier-destinataire | connaßtre le nom du titulaire d'un compte Redacok avant d'envoyer (ne fonctionne pas pour un numéro Mobile Money) | clePublique, cleSecrete, numeroCompteDestinataire |
POST /paiement/envoyer | payer un compte Redacok | clePublique, cleSecrete, montant, numeroCompteDestinataire, referenceMarchand, devise, idempotency_key |
POST /paiement/envoyer-externe | envoyer vers un numéro Mobile Money | clePublique, cleSecrete, montant, telephone, moyenPaiement, referenceMarchand, devise, idempotency_key |
Moyens d'envoi (`moyenPaiement` de `envoyer-externe`) : MTN_MOMO, ORANGE_MONEY, EXPRESS_UNION, AIRTEL_MONEY, AFRICELL_MONEY, TELMA, LONESTAR_MTN, MOOV_MONEY, MOOV_AFRICA, selon le pays de l'opĂ©rateur. Le moyen doit ĂȘtre activĂ© sur votre application (voir partie 7).
Réponses
verifier-destinataire:{ "nomComplet": "Nom du titulaire" }.envoyer:{ "verdict": "PAIEMENT_ENVOYE", "message": "âŠ", "nomDestinataire": "âŠ" }.envoyer-externe:{ "verdict": "ENVOI_EFFECTUE", "message": "âŠ" }. Le message contient le montant envoyĂ©, les frais d'envoi Ă©ventuels et la rĂ©fĂ©rence de l'opĂ©rateur.
Comportement
- Le traitement est immédiat : la réponse vous dit tout de suite si l'envoi est parti ou refusé. Il n'y a pas de traitement par lots ni d'horaires imposés par Redacok.
- Si l'opérateur refuse ou n'aboutit pas, le wallet est recrédité intégralement, tout de suite, et l'appel renvoie une erreur.
- Une opĂ©ration partie ne peut pas ĂȘtre annulĂ©e par API. Un envoi n'a que deux issues :
ENVOYE(parti) ou refusé (erreur, wallet recrédité). - Plafonds quotidiens : voir la partie 17.
- Il n'y a pas de webhook pour les envois : la réponse de l'appel fait foi. Retrouvez chaque envoi dans l'historique de votre application (tableau de bord), par l'appel
/paiement/historiqueou par l'appel/paiement/statut-envoiavec votrereferenceMarchand(partie 16). - Wallet insuffisant : erreur 400 avec le message « Solde du Wallet insuffisant pour cet envoi. » (ou « âŠpour ce paiement. » pour
envoyer). Le montant Ă couvrir inclut les frais d'envoi si vous les assumez.
6. Wallet, soldes et retraits
- Disponible : argent encaissé en mode Réel, utilisable pour vos envois et vos retraits. Un paiement approuvé en mode Réel est crédité tout de suite (moins les frais si vous les assumez).
- En cours (séquestre) : en mode Sandbox, les montants encaissés restent en séquestre ; ils sont libérés vers le disponible à l'approbation du passage en Réel. En mode Réel, les encaissements d'un moyen de paiement pour lequel Redacok a configuré un délai de disponibilité (par exemple 24 h, 48 h ou plusieurs jours) restent dans le solde « en cours » pendant ce délai, puis passent automatiquement au solde « disponible » (vérification toutes les 10 minutes). Sans délai configuré, l'argent est disponible tout de suite. Le délai dépend du moyen de paiement, du pays et de l'application ; le support vous le communique.
- Consultation : les soldes, l'historique complet des paiements, des envois et des frais se consultent dans le tableau de bord (onglet API Marchande, un bouton par application). Pour votre serveur, trois appels par clés existent : le solde du wallet, l'historique complet et le statut d'un envoi (partie 16). Ils servent à votre rapprochement comptable, en plus de vos webhooks.
- Recharger le wallet : depuis le tableau de bord, transférez des fonds de votre Compte Courant Redacok vers le wallet.
- Retirer vos fonds : depuis le tableau de bord, faites une demande de retrait. Elle est vĂ©rifiĂ©e puis validĂ©e par l'Ă©quipe habilitĂ©e de Redacok ; vous ĂȘtes notifiĂ© du rĂ©sultat.
- Le wallet de chaque application est un compte distinct, séparé des autres wallets et des comptes des clients.
7. Moyens de paiement par pays
Redacok propose les moyens ci-dessous pour les paiements de vos clients. Le pays est celui du marchand (dossier de vérification). à la création de l'application, seul REDACOK_INTERNE est activé ; vous activez ensuite les autres dans le tableau de bord (case par moyen). AprÚs le passage en production, contactez le support Redacok pour faire activer, par pays, tous les moyens dont vous avez besoin. Le support vous confirme en privé les moyens ouverts pour votre application.
| Pays | Moyens de paiement |
|---|---|
| Cameroun (CM) | REDACOK_INTERNE, ORANGE_MONEY, MTN_MOMO, EXPRESS_UNION, VISA, MASTERCARD |
| CĂŽte d'Ivoire (CI) | REDACOK_INTERNE, ORANGE_MONEY, WAVE, MTN_MOMO, MOOV_MONEY, VISA, MASTERCARD |
| Sénégal (SN) | REDACOK_INTERNE, ORANGE_MONEY, WAVE, FREE_MONEY, VISA, MASTERCARD |
| Mali (ML) | REDACOK_INTERNE, ORANGE_MONEY, MOOV_MONEY, WAVE, VISA, MASTERCARD |
| Burkina Faso (BF) | REDACOK_INTERNE, ORANGE_MONEY, MOOV_MONEY, WAVE, VISA, MASTERCARD |
| Niger (NE) | REDACOK_INTERNE, ORANGE_MONEY, MOOV_MONEY, AIRTEL_MONEY, VISA, MASTERCARD |
| Togo (TG) | REDACOK_INTERNE, MOOV_MONEY, T_MONEY, VISA, MASTERCARD |
| Bénin (BN) | REDACOK_INTERNE, MTN_MOMO, MOOV_MONEY, VISA, MASTERCARD |
| Guinée (GN) | REDACOK_INTERNE, MTN_MOMO, ORANGE_MONEY, VISA, MASTERCARD |
| Gabon (GA) | REDACOK_INTERNE, MOOV_AFRICA, AIRTEL_MONEY, VISA, MASTERCARD |
| Congo (CG) | REDACOK_INTERNE, MTN_MOMO, AIRTEL_MONEY, VISA, MASTERCARD |
| Tchad (TD) | REDACOK_INTERNE, AIRTEL_MONEY, MOOV_AFRICA, VISA, MASTERCARD |
| République centrafricaine (CF) | REDACOK_INTERNE, ORANGE_MONEY, MOOV_AFRICA, VISA, MASTERCARD |
| RD Congo (CD) | REDACOK_INTERNE, ORANGE_MONEY, AIRTEL_MONEY, AFRICELL_MONEY, MPESA, VISA, MASTERCARD |
| Madagascar (MG) | REDACOK_INTERNE, TELMA, ORANGE_MONEY, AIRTEL_MONEY, VISA, MASTERCARD |
| Libéria (LR) | REDACOK_INTERNE, LONESTAR_MTN, ORANGE_MONEY, VISA, MASTERCARD |
| Ouganda (UG) | REDACOK_INTERNE, MTN_MOMO, AIRTEL_MONEY, WAVE, VISA, MASTERCARD |
| Rwanda (RW) | REDACOK_INTERNE, MTN_MOMO, AIRTEL_MONEY, VISA, MASTERCARD |
| Kenya (KE) | REDACOK_INTERNE, MPESA, AIRTEL_MONEY, VISA, MASTERCARD |
| Tanzanie (TZ) | REDACOK_INTERNE, MPESA, AIRTEL_MONEY, VISA, MASTERCARD |
| Zambie (ZM) | REDACOK_INTERNE, MTN_MOMO, AIRTEL_MONEY, VISA, MASTERCARD |
| Ghana (GH) | REDACOK_INTERNE, MTN_MOMO, VISA, MASTERCARD |
| Autres pays d'Afrique et du monde | REDACOK_INTERNE, VISA, MASTERCARD, et les moyens locaux de votre pays sur demande au support |
Descriptions des moyens : ORANGE_MONEY (Orange Money), MTN_MOMO (MTN Mobile Money), MOOV_MONEY et MOOV_AFRICA (Moov), AIRTEL_MONEY (Airtel Money), AFRICELL_MONEY (Africell), WAVE (Wave), FREE_MONEY (Free Money), T_MONEY (T-Money), MPESA (M-Pesa), TELMA (Telma MVola), LONESTAR_MTN (Lonestar MTN), EXPRESS_UNION (Express Union), VISA et MASTERCARD (cartes bancaires, encaissement uniquement), REDACOK_INTERNE (compte Redacok, encaissement et envoi).
8. Frais
Les frais dépendent du sens (encaissement ou envoi), du pays et du moyen de paiement.
RĂšgle de calcul (identique pour les encaissements et pour les envois) :
- si des frais ont été configurés sur votre application pour ce moyen et ce sens (pourcentage ou montant fixe, ou « aucun frais »), ce sont ces frais seuls qui s'appliquent ;
- sinon, ce sont les frais généraux de la plateforme pour ce pays, ce moyen et ce sens (taux du partenaire de paiement + marge de la plateforme + TVA lorsqu'elle s'applique) ; à défaut de ligne pour votre pays, la ligne « tous pays » s'applique.
Le barĂšme applicable Ă votre application vous est communiquĂ© par le support Redacok et peut ĂȘtre personnalisĂ© pour votre application, sĂ©parĂ©ment pour l'encaissement et pour l'envoi.
Qui assume les frais : réglage « Qui assume les frais » du tableau de bord, par application.
| Exemple avec 1 % de frais sur 10 000 FCFA | Marchand assume | Client (ou destinataire) assume |
|---|---|---|
| Encaissement | le client paie 10 000 ; le wallet reçoit 9 900 | le client paie 10 100 ; le wallet reçoit 10 000 |
| Envoi | le destinataire reçoit 10 000 ; le wallet est débité de 10 100 | le destinataire reçoit 9 900 ; le wallet est débité de 10 000 |
Autres rĂšgles :
- Les montants sont à 2 décimales au maximum ; les frais sont arrondis au centiÚme. Les opérateurs travaillent en FCFA entiers.
- Si les frais à la charge du destinataire sont supérieurs ou égaux au montant envoyé, l'envoi est refusé (« Montant trop faible : il ne couvre pas les frais d'envoi. »).
- Il n'y a ni abonnement, ni frais fixe mensuel, ni minimum mensuel pour une application.
- Un paiement refusé, expiré ou un envoi refusé par l'opérateur n'entraßne aucun frais.
9. Mode Sandbox et mode Réel
- Toute application démarre en Sandbox (essais). Le Sandbox utilise de l'argent réel : chaque transaction de test, entrante ou sortante, est limitée à 200 FCFA (un montant supérieur est refusé).
- Il faut au moins 3 paiements de test réussis (tous moyens de paiement confondus) pour pouvoir demander le passage en Réel.
- La demande est validée manuellement par la direction de Redacok. à l'approbation, les fonds de test en séquestre sont libérés vers le wallet disponible.
- En mode Réel : plus de limite de test (les plafonds des opérateurs et des banques restent applicables), la clé secrÚte n'est plus consultable (conservez-la) et la liste blanche d'IP (si définie) s'applique à vos appels.
- Une application en mode Réel ne peut pas revenir en Sandbox. Pour séparer test et production, créez deux applications.
- AprÚs le passage en Réel, contactez le support pour activer tous les moyens de paiement nécessaires (partie 2, étape 6).
10. Webhooks et idempotence
Webhooks (notification automatique des paiements reçus)
L'URL (obligatoirement en https://) se configure dans le tableau de bord, section de l'application. Une seule adresse par application.
RequĂȘte envoyĂ©e par Redacok : POST JSON avec les en-tĂȘtes X-Redacok-Timestamp (secondes Unix) et X-Redacok-Signature.
{ "paiementId": "uuid", "statut": "APPROUVE", "montant": "5000.00", "applicationId": "uuid" }statut vaut APPROUVE (payé), REJETE (refusé) ou EXPIRE (paiement non validé dans les 5 minutes). Pour un paiement Mobile Money ou carte que l'opérateur n'a pas encore confirmé, aucun webhook n'est envoyé tant que le résultat n'est pas connu : utilisez la consultation de statut (partie 4).
VĂ©rification de la signature â HMAC-SHA256
signature = HMAC_SHA256( cle = secret_de_webhook,
message = timestamp + "." + corps_brut_de_la_requete )Résultat encodé en hexadécimal minuscule. Utilisez le corps brut exact reçu (pas un JSON reconstruit).
Exemple Node.js (Express) :
const crypto = require('crypto');
app.post('/webhook', express.raw({ type: 'application/json' }), (req, res) => {
const ts = req.header('X-Redacok-Timestamp');
const recu = req.header('X-Redacok-Signature') || '';
const attendu = crypto.createHmac('sha256', process.env.REDACOK_SECRET_WEBHOOK)
.update(ts + '.' + req.body.toString('utf8')).digest('hex');
const ok = recu.length === attendu.length &&
crypto.timingSafeEqual(Buffer.from(recu), Buffer.from(attendu));
if (!ok || Math.abs(Date.now() / 1000 - Number(ts)) > 300) return res.sendStatus(401);
const evenement = JSON.parse(req.body.toString('utf8'));
// traiter evenement.paiementId / evenement.statut (de façon idempotente)
res.sendStatus(200);
});Bonnes pratiques :
- rejetez les requĂȘtes dont le timestamp s'Ă©carte de plus de 5 minutes (anti-rejeu, Ă implĂ©menter de votre cĂŽtĂ©) ;
- répondez vite (
200) : Redacok attend 10 secondes au maximum votre réponse ; - Renvoi automatique : si votre serveur ne répond pas
2xxdans les 10 secondes (ou est injoignable), Redacok rĂ©essaie aprĂšs 1 minute, 5 minutes, 30 minutes puis 2 heures (5 tentatives au total, chacune re-signĂ©e avec un timestamp neuf), puis abandonne. Votre traitement doit donc ĂȘtre idempotent ; - il n'y a pas de rejeu manuel : la consultation de statut reste votre filet de sĂ©curitĂ© ;
- ne marquez une commande comme payée que sur
APPROUVE(webhook vérifié ou consultation du statut), jamais sur la seule redirection du navigateur du client.
Idempotence (éviter les doubles opérations)
Pour initier, envoyer et envoyer-externe, envoyez une clĂ© unique par opĂ©ration (en-tĂȘte Idempotency-Key ou champ idempotency_key).
- MĂȘme clĂ© et mĂȘmes paramĂštres : vous recevez le mĂȘme rĂ©sultat sans nouvelle opĂ©ration.
- MĂȘme clĂ© avec des paramĂštres diffĂ©rents : erreur
409. - MĂȘme clĂ© pendant qu'une premiĂšre requĂȘte est encore en cours : erreur
409, réessayez un peu plus tard.
11. Sécurité
- Liste blanche d'IP (optionnelle, mode RĂ©el) : ajoutez l'adresse IPv4 publique de votre serveur dans le tableau de bord (vous pouvez aussi en retirer). Elle s'applique Ă
initier,envoyeretenvoyer-externe. Liste vide : aucune restriction. Si elle contient au moins une adresse, tout appel venant d'une autre IP reçoit une erreur403: vos appels doivent alors partir d'une IP fixe. - Rotation des clĂ©s : « RĂ©gĂ©nĂ©rer la clĂ© secrĂšte » et « RĂ©gĂ©nĂ©rer le secret de webhook » (tableau de bord) fonctionnent Ă tout moment, mĂȘme aprĂšs le passage en RĂ©el. L'ancienne valeur est invalidĂ©e immĂ©diatement : prĂ©parez la mise Ă jour de votre serveur avant de rĂ©gĂ©nĂ©rer.
- Gardez la clé secrÚte cÎté serveur uniquement.
- Vérifiez toujours la signature des webhooks et le timestamp avant de livrer une commande.
- Redacok contrĂŽle la signature d'un paiement par le PIN du compte du client : vous ne manipulez jamais de code PIN.
12. Erreurs
Une erreur renvoie un code HTTP et un champ message.
| Code | Message (début) | Cause et action |
|---|---|---|
| 401 | « Cle publique invalide⊠» / « Cle secrete invalide. » | clés erronées (attention aux espaces) |
| 403 | « Cette application a ete desactivee. » | application désactivée : contactez le support |
| 403 | « Adresse IP non autorisee pour cette application. » | liste blanche d'IP : ajoutez l'IP de votre serveur |
| 400 | « Montant invalide. » | format du montant (partie 3) |
| 400 | « Le moyen de paiement X n est pas active pour cette application. » | activez ce moyen dans le tableau de bord |
| 400 | « Le moyen de paiement X est momentanement indisponible pour cette application. Aucun montant n'a ete debite⊠» | le moyen n'est pas encore ouvert pour votre application, ou l'opérateur refuse la demande (numéro invalide, solde insuffisant du client, plafond). Vérifiez le numéro puis contactez le support si cela persiste. Rien n'est débité |
| 400 | « Aucun fournisseur actif ne supporte l'envoi pour ce moyen de paiement. » | ce moyen d'envoi n'est pas encore activé pour votre pays : contactez le support |
| 400 | « Solde du Wallet insuffisant pour cet envoi. » | rechargez le wallet (frais d'envoi compris si vous les assumez) |
| 400 | « Montant trop faible : il ne couvre pas les frais d'envoi. » | augmentez le montant |
| 400 | « Numero de compte destinataire introuvable. » | vérifiez le numéro avec verifier-destinataire |
| 400 | « Montant trop faible⊠» / « Montant trop élevé⊠» / « Plafond atteint⊠» / « Plafond journalier atteint⊠» | une rÚgle de la partie 17 est dépassée (montant minimum ou maximum, plafond par jour). Rien n'est débité |
| 400 | message sur la limite du Sandbox | en Sandbox, 200 FCFA maximum par transaction |
| 409 | « âŠcle d'idempotence⊠» | mĂȘme clĂ© avec d'autres paramĂštres, ou opĂ©ration encore en cours |
13. Questions fréquentes
Faut-il refaire une demande pour chaque moyen de paiement ? Non : activez-les dans le tableau de bord, puis, aprĂšs le passage en production, demandez au support de confirmer ceux dont vous avez besoin par pays.
Un client peut-il payer deux fois la mĂȘme rĂ©fĂ©rence ? La rĂ©fĂ©rence n'est pas imposĂ©e unique. Utilisez une clĂ© d'idempotence par opĂ©ration et gardez votre propre contrĂŽle de doublon sur referenceMarchand.
Que se passe-t-il si le client valide aprĂšs 5 minutes ? Le paiement est EXPIRE et ne peut plus ĂȘtre validĂ© : crĂ©ez-en un nouveau. Si un client a Ă©tĂ© dĂ©bitĂ© chez son opĂ©rateur alors que le paiement est expirĂ©, contactez le support avec la rĂ©fĂ©rence.
Comment rembourser un client ? Il n'y a pas d'appel de remboursement par API. Contactez le support avec le paiementId : le remboursement est traité par l'équipe habilitée. Vous pouvez aussi renvoyer de l'argent à un compte Redacok avec envoyer, ou à un numéro Mobile Money avec envoyer-externe.
Les paiements par carte passent-ils par 3D Secure ? La saisie de la carte se fait sur la page sécurisée du partenaire de paiement, qui applique ses protections. Pour les litiges de cartes, contactez le support.
Quelles devises ? Vous envoyez en XAF, ou dans une autre devise convertie en XAF par Redacok.
Peut-on utiliser un lien d'application mobile pour le retour de carte ? Oui : monapp://paiement est accepté dans urlSucces, urlAnnulation et urlEchec.
Comment savoir qu'un envoi Mobile Money est bien parti ? La réponse de envoyer-externe le confirme tout de suite (ENVOI_EFFECTUE avec la référence de l'opérateur). En cas d'échec, vous recevez une erreur et le wallet est recrédité.
OĂč voir mes paiements, envois et frais ? Dans l'historique de chaque application, dans le tableau de bord (onglet API Marchande). Un rĂ©sumĂ© horaire des opĂ©rations vous est aussi envoyĂ© par notification.
Comment connaßtre mon solde ou rapprocher ma comptabilité ? Par /paiement/solde et /paiement/historique (partie 16), ou dans le tableau de bord.
Comment vérifier un envoi aprÚs coup ? Par /paiement/statut-envoi avec votre referenceMarchand (partie 16).
Y a-t-il des limites de montant, des plafonds par jour ou un délai avant que l'argent soit disponible ? Oui, ils sont configurés par Redacok par pays, moyen de paiement et application : voir la partie 17 et la partie 6.
Existe-t-il un environnement de test sans argent réel ? Le Sandbox utilise de l'argent réel, limité à 200 FCFA par transaction.
14. Notifications cÎté marchand
Chaque application peut avoir sa propre adresse e-mail pour les notifications de transactions (onglet API Marchande). Pour ne pas vous inonder : les 5 premiÚres transactions de chaque heure sont notifiées une par une ; un résumé horaire (nombre et montants reçus, échoués, envoyés, retraits, clients ayant essayé) est ensuite envoyé par notification push.
15. Aide, support et mise en production
Pour toute question d'intégration, pour faire activer un moyen de paiement ou un pays, pour un remboursement, un retrait ou un incident (paiement approuvé mais non crédité, envoi bloqué), contactez le support Redacok depuis votre tableau de bord (espace Messagerie). Indiquez le nom de l'application, le paiementId ou la référence concernée et l'heure approximative.
AprĂšs chaque passage en production : contactez le support pour activer tous vos moyens de paiement.
16. Solde, historique et statut d'un envoi par API
Ces trois appels sont destinĂ©s Ă votre serveur (clĂ©s dans le corps JSON, mĂȘmes rĂšgles que les autres appels : liste blanche d'IP incluse). Aucune clĂ© secrĂšte ne doit ĂȘtre utilisĂ©e cĂŽtĂ© navigateur ou mobile.
POST /paiement/solde â solde du wallet
{ "clePublique": "pk_...", "cleSecrete": "sk_..." }Réponse : { "disponible": "125000.00", "enCours": "0.00", "devise": "XAF", "mode": "REEL" }. disponible est utilisable pour vos envois et retraits ; enCours est le séquestre du mode Sandbox. Montants en FCFA.
POST /paiement/historique â toutes les opĂ©rations
{ "clePublique": "pk_...", "cleSecrete": "sk_...", "sens": "SORTANT", "statut": "ENVOYE", "depuis": "2026-10-01", "jusqua": "2026-10-31", "page": 1, "limite": 50 }Tous les champs aprÚs les clés sont optionnels : sens (ENTRANT pour les paiements reçus, SORTANT pour les envois), statut (EN_ATTENTE, APPROUVE, REJETE, EXPIRE pour les paiements reçus ; ENVOYE, ECHEC pour les envois), depuis et jusqua (dates AAAA-MM-JJ, heure du Cameroun), page (à partir de 1) et limite (50 par défaut, 200 au maximum).
Réponse : { "page": 1, "limite": 50, "total": 132, "operations": [ ⊠] }, les plus récentes d'abord. Chaque opération contient : id, sens, moyen (moyen de paiement des encaissements), montant, frais, statut, referenceMarchand, destinataire (envois uniquement ; les numéros de téléphone sont masqués sauf les 4 derniers chiffres) et creeLe (date ISO). Utilisez-la pour votre rapprochement comptable. Dans le tableau de bord, l'historique de chaque application affiche les numéros complets (client, destinataire) et permet de rechercher par numéro de téléphone, numéro de compte, nom ou référence, et de filtrer par jour ou par mois.
POST /paiement/statut-envoi â retrouver un envoi
{ "clePublique": "pk_...", "cleSecrete": "sk_...", "referenceMarchand": "VOTRE-REFERENCE" }RĂ©ponse : { "envois": [ { "id": "uuid", "statut": "ENVOYE", "montant": "5000.00", "frais": "0.00", "destinataire": "*****0000", "creeLe": "âŠ" } ] }. Le statut vaut ENVOYE (l'argent est parti) ou ECHEC (refusĂ© par l'opĂ©rateur, wallet recrĂ©ditĂ©). Un envoi refusĂ© avant exĂ©cution (clĂ© invalide, solde insuffisant, plafond atteint, montant invalide) n'est pas enregistrĂ© : l'appel renvoie alors « Aucun envoi trouvĂ© pour cette rĂ©fĂ©rence ». Si votre appel d'envoi a expirĂ© chez vous sans rĂ©ponse, utilisez cet appel avant de rĂ©essayer, ou renvoyez la mĂȘme clĂ© d'idempotence.
17. Limites, plafonds et délais configurables
Redacok configure, par pays, par moyen de paiement et, si besoin, pour une application prĂ©cise, les rĂšgles suivantes. Elles peuvent ĂȘtre modifiĂ©es Ă tout moment et s'appliquent aux opĂ©rations suivantes ; la rĂšgle la plus prĂ©cise l'emporte (application, puis plateforme ; pays, puis tous pays ; moyen prĂ©cis, puis Mobile Money en gĂ©nĂ©ral, puis tous les moyens).
| RĂšgle | Effet |
|---|---|
| Montant minimum et maximum par transaction | encaissements et envois, par moyen de paiement |
| Plafond par jour et par numĂ©ro Mobile Money (SIM) | envois vers un mĂȘme numĂ©ro, tous envois confondus |
| Plafond par jour et par application | envois de votre application, vers des numéros Mobile Money ou vers des comptes Redacok |
| Délai de disponibilité | durée pendant laquelle un encaissement reste dans le solde « en cours » avant de passer au solde « disponible » (partie 6) |
Le jour s'entend à l'heure du Cameroun (minuit à minuit). Les montants sont exprimés dans la monnaie du pays concerné.
Valeurs au lancement (modifiables par Redacok, le support vous communique celles qui s'appliquent Ă votre application) :
- envois vers un numéro Mobile Money : 500 000 par numéro (SIM) et par jour, dans la monnaie du pays (par exemple 500 000 FCFA au Cameroun), quel que soit l'opérateur ;
- envois vers des comptes Redacok : 5 000 000 FCFA par jour et par application en traitement automatique ; au-delĂ , l'opĂ©ration doit ĂȘtre vĂ©rifiĂ©e et les fonds justifiĂ©s par le support Redacok.
Quand une rĂšgle est dĂ©passĂ©e, l'appel est refusĂ© avec un message explicite (« Montant trop faible », « Montant trop Ă©levĂ© », « Plafond atteint »âŠ). Rien n'est alors dĂ©bitĂ©.
Les plafonds propres aux opérateurs et aux banques (encaissements, cartes) s'ajoutent à ceux de Redacok.
