Créer un paiement direct
https://api.mobupay.nc/api/v1/payments/directCe que fait cet appel
Débite directement une carte tokenisée d'un client (paiement one-click). Le client doit avoir un wallet et un paymentMethod actif. Précisez `initiator` : si vous prélevez sans que le porteur soit devant l'écran, échéance d'abonnement ou solde de fin de mois, envoyez initiator: merchant. Le débit est alors déclaré comme initié par le marchand, ce qu'attendent les réseaux, et le transfert de responsabilité s'applique si la carte a été enrôlée chez nous avec authentification.
En captureMode: "AUTO" (défaut), la capture est acquise dès cet appel : la réponse rend status: "captured" et capturedAt, sans qu'aucune scrutation ne soit nécessaire. Les webhooks payment.authorized et payment.captured sont émis dans la foulée, puis payment.settled au règlement, quand la commission devient définitive.
Pour les scénarios plateforme et le financement plateforme, voir la section Cas d'usage (/docs/usecases/distant).
Si vous exploitez plusieurs boutiques sur un même compte, storeId rattache l'encaissement à l'une d'elles : guide « Plusieurs boutiques » (/docs/guides/boutiques).
Authorization: Bearer sk_test_XXXXLe pool est déduit du préfixe de la clé
Il n'y a pas d'interrupteur test et production sur cette page. sk_test_* ne traite aucun paiement réel, sk_live_* encaisse.
Corps de la requête
application/jsonstoreIdstringOptionnelBoutique à laquelle rattacher cet encaissement. Accepte l'identifiant (`sto_*`) **ou le code** de la boutique, celui que vos propres systèmes connaissent déjà. **Champ de premier niveau** : à côté de `externalId`, jamais à l'intérieur de `order`. Une clé inconnue placée dans `order` est écartée en silence, et le paiement partirait alors sur le contrat par défaut sans qu'aucune erreur ne vous prévienne. Facultatif. Si votre clé API est déjà rattachée à une boutique, elle fait autorité et vous n'avez rien à transmettre : le corps peut la répéter, jamais la contredire (`STORE_KEY_MISMATCH`). Une boutique inconnue (`UNKNOWN_STORE`), désactivée (`STORE_INACTIVE`) ou déclarée point de vente physique (`STORE_KIND_MISMATCH`) fait échouer l'appel : elle n'est jamais ignorée. Vos boutiques se créent depuis votre espace marchand, Paramètres puis « Mes offres ». Voir le guide « Plusieurs boutiques » (/docs/guides/boutiques).
merchantConfigIdstringOptionnel**Usage avancé.** Contrat d'encaissement à employer (`mcf_*`), désigné directement. Ce champ reste accepté, mais la voie normale est la boutique : `storeId`, ou une clé API rattachée à une boutique, désigne le contrat sans que vous ayez à le nommer. Facultatif : absent, le contrat actif par défaut s'applique. Si l'appel et la boutique désignent deux contrats différents, l'appel est refusé (`STORE_CONTRACT_CONFLICT`) : Mobupay n'arbitre jamais en silence entre deux contrats, puisque le choix décide du libellé porté au relevé du client et de la ventilation des fonds.
Détail de la commande à payer. Voir sous-objets `items`, `taxDetail`, `platformConfig`, `delivery`.
initiatorstringOptionnelQui déclenche ce prélèvement. `customer` (défaut) : le porteur est devant l'écran et l'a demandé. `merchant` : vous prélevez sans lui, depuis une tâche de fond — une échéance d'abonnement, un solde de fin de mois. Le débit part alors en transaction initiée par le marchand et cite la transaction qui a enrôlé la carte. Déclarer `customer` pour un débit que le porteur n'a pas demandé est une déclaration inexacte, et elle se paie sur les taux d'acceptation. **Le transfert de responsabilité s'applique** dès lors que la carte a été enrôlée chez nous avec authentification : Mobupay rejoue cette authentification sur chaque prélèvement, et la transaction porte alors `liabilityShift`. Une carte enrôlée avant septembre 2026 n'en a pas : le prélèvement aboutit, mais le risque de contestation reste chez vous.
captureModestringOptionnelAUTO (défaut) = autorisation et capture dans le même appel : la réponse rend directement `status: "captured"` avec `capturedAt` renseigné, et vous recevez `payment.authorized` puis `payment.captured`. MANUAL = autorisation seule : `status: "authorized"`, `capturedAt` nul, capture à demander via `POST /payments/{id}/capture`. En MANUAL, l'autorisation a une durée de validité limitée (moins de 7 jours côté réseau carte) : sans capture dans ce délai, le client n'est jamais débité.
Identifie la carte tokenisée à débiter.
externalIdstringOptionnelIdentifiant externe du paiement côté marchand (sert d'idempotence sur les doublons). Max 255 caractères.
isInclTaxAmountbooleanOptionnelLe montant `order.amount` inclut les taxes (TTC). Défaut `true`.
languageCodestringOptionnelCode langue (2 a 5 caractères). Défaut `fr`.
notificationUrlstringOptionnelURL HTTPS de votre webhook (optionnel) : Mobupay y envoie (POST signé) `payment.authorized`, puis `payment.captured` si `captureMode` valait AUTO. Livrée en complément des endpoints webhook enregistrés. Si absent et aucun endpoint enregistré, seule la réponse HTTP indique le résultat (201 succès, 402 refus).
privateDataobjectOptionnelDonnées privees libres conservées côté Mobupay.
Codes de retour
Paiement créé et exécuté. store restitue la boutique retenue (null si l'encaissement n'en porte aucune). En environnement de test, storeContractIgnored: true signale que le contrat rattaché à la boutique n'a pas été employé : ce pool n'en compte qu'un seul.
Paramètres invalides. Sur la boutique : UNKNOWN_STORE (aucune boutique ne porte cet identifiant ni ce code), STORE_INACTIVE (boutique désactivée), STORE_KIND_MISMATCH (point de vente physique, il n'encaisse pas à distance), STORE_CONTRACT_INACTIVE (le contrat rattaché à la boutique n'est plus actif), STORE_CONTRACT_CONFLICT (l'appel et la boutique désignent deux contrats différents), STORE_KEY_MISMATCH (la clé API est rattachée à une autre boutique que celle demandée).
Paiement refusé par l'acquéreur (provision insuffisante, opposition, etc.). La ressource paiement est bien créée (traçabilité) : le corps est identique au 201 avec status: "failed". Ne vous fiez jamais au seul corps de réponse : un code HTTP 402 signifie qu'aucun fonds n'a été encaissé.
Customer ou paymentMethod introuvable.
Langage
Cliquez sur Essayer pour lancer la requête et voir la réponse ici. Ou choisissez un exemple :
application/json