Capturer un paiement autorisé
https://api.mobupay.nc/api/v1/payments/{id}/captureCe que fait cet appel
Capture un paiement préalablement autorisé en mode MANUAL. Utile pour les plateformes ou les paiements différés (capture après expédition, fin de location...). Capture partielle possible via amountCents (entier strictement positif, inférieur au montant autorisé). Si omis, capture le montant total autorisé.
Définition de l'`order` à la capture : l'objet order peut être défini ou surchargé au moment de la capture, dans la même forme que la session. Pour un paiement de type platform sans split stocké à la création, order.platformConfig est requis ici.
Contexte de la commande : au-delà des champs de calcul (amount, discount, items, taxDetail, tips, platformConfig), la capture accepte le contexte : reference, delivery, buyer, device, invoicing. C'est le moment où ces données existent enfin (adresse de livraison confirmée, frais réels, date de remise), et c'est aussi là que le module Facturation valide et émet, en capture MANUAL. Seuls les champs fournis remplacent l'order initial, et un sous-objet fourni remplace le sous-objet entier (pas de fusion champ par champ). Deux champs sont refusés ici : order.currency quand elle diffère de la devise du paiement (400 ORDER_CURRENCY_IMMUTABLE, l'autorisation carte porte une devise figée ; la même devise, renvoyée telle quelle, est acceptée) et order.taxAmount (400 ORDER_TAX_AMOUNT_SERVER_COMPUTED, toujours recalculé par Mobupay depuis taxDetail).
Remise financée par la plateforme (« crédits ») : si order.discount est fourni, le montant capturé sur la carte doit être égal à order.amount − order.discount (la carte n'est débitée que du net) et la somme des order.platformConfig[].amount doit être égale à order.amount (le split couvre le total commande). La plateforme abonde alors le complément vers le séquestre.
Promotion financée par la plateforme au-dessus de l'autorisation (top-up) : en mode platform, order.amount peut DÉPASSER le montant autorisé à condition que la remise plateforme couvre l'excédent, pourboires inclus : (order.amount − order.discount) + Σ tips ≤ montant autorisé. Cas d'usage : n'autoriser que le net client à la commande, puis distribuer à la capture le montant plein aux sous-marchands (la plateforme absorbe la promotion). La carte n'est JAMAIS débitée au-delà de l'empreinte : le montant EUR débité est exactement l'EUR déjà autorisé (aucune dérive d'arrondi XPF→EUR, le complément plateforme absorbe la conversion). Sinon → 400 CAPTURE_AMOUNT_EXCEEDS_AUTHORIZED_UNFUNDED. Voir la section Cas d'usage (/docs/usecases/distant/plateforme/cas-particuliers).
Capturer MOINS que le montant autorisé : c'est permis, à condition de dire ce qui est capturé. Redéfinissez l'order avec son détail — order.platformConfig en mode plateforme, order.items en direct — dont les montants doivent totaliser order.amount. Exemple : commande de 5 000 partiellement livrée, on capture 3 000 en envoyant order.amount: 3000 et le platformConfig correspondant. Le débit carte se déduit alors de l'order (amount − discount + Σ tips) : amountCents est facultatif, et s'il est fourni il doit concorder exactement, sinon 400 CAPTURE_AMOUNT_MISMATCH. Le paiement passe en capture partielle et reste re-capturable. Un `order.amount` simplement plus petit, sans détail, est refusé (400 CAPTURE_AMOUNT_BELOW_AUTHORIZED) : une baisse doit être justifiée, jamais muette.
Pourboire non réduit : sur une capture partielle ou un règlement partiel, les pourboires sont versés à leur montant plein et la baisse est absorbée par les parts de marchandise. Un pourboire ne diminue pas parce qu'un article manque.
Pourboire déjà inclus dans l'autorisation : le cas le plus courant, quand vous autorisez le total pourboire compris. Déclarez-le par order.platformConfig[].tips sur l'entrée du sous-marchand qui le reçoit (le livreur), ce qui suppose de le sortir de order.amount. Le brut passe alors sous le montant autorisé, et c'est normal : la couverture est appréciée sur le débit carte, order.amount − order.discount + Σ tips, qui doit égaler exactement l'autorisé. Exemple : empreinte 5 000 (panier 4 000 + livraison 700 + pourboire 300) → order.amount: 4700, platformConfig: [{resto, 4000}, {livreur, 700, tips: 300}]. N'ajoutez jamais le pourboire à l'`amount` de l'entrée : la somme versée serait la même, mais votre commission plateforme se calculerait dessus, alors qu'un pourboire n'est pas commissionné.
E-commerce direct : besoin équivalent déjà couvert sans top-up — order.amount y est le net des remises (amount = Σ items − discounts) : ajoutez des articles avec une remise qui compense en gardant order.amount égal au montant autorisé.
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.
Paramètres
1 en-têteidstringRequispathIdentifiant du paiement (`pay_*`) en statut `authorized` ou `partially_captured`.
Corps de la requête
application/jsonamountCentsintegerOptionnelMontant à capturer (net carte) dans la devise d'origine du paiement (XPF francs ou EUR cents, comme `order.currency` à la création). Si omis, capture le montant total autorisé. En présence d'un `order.discount`, doit valoir `order.amount − order.discount`.
closeAuthorizationbooleanOptionnelVrai : après une capture partielle, rend au client la part de l'autorisation qui n'a pas été capturée, juste après la capture. La capture reste acquise même si cette libération échoue : la réponse porte alors `authorizationClosed.released: false` et son code, et la libération se rejoue par `POST /api/v1/payments/{id}/release`. Absent ou faux : le reliquat reste réservé jusqu'à l'expiration de l'autorisation (moins de 7 jours).
Objet `order` à définir/surcharger à la capture (forme array). Tous les champs sont optionnels : seuls les champs fournis surchargent l'order initial.
Codes de retour
Capture effectuée. La réponse inclut settlement (commission Mobupay et net de la transaction) et, pour les paiements platform, platformDistribution (redistribution par sous-marchand : montant brut versé, commission plateforme prélevée, montant net versé). Montants exprimés dans la devise d'origine du paiement (currency).
Si une facture était demandée, la réponse porte aussi invoicing : { requested, issued, skippedReason?, blockers? }. Une capture réussit toujours, même quand la facture n'a pas pu être émise (un encaissement acquis ne doit pas être remis en cause par un document manquant) : issued: 0 avec un skippedReason signale ce cas, blockers nommant les champs à compléter. La facture reste émissible à la main depuis votre espace.
Statut invalide (paiement non authorized), mode AUTO, platformConfig manquant (PLATFORM_CONFIG_REQUIRED_NET0 pour un paiement à net 0), montant capturé ≠ order.amount − order.discount (+ pourboires) (CAPTURE_AMOUNT_MISMATCH), order.amount redéfini à la capture < montant autorisé (CAPTURE_AMOUNT_BELOW_AUTHORIZED — réduire le net uniquement via order.discount, pas de sous-capture sèche), ou order.amount > montant autorisé sans remise plateforme couvrant l'excédent (CAPTURE_AMOUNT_EXCEEDS_AUTHORIZED_UNFUNDED — top-up : (order.amount − order.discount) + Σ tips doit rester ≤ autorisé). Également : order.currency différente de la devise du paiement (ORDER_CURRENCY_IMMUTABLE) ou order.taxAmount fourni (ORDER_TAX_AMOUNT_SERVER_COMPUTED).
Paiement introuvable.
L'acquéreur n'a pas confirmé la capture (MONEXT_CAPTURE_FAILED). Quand sa réponse n'arrive pas, Mobupay relit la transaction chez lui avant de conclure : une capture faite est rendue comme un succès, une capture absente est rejouée une fois. details.retryable vaut true seulement si cette relecture a établi que rien n'a été capturé : vous pouvez alors rejouer. Il vaut false pour un refus de l'acquéreur, ou quand l'état n'a pas pu être lu : lisez le paiement (GET /api/v1/payments/{id}) avant de capturer à nouveau.
Langage
Cliquez sur Essayer pour lancer la requête et voir la réponse ici. Ou choisissez un exemple :
application/json