Créer un lien de paiement
https://api.mobupay.nc/api/v1/payments/linksCe que fait cet appel
Crée un lien de paiement à transmettre au client par email, SMS ou QR. Le client ouvre l'URL et paye sur la page hébergée Mobupay (Payment Widget) à son rythme avant l'échéance du lien. À la fin (succès ou échec), un webhook payment.* est envoyé et le client est redirigé vers redirectUrl.
Le lien n'est pas la session. Chaque ouverture du lien ouvre une session de paiement de durée normale (une quinzaine de minutes). Une session abandonnée, refusée ou échue ne ferme pas le lien : l'ouverture suivante en ouvre une nouvelle, jusqu'à l'échéance du lien (expiresIn) ou sa désactivation (POST /payments/links/{linkId}/disable).
Deux types de lien (type) : - single (défaut) : lien à usage unique. Au premier paiement abouti, le lien est validé (link.completed) et ne s'ouvre plus ; le rouvrir mène au reçu. - fixed : lien permanent. Il sert plusieurs clients, chacun paie le sien, avec le même montant et la même commande. Il n'a pas d'échéance par défaut (expiresIn omis ou null), ne désigne aucun client (customerId refusé, 400 FIXED_LINK_NOT_ALLOWED) et n'a jamais de paiement réservé : paymentId vaut null, chaque paiement naît à l'ouverture et porte linkId dans ses webhooks. Indisponible sur un compte de simulation.
Suivez la vie du lien par GET /payments/links/{linkId} et les événements link.completed, link.expired, link.disabled et link.enabled (guide « Webhooks », /docs/guides/webhooks).
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). La boutique suit le lien jusqu'au paiement qu'il produit : elle est restituée dans la réponse, portée par les webhooks de ce paiement, et lisible à tout moment sur `GET /payments/{id}`.
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`.
captureModestringOptionnelAUTO (défaut) ou MANUAL. Voir `POST /payments/sessions`.
customerIdstringOptionnelIdentifiant du client à associer au lien (`cus_*`). Optionnel.
externalIdstringOptionnelIdentifie le customer par son identifiant externe (unique par marchand). Max 255 caractères.
isInclTaxAmountbooleanOptionnelDrapeau de la COMMANDE : ses prix (`items[].unitPrice`) et `order.amount` sont taxes comprises (`true`, défaut), et la taxe en est extraite ; ou hors taxes (`false`), et la taxe est calculée en plus des prix et portée dans `order.taxAmount`, sans être ajoutée au montant débité, qui reste `order.amount` (plus le pourboire). Une commission ne lit pas ce champ : ses taxes (`taxDetail`) s'ajoutent toujours à son montant.
languageCodestringOptionnelCode langue de la page de paiement (`fr`, `en`...). 2 a 5 caractères. Défaut `fr`.
redirectUrlstringRequisURL de redirection après paiement (succès ou échec). Le client y revient avec `status`, `paymentId` et `reference` en query string. Ces trois noms sont réservés : Mobupay remplace un paramètre du même nom déjà présent dans votre adresse ; vos autres paramètres sont conservés.
failureRedirectUrlstringOptionnelURL de retour dédiée en cas de refus (défaut : `redirectUrl`). Voir `POST /payments/sessions`.
failurePageModestringOptionnel`show` (défaut) : page d'échec Mobupay. `redirect` : redirection immédiate vers `failureRedirectUrl`. Voir `POST /payments/sessions`.
successPageModestringOptionnelComportement de la page de succès (`auto` par défaut). Voir `POST /payments/sessions`.
notificationUrlstringRequisURL HTTPS de votre webhook : Mobupay y envoie (POST signé) les events du paiement (`payment.authorized`, `payment.captured`, `payment.failed`...). Livrée en complément des endpoints webhook enregistrés.
privateDataobjectOptionnelDonnées privees libres (JSON) conservées côté Mobupay et retournées dans les webhooks.
expiresInintegerOptionnelDurée de validité du LIEN en SECONDES (entier strictement positif), sans plafond. Défaut 86400 (24h) pour un lien `single`, aucune échéance pour un lien `fixed`. `null` : aucune échéance. Une durée qui porterait l'échéance au-delà du 31 décembre 9999 est refusée en 400 : c'est le symptôme d'une durée transmise en millisecondes. Chaque session ouverte par le lien a sa propre durée, courte, bornée par l'échéance du lien.
typestringOptionnel`single` (défaut) : lien à usage unique, validé au premier paiement abouti. `fixed` : lien permanent, un paiement par client, jusqu'à sa désactivation ou son échéance. Un lien `fixed` ne peut pas désigner de client (`customerId`).
Codes de retour
Lien de paiement créé. store restitue la boutique retenue (null si le lien n'en porte aucune). Sur un rejeu d'idempotence (réponse 200), le champ est absent plutôt que null : ce chemin ne relit pas le paiement déjà créé, et null affirmerait à tort qu'il n'a pas de boutique. Lisez-la alors sur GET /payments/{id}.
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).
Clé API manquante ou invalide.
Langage
Cliquez sur Essayer pour lancer la requête et voir la réponse ici. Ou choisissez un exemple :
application/json