Skip to main content
POST
Encaisser un paiement
Essayez avec une clé sandbox (mp_sandbox_…) : aucun argent réel ne bouge. Voir Test et production.
payment_method choisit le canal : mobile_money (par défaut) ou card. Pour la carte, le plus simple est la page hébergée, voir Accepter un paiement. Une carte dans votre propre formulaire se met en place avec notre équipe : écrivez au support.
Un opérateur mobile money ne déplace que la devise de son pays. Si currency est différente, le montant est converti avant l’encaissement et la réponse donne le montant réellement prélevé, dans la devise de l’opérateur. Exemple : 1000 XAF vers MTN_MOMO_RWA encaisse en RWF, et la réponse renvoie "currency": "RWF". Sans taux disponible, la requête répond 422.

Un paiement qui échoue

La création répond toujours 201, même si le paiement échoue ensuite chez l’opérateur. Vous l’apprenez par le webhook payment.failed ou en relisant le paiement : status passe à failed et failure_code donne la raison.

failure_code

Un code stable, en anglais et en minuscules, à tester dans votre code. failure_reason est un texte en français à afficher, pas à comparer. Cette liste peut s’enrichir, mais un code ne change jamais de sens. Traitez un code inconnu comme un échec générique. Une carte refusée peut encore réussir si le client réessaie, voir L’objet paiement.

next_action

Toujours présent. null quand il n’y a rien de plus à faire (le mobile money aujourd’hui). Avec payment_method: "card", type vaut card_payment et client_secret confirme le paiement depuis votre formulaire. Décidez selon type : un futur moyen de paiement pourra ajouter le sien.

Authorizations

Authorization
string
header
required

Votre clé API. Utilisez une clé sandbox (mp_sandbox_…) pour essayer : aucun argent réel ne bouge.

Headers

Idempotency-Key
string
required

Obligatoire ici. Une clé unique par opération : la rejouer pendant 24 heures renvoie la même réponse sans rien créer de plus. Voir Idempotence.

Maximum string length: 255

Body

application/json
amount
integer
required

Montant en unités mineures, au moins 1. Voir Montants et devises.

Required range: x >= 1
currency
string
required

Code devise ISO 4217 de 3 lettres, par exemple XAF. En mobile money, convertie vers la devise de l'opérateur si besoin.

Required string length: 3
payment_method
enum<string>
default:mobile_money

Canal, mobile_money par défaut

Available options:
mobile_money,
card
country
string

Obligatoire en mobile money. Pays ISO 3166-1 alpha-3, par exemple CMR.

Required string length: 3
provider
string

Obligatoire en mobile money. Code opérateur, par exemple MTN_MOMO_CMR. Voir Pays et opérateurs.

phone
string

Obligatoire en mobile money. Numéro avec indicatif, par exemple 237680000000. Les espaces et le + sont retirés, un numéro local est complété avec l'indicatif du pays.

Maximum string length: 20
payer_name
string

Nom du payeur

Maximum string length: 255
payer_email
string<email>

E-mail du payeur

Maximum string length: 255
description
string

500 caractères maximum. Les 22 premiers, sans accents, forment le message que l'opérateur montre au client.

Maximum string length: 500
metadata
object

Vos données libres (jusqu'à 50 clés, valeurs de 500 caractères au plus), renvoyées dans les réponses et les webhooks. Par exemple votre numéro de commande.

Response

Paiement créé. Il reste pending jusqu'au webhook payment.succeeded ou payment.failed.

data
object