Rembourser ou annuler un paiement
https://api.mobupay.nc/api/v1/payments/{id}/refundCe 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é. Un paiement capturé en partie se rembourse jusqu'au montant capturé, jamais au-delà. 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).
Commission d'un logiciel connecté : on ne rembourse jamais avec l'argent d'un tiers. Sur un paiement émis par un logiciel qui y prélève sa commission, cette commission reste acquise au logiciel : le marchand qui rembourse (depuis son espace ou avec ses propres clés) le fait à ses frais, et rien ne lui en est rendu. Seul le logiciel qui a émis le paiement, en remboursant avec la clé qu'il détient pour le marchand, peut choisir d'en rendre une part par integratorCommissionRefund : prorata (au prorata du montant remboursé), full (tout ce qui reste), none (rien), rate (une part, en centièmes de pour-cent : 5000 = 50 %) ou amount (un montant, dans la devise d'origine comme amountCents). Tout autre appelant ne peut envoyer que none (403 INTEGRATOR_COMMISSION_REFUND_NOT_ALLOWED sinon). Sans ce champ, rien n'est rendu. Les frais Mobupay ne sont jamais rendus, et la commission de plateforme garde sa règle. Le cumul des remboursements d'un paiement ne rend jamais plus que la commission propre à ce paiement : un choix qui dépasse ce qui reste est refusé (400 INTEGRATOR_COMMISSION_REFUND_EXCEEDS, le détail donnant remainingFraction et remainingAmount), les remboursements dont l'avis bancaire n'est pas encore arrivé comptant déjà. Sans ce champ, le remboursement n'est jamais refusé pour la commission. Sur un paiement qui porte une commission de logiciel, la réponse porte integratorCommissionRefund : mode, fraction (la part de la commission que CE remboursement rend), expectedRefundCents (centimes d'euro) et expectedRefundAmount (devise d'origine), status: "pending". Le rendu passe à l'avis bancaire du remboursement : le montant de la réponse est prévu, le logiciel reçoit le réel par integrator.commission.restituted. Un logiciel ne rembourse jamais avec sa clé sk_int_* (403 INTEGRATOR_KEY_OWN_ROUTES_ONLY) : il rembourse au nom de son client, avec la clé qu'il détient pour lui.
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`, `captured` ou `partially_refunded`.
Corps de la requête
application/jsonamountCentsintegerOptionnelMontant à 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.
reasonstringOptionnelMotif libre du remboursement (max 500 caractères). Conservé dans `audit_log`.
platformConfigarray[object]OptionnelQui 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 capturé dont la commande est répartie entre plusieurs marchands, que la répartition ait déjà été versée ou non (`REFUND_PLATFORM_CONFIG_REQUIRED`), ainsi que sur une annulation partielle ; seule l'annulation totale d'un paiement non capturé en est dispensée. Un sous-marchand désigné n'est débité qu'après avoir reçu sa part du paiement. Pour une répartition transmise sous l'ancienne forme objet (`segmentation` ou `merchants`), l'exigence s'applique à partir du 05/11/2026 ; jusque-là, la demande sans `platformConfig` est acceptée et imputée en totalité sur la plateforme. 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.
Ce que le logiciel qui a émis le paiement rend de SA commission sur ce remboursement. **Réservé à ce logiciel**, remboursant avec la clé qu'il détient pour le marchand : on ne rembourse jamais avec l'argent d'un tiers, tout autre appelant ne peut envoyer que `none` (`403 INTEGRATOR_COMMISSION_REFUND_NOT_ALLOWED`). **Optionnel** : absent ⇒ rien n'est rendu, jamais refusé. Exemples : `{ "mode": "prorata" }`, `{ "mode": "full" }`, `{ "mode": "none" }`, `{ "mode": "rate", "rate": 5000 }`, `{ "mode": "amount", "amount": 100 }`. Fourni sur un paiement sans commission de logiciel : `400 NO_INTEGRATOR_COMMISSION`.
Codes de retour
Remboursement ou annulation effectué.
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. Commission d'un logiciel connecté : INTEGRATOR_COMMISSION_REFUND_EXCEEDS (le choix dépasse ce qui reste rendable), NO_INTEGRATOR_COMMISSION (aucune commission de logiciel sur ce paiement), VALIDATION_ERROR (rate hors de 0..10000, amount négatif).
INTEGRATOR_COMMISSION_REFUND_NOT_ALLOWED : integratorCommissionRefund demande un rendu (autre que none) alors que l'appelant n'est pas le logiciel qui a émis le paiement. On ne rembourse jamais avec l'argent d'un tiers : la commission du logiciel lui reste acquise. Rien n'est remboursé.
Paiement introuvable.
Langage
Cliquez sur Essayer pour lancer la requête et voir la réponse ici. Ou choisissez un exemple :
application/json