Créer une transaction
Cette opération enregistre une demande de paiement pour le compte authentifié et renvoie les références à conserver. Le statut renvoyé à la création n’est pas définitif : vérifiez toujours le statut final côté serveur, avec Consulter une transaction ou via les webhooks, avant de livrer une commande. Le compte doit être validé pour l’environnement ciblé : dans le cas contraire, l’API répond403
sans créer de transaction.
En-têtes et environnements
Sandbox et Live sont deux comptes distincts, avec des clés distinctes : une clé Sandbox utilisée avecIpay-Target-Environment: live est refusée, et inversement. Voir
Authentification pour obtenir et stocker ces clés.
Paramètres
transaction_id est votre propre référence de commande. Elle doit être unique pour votre compte :
c’est elle que vous retrouverez ensuite sous le nom external_reference, et elle est acceptée
comme identifiant de recherche par Consulter une transaction.
Exemple de requête
Les valeurs du corps d’exemple sont celles du contrat OpenAPI, prévues pour l’environnement Sandbox : remplacez-les par vos propres valeurs. La commande n’aboutit pas tant que les variables listées ci-dessus ne sont pas renseignées.Réponse et champs
Conservezreference : c’est l’identifiant iMoney Encaissement de la transaction, accepté par les opérations de
consultation. public_reference est la référence affichable à votre client.
Erreurs et limites
- Doublons. Il n’existe pas d’en-tête de clé d’idempotence. La création applique une détection
de doublon au niveau applicatif sur
external_reference— c’est-à-dire sur la valeur dutransaction_idque vous envoyez : en Live, un second appel avec la même valeur reçoit422({"status": "failed", "message": "External Reference Not Valid"}) et ne crée pas de seconde transaction. En Sandbox, la réponse à un doublon n’est pas garantie identique à celle du Live : le refus y passe par un autre chemin de code et la forme exacte de la réponse n’est pas établie — à confirmer auprès du support avant d’en faire une assertion de test automatisé. Dans les deux environnements, la seconde transaction n’est pas créée. Cette détection n’est pas garantie sous appels concurrents : deux requêtes envoyées au même instant avec le mêmetransaction_idpeuvent toutes les deux réussir. Rejouer un appel resté sans réponse avec le mêmetransaction_idn’est donc pas une opération sûre par construction. Recommandation (et non comportement garanti par l’API) : générez untransaction_idunique par tentative, et vérifiez le statut avec Consulter une transaction avant de retenter une transaction dont vous n’avez pas reçu la réponse. - Méthode de paiement. Cette opération ne prend en charge que
Ipay-Payment-Type: mobile(mobile money). Les autres moyens de paiement sont disponibles via les liens de paiement : voir la liste des moyens de paiement. - Montant minimum. Il est de
25XOF en Live pourmobile. Le minimum appliqué en Sandbox diffère : voir Sandbox. - Limitation de débit. Aucune limite de débit n’est documentée dans le contrat de l’API à ce jour — à confirmer auprès du support avant un envoi massif.
- La liste complète des messages d’erreur communs à toutes les opérations est regroupée dans Erreurs.
Consulter une transaction
Utilisez cette opération pour connaître le statut réel d’une transaction, plutôt que de vous fier au statut renvoyé à la création : c’est elle (ou un webhook) qui doit déclencher la livraison d’une commande, jamais la réponse de Créer une transaction.Paramètres
La référence dans l’URL accepte deux valeurs interchangeables : la référence interne renvoyée par iMoney Encaissement à la création, ou votre propretransaction_id (retrouvé sous le nom
external_reference dans les réponses). Inutile de conserver les deux si vous ne gardez que
transaction_id côté marchand.
Exemple de requête
Les variables d’environnement et la référence à substituer sont celles utilisées pour créer la transaction d’origine.Réponse et champs
Le statut renvoyé fait partie du même cycle de vie que celui utilisé à la création : une transactionpending peut encore devenir succeeded, failed ou refunded. Attendez un statut définitif (ou
un webhook) avant de considérer la vérification terminée.
Erreurs et limites
Une référence qui ne correspond à aucune transaction du compte authentifié renvoie404, y compris si
elle existe pour un autre compte ou un autre environnement (Sandbox/Live). La liste complète des
messages d’erreur communs (en-têtes, authentification) est dans
Erreurs.
Lister les transactions
Utile pour une vue d’ensemble ou une réconciliation périodique. Pour vérifier une transaction précise que vous venez de créer, préférez Consulter une transaction, plus direct et qui accepte votre propretransaction_id.
Paramètres
query filtre en texte libre ; les autres paramètres filtrent sur une valeur exacte ou une plage
de dates. Combinez-les librement : ils s’appliquent tous en même temps (ET logique), pas en
alternative.
Exemple de requête
L’exemple n’illustre qu’un sous-ensemble des filtres disponibles ; ajoutez ou retirez des paramètres de requête selon vos besoins.Réponse et champs
Les valeurs destatus et payment_method (voir les moyens de paiement) de cette liste sont mises en forme pour l’affichage et
ne correspondent pas aux valeurs machine utilisées par les autres opérations (ex.
Consulter une transaction) : ne les comparez pas directement dans votre
code, n’utilisez cette liste que pour de l’affichage ou de l’export.
Erreurs et limites
Aucune limite de débit n’est documentée pour cette opération à ce jour — à confirmer auprès du support avant un usage intensif (sondage fréquent, export massif). Pour un suivi en temps réel d’une transaction donnée, préférez les webhooks à un sondage répété de cette liste. Messages d’erreur communs : Erreurs.Sandbox
L’environnement Sandbox utilise les mêmes opérations que le Live, avec une clé Sandbox etIpay-Target-Environment: sandbox ; aucune transaction réelle n’est déclenchée. Les requêtes elles-mêmes
ne sont pas répétées ici : reprenez l’exemple de requête de « Créer une transaction »
et celui de « Consulter une transaction », et remplacez
seulement les valeurs par celles ci-dessous.
Numéros de test mobile
PourIpay-Payment-Type: mobile en Sandbox, seuls les dix numéros ci-dessous sont acceptés et
simulent chacun un résultat fixe. Tout autre msisdn sur ce type renvoie
400 Bad Request: Incorrect MSISDN, même bien formé : ce n’est pas un simulateur générique
acceptant n’importe quel numéro.
« Erreur », « Fonds insuffisants » et « Refusé » partagent le même statut final
failed : l’API
n’expose pas de sous-catégorie supplémentaire dans le champ status pour distinguer ces trois cas.
Les deux numéros de mise en attente ne restent pas indéfiniment pending : ils passent
automatiquement à succeeded après une résolution différée d’environ 90 secondes — ce n’est ni un
état bloqué à corriger manuellement, ni un résultat aléatoire.
Montant minimum en Sandbox
Pourmobile, le minimum accepté en Sandbox est de 50 XOF, alors que le minimum Live du même
type est de 25 XOF. Un montant compris entre 25 et 49 XOF est donc refusé en Sandbox alors
qu’il serait accepté en Live : n’en déduisez pas le comportement de production, et testez votre
gestion d’erreur avec un montant clairement inférieur aux deux seuils.
Cas à couvrir avant la production
Traitez l’erreur de validation comme une erreur de saisie côté client, pas comme un incident à
relancer automatiquement. La liste complète des codes et messages est dans
Erreurs.
