MobupayMobupay
Chargement de vos clés API…

Capturer un paiement autorisé

POSThttps://api.mobupay.nc/api/v1/payments/{id}/capture

Ce 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 (400 ORDER_CURRENCY_IMMUTABLE, l'autorisation carte porte une devise figé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é.

En-tête d'authentification
Authorization: Bearer sk_test_XXXX

Le 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ête
idstringRequispath

Identifiant du paiement (`pay_*`) en statut `authorized` ou `partially_captured`.

Corps de la requête

application/json
amountCentsintegerOptionnel

Montant à 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`.

objectOptionnel

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

200

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.

400

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 fourni (ORDER_CURRENCY_IMMUTABLE) ou order.taxAmount fourni (ORDER_TAX_AMOUNT_SERVER_COMPUTED).

404

Paiement introuvable.

Langage

Requête cURLpostExemple
1curl --request POST \
2 --url https://api.mobupay.nc/api/v1/payments/{id}/capture \
3 --header 'authorization: Bearer sk_test_XXXX' \
4 --header 'content-type: application/json' \
5 --data '{ "amountCents": 3500, "order": { "amount": 5000, "discount": 1500, "platformConfig": [ { "merchantId": "mer_restaurant", "amount": 4000, "platformCommission": { "type": "PERCENTAGE", "value": 2500 } }, { "merchantId": "mer_livreur", "amount": 1000 } ] } }'
Réponse

Cliquez sur Essayer pour lancer la requête et voir la réponse ici. Ou choisissez un exemple :

application/json