Aller au contenu principal

Dépôts & retraits

Un dépôt débite le compte mobile money d'un client et crédite votre wallet. Un retrait débite votre wallet et crédite le compte mobile money d'un bénéficiaire.

Les deux opérations sont asynchrones : l'API répond immédiatement 202 avec une transaction processing, puis vous notifie du résultat final par webhook.

StatutSignification
processingL'opération est transmise à l'opérateur, en attente de confirmation
completedL'opération a abouti, le solde du wallet est mis à jour
failedL'opération a échoué, aucun mouvement de fonds

Initier un dépôt​

POST/api/v1/business/mobile-money/deposits
ParamètreTypeRequisDescription
amountstringOuiMontant en centièmes de la devise ("10000" = 100 XAF), entier positif sans zéro initial. Multiple de 100 pour une devise sans décimales
currency_codestringOuiCode de devise ISO 4217 ; un wallet actif doit exister dans cette devise
phone_numberstringOuiNuméro du payeur au format international, chiffres uniquement, sans + (8 à 15 chiffres)
providerstringOuiCode opérateur obtenu via Moyens de paiement
idempotency_keystring (UUID)OuiIdentifiant unique de la tentative — voir Idempotence
pinstringOuiQuatre chiffres ; attendu par le format de la requête mais non vérifié pour un appel authentifié par clé API
country_codestringNonCode pays ISO 3166-1 alpha-3, par exemple COD
curl -X POST https://api.trustsend.africa/api/v1/business/mobile-money/deposits \
-H "Authorization: Bearer $REEMITE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"amount": "50000",
"currency_code": "CDF",
"phone_number": "243813456789",
"provider": "VODACOM_MPESA_COD",
"idempotency_key": "7d6b1da7-654f-4760-915c-0a48e677316f",
"pin": "0000"
}'

Réponse 202

{
"data": {
"deposit_id": "TXN-VSWC4SQ2",
"status": "processing",
"created_at": "2026-09-12T10:00:00.000+00:00",
"authorization": null
}
}

authorization contient, lorsque l'opérateur l'exige, les instructions de validation à présenter au payeur (confirmation par code, étapes USSD, lien rapide). Il vaut null si aucune action particulière n'est nécessaire.

"authorization": {
"pinPrompt": "MANUAL",
"pinPromptRevivable": false,
"channels": [
{
"type": "USSD",
"displayName": { "fr": "Code USSD" },
"quickLink": null,
"steps": { "fr": ["Composez *150#", "Choisissez « Paiements en attente »", "Confirmez avec votre code secret"] }
}
]
}

Erreurs

CodeCause
403Fonctionnalité mobile_money.deposits non incluse dans votre offre
404Aucun wallet actif dans la devise demandée — créez-en un
409idempotency_key déjà utilisée avec un contenu de requête différent
422Devise ou opérateur non pris en charge, ou montant en dehors des bornes de l'opérateur
503Réseau de paiement temporairement indisponible — réessayez avec la même idempotency_key

Initier un retrait​

POST/api/v1/business/mobile-money/payouts

Les paramètres sont identiques à ceux du dépôt ; phone_number désigne le numéro du bénéficiaire.

Réponse 202

{
"data": {
"payout_id": "TXN-K2P9QD7M",
"status": "processing",
"created_at": "2026-09-12T10:05:00.000+00:00"
}
}

Erreurs — en plus de celles du dépôt :

CodeCause
400Plafond de transaction du wallet dépassé
402Solde du wallet insuffisant

Consulter une opération​

GET/api/v1/business/mobile-money/deposits/:id
GET/api/v1/business/mobile-money/payouts/:id

Renvoie le statut enregistré par Reemite.

Réponse 200

{
"data": {
"deposit_id": "TXN-VSWC4SQ2",
"status": "completed",
"created_at": "2026-09-12T10:00:00.000+00:00",
"completed_at": "2026-09-12T10:00:42.000+00:00"
}
}

Erreurs : 403 si l'opération appartient à un autre compte, 404 si elle est introuvable.

Vérifier le statut en temps réel​

GET/api/v1/business/mobile-money/deposits/:id/live-status
GET/api/v1/business/mobile-money/payouts/:id/live-status

Interroge le réseau de paiement à l'instant de l'appel. Lorsqu'un statut final est obtenu, la transaction est mise à jour immédiatement. L'appel est idempotent : il ne crédite ni ne débite jamais deux fois.

À utiliser lorsqu'une opération reste processing plus longtemps que prévu, par exemple si un webhook n'a pas été reçu.

Réponse 200

{
"data": {
"deposit_id": "TXN-VSWC4SQ2",
"local_status": "completed",
"live_status": "COMPLETED",
"provider_transaction_id": "8f3c2a91-4b7e-4d2a-9c61-0e5d7b1a2f44",
"failure_reason": null
}
}
ChampDescription
local_statusStatut enregistré par Reemite après la vérification
live_statusStatut remonté en temps réel par le réseau de paiement
provider_transaction_idRéférence de l'opération côté opérateur, utile en cas de réclamation
failure_reasonMotif de l'échec, null si l'opération n'a pas échoué

Erreurs : 503 si le réseau de paiement est indisponible ou n'a pas encore enregistré l'opération.

astuce

Appuyez-vous en priorité sur les webhooks pour connaître le résultat d'une opération. Réservez cet endpoint aux vérifications ponctuelles plutôt qu'à une interrogation en boucle.