MobupayMobupay
Chargement de vos clés API…

Rembourser ou annuler un paiement

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

Ce que fait cet appel

Rembourse tout ou partie d'un paiement capturé (crédit réel vers la carte), ou annule (void) une autorisation non encore capturée (aucun débit n'a eu lieu). L'opération est déterminée automatiquement par l'état du paiement. amountCents est optionnel, exprimé dans la devise d'origine du paiement : absent = remboursement/annulation de ce qui reste.

Plusieurs remboursements partiels : un paiement se rembourse en une ou plusieurs fois (un article, puis un autre), jusqu'au montant payé. Chaque réponse indique le cumul remboursé (totalRefundedAmount) et ce qui reste (remainingAmount), dans la devise d'origine ; GET /api/v1/payments/{id} les donne aussi (refundedAmount, refundableAmount). Le remboursement qui solde le paiement le fait passer refunded, même s'il est lui-même partiel.

Mobupay émet le webhook correspondant : payment.partially_refunded tant qu'il reste un montant, payment.refunded au solde, payment.cancelled pour une annulation. Pour les modes de financement plateforme (marchand absorbe / plateforme absorbe / split) et le cas net carte = 0, voir la section Cas d'usage (/docs/usecases/distant/plateforme/cas-particuliers).

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`, `captured` ou `partially_refunded`.

Corps de la requête

application/json
Type de commande
amountCentsintegerOptionnel

Montant à rembourser dans la devise d'origine du paiement (XPF francs ou EUR cents, comme `order.currency`). **Optionnel** : absent ⇒ remboursement/annulation de ce qui reste. Ne peut pas excéder ce qui reste à rembourser.

reasonstringOptionnel

Motif libre du remboursement (max 500 caractères). Conservé dans `audit_log`.

platformConfigarray[object]Optionnel

Qui finance le remboursement d'un paiement de type `platform`. Une entrée par financeur : le marchand absorbe (son `merchantId`), la plateforme absorbe (le `merchantId` de la plateforme elle-même), ou les deux se partagent le montant. La somme des `amount` doit égaler le montant remboursé. **Requis** sur un paiement réparti entre plusieurs marchands (`REFUND_PLATFORM_CONFIG_REQUIRED`). L'ancienne forme objet `{ platformAccountId, segmentation }` est dépréciée et sera refusée à partir du 05/11/2026 (`REFUND_PLATFORM_CONFIG_LEGACY_FORM`) ; `platformAccountId` n'est plus requis.

Codes de retour

200

Remboursement ou annulation effectué.

400

Montant invalide, statut paiement incompatible, incohérence de platformConfig ou de items (SEGMENTATION_AMOUNT_MISMATCH, REFUND_PLATFORM_CONFIG_REQUIRED, REFUND_MERCHANT_NOT_IN_PAYMENT, REFUND_PLATFORM_CONFIG_LEGACY_FORM), ou remboursement partiel d'un paiement à net 0 (PARTIAL_REFUND_UNSUPPORTED_NET0). Montant au-delà de ce qui reste : REFUND_AMOUNT_EXCEEDS_PAYMENT au premier remboursement, REFUND_AMOUNT_EXCEEDS_REMAINING ensuite (le détail porte refundedAmount et remainingAmount). Paiement déjà entièrement remboursé : INVALID_PAYMENT_STATUS.

404

Paiement introuvable.

Langage

Requête cURLpostExemple
1curl --request POST \
2 --url https://api.mobupay.nc/api/v1/payments/{id}/refund \
3 --header 'authorization: Bearer sk_test_XXXX' \
4 --header 'content-type: application/json' \
5 --data '{ "amountCents": 1000, "reason": "Demande client", "items": [ { "product": "Coca-Cola 33cl", "unitPrice": 500, "quantity": 2 } ] }'
Réponse

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

application/json