Objets
Les 22objets que l'API renvoie, avec le contrat de chaque champ : type, obligation et contraintes. Les endpoints les réutilisent tels quels : ce que vous lisez ici est ce que vous recevrez.
Metadata
⚠️ Une valeur qui ressemble à un numéro de carte bancaire est REFUSÉE, sur toutes les ressources : Tupay n'en stocke jamais, y compris ici. Ce refus protège votre conformité PCI-DSS autant que la nôtre. Si c'est une référence interne numérique, préfixez-la (« cmd-… ») pour lever l'ambiguïté.
Vos propres clés et valeurs, attachées à l'objet et relisibles avec lui. De quoi relier une ressource Tupay à votre système sans tenir de table de correspondance.
Bornes : 50 clés au plus, 40 caractères par clé, 500 par valeur. Elles portent sur le RÉSULTAT de la fusion, pas sur ce que vous envoyez : ajouter 5 clés à un objet qui en compte 48 est refusé.
À la modification, les clés fournies remplacent les anciennes et les autres survivent. Une clé à null est supprimée. Un objet vide ne change rien, et metadata: null efface tout.
Ce n'est pas un espace de stockage : les valeurs ne sont ni indexées ni cherchables, et n'ont aucun effet sur le traitement.
Objet de type object, sans champ nommé.
Transaction
Forme identique dans les réponses REST et dans data.object des webhooks : un seul modèle à écrire côté intégrateur.
- format uuid
idchaînefacultatif - toujours transaction
objectchaînefacultatif createdentierfacultatifSecondes Unix. Même instant que
createdAt.amountXpfentierfacultatifamountEurCentsentierfacultatifCentimes EUR, pour réconciliation avec le prestataire bancaire.
- toujours XPF
currencychaînefacultatif - valeurs : pending, processing, succeeded, failed, refunded
statuschaînefacultatif paymentIntentIdchaînefacultatif- format uuid
customerIdchaîne ou `null`facultatifClient rattaché,
nullpour un encaissement de passage. Développable :expand[]=customer. - format uuid
paymentMethodIdchaîne ou `null`facultatifCarte enregistrée débitée,
nullsi le porteur a saisi la sienne. Développable :expand[]=payment_method. offSessionbooléenfacultatifLe porteur n'était pas devant son écran.
- valeurs : card_declined, expired_card, incorrect_cvc, insufficient_funds, processing_error, authentication_required, null
failureCodechaîne ou `null`facultatifSur un échec : la raison, en code machine stable.
authentication_requiredn'est pas un refus. failureMessagechaîne ou `null`facultatifLa même raison, en français, montrable au marchand.
- format uuid
paymentLinkIdchaîne ou `null`facultatif - au plus 50 clés
metadataobjetfacultatifClés libres (longueur maximale 40), valeurs de type chaîne (longueur maximale 500).
⚠️ Une valeur qui ressemble à un numéro de carte bancaire est REFUSÉE, sur toutes les ressources : Tupay n'en stocke jamais, y compris ici. Ce refus protège votre conformité PCI-DSS autant que la nôtre. Si c'est une référence interne numérique, préfixez-la (« cmd-… ») pour lever l'ambiguïté.
Vos propres clés et valeurs, attachées à l'objet et relisibles avec lui. De quoi relier une ressource Tupay à votre système sans tenir de table de correspondance.
Bornes : 50 clés au plus, 40 caractères par clé, 500 par valeur. Elles portent sur le RÉSULTAT de la fusion, pas sur ce que vous envoyez : ajouter 5 clés à un objet qui en compte 48 est refusé.
À la modification, les clés fournies remplacent les anciennes et les autres survivent. Une clé à
nullest supprimée. Un objet vide ne change rien, etmetadata: nullefface tout.Ce n'est pas un espace de stockage : les valeurs ne sont ni indexées ni cherchables, et n'ont aucun effet sur le traitement.
livemodebooléenfacultatifrefundedAmountXpfentierfacultatifCumul remboursé. C'est ce champ qui fait foi, pas
status: un remboursement partiel laissestatusàsucceeded.- format date-time
refundedAtchaîne ou `null`facultatif - format date-time
createdAtchaînefacultatifDoublon de
created. Lisezcreated. - format date-time
updatedAtchaînefacultatif
PaymentLink
- format uuid
idchaînefacultatif - toujours payment_link
objectchaînefacultatif createdentierfacultatifSecondes Unix. Même instant que
createdAt.amountXpfentierfacultatif- toujours XPF
currencychaînefacultatif descriptionchaînefacultatifslugchaînefacultatifurlchaînefacultatifURL publique à transmettre au client.
- format uri
returnUrlchaîne ou `null`facultatif - format uuid
priceIdchaîne ou `null`facultatifTarif dont ce lien hérite,
nullpour un montant libre. Développable —expand[]=price. Le montant reste servi dansamountXpf: un client qui le lit déjà n'a rien à changer. - au plus 50 clés
metadataobjetfacultatifClés libres (longueur maximale 40), valeurs de type chaîne (longueur maximale 500).
⚠️ Une valeur qui ressemble à un numéro de carte bancaire est REFUSÉE, sur toutes les ressources : Tupay n'en stocke jamais, y compris ici. Ce refus protège votre conformité PCI-DSS autant que la nôtre. Si c'est une référence interne numérique, préfixez-la (« cmd-… ») pour lever l'ambiguïté.
Vos propres clés et valeurs, attachées à l'objet et relisibles avec lui. De quoi relier une ressource Tupay à votre système sans tenir de table de correspondance.
Bornes : 50 clés au plus, 40 caractères par clé, 500 par valeur. Elles portent sur le RÉSULTAT de la fusion, pas sur ce que vous envoyez : ajouter 5 clés à un objet qui en compte 48 est refusé.
À la modification, les clés fournies remplacent les anciennes et les autres survivent. Une clé à
nullest supprimée. Un objet vide ne change rien, etmetadata: nullefface tout.Ce n'est pas un espace de stockage : les valeurs ne sont ni indexées ni cherchables, et n'ont aucun effet sur le traitement.
activebooléenfacultatiflivemodebooléenfacultatifUn lien de test n'est pas payable. La page affiche un bandeau.
- format date-time
createdAtchaînefacultatifDoublon de
created. Lisezcreated. - format date-time
updatedAtchaînefacultatif
Customer
- format uuid
idchaînefacultatif - toujours customer
objectchaînefacultatif createdentierfacultatifSecondes Unix. Même instant que
createdAt.- format email
emailchaîne ou `null`facultatif namechaîne ou `null`facultatifphonechaîne ou `null`facultatif- au plus 50 clés
metadataobjetfacultatifClés libres (longueur maximale 40), valeurs de type chaîne (longueur maximale 500).
⚠️ Une valeur qui ressemble à un numéro de carte bancaire est REFUSÉE, sur toutes les ressources : Tupay n'en stocke jamais, y compris ici. Ce refus protège votre conformité PCI-DSS autant que la nôtre. Si c'est une référence interne numérique, préfixez-la (« cmd-… ») pour lever l'ambiguïté.
Vos propres clés et valeurs, attachées à l'objet et relisibles avec lui. De quoi relier une ressource Tupay à votre système sans tenir de table de correspondance.
Bornes : 50 clés au plus, 40 caractères par clé, 500 par valeur. Elles portent sur le RÉSULTAT de la fusion, pas sur ce que vous envoyez : ajouter 5 clés à un objet qui en compte 48 est refusé.
À la modification, les clés fournies remplacent les anciennes et les autres survivent. Une clé à
nullest supprimée. Un objet vide ne change rien, etmetadata: nullefface tout.Ce n'est pas un espace de stockage : les valeurs ne sont ni indexées ni cherchables, et n'ont aucun effet sur le traitement.
deletedbooléenfacultatifToujours présent, y compris à
false. Un client supprimé reste lisible et garde ses données : seule la fiche est retirée de la liste et fermée à la modification.livemodebooléenfacultatif- format date-time
createdAtchaînefacultatifDoublon de
created. Lisezcreated. - format date-time
updatedAtchaînefacultatif
PaymentMethod
⚠️ Cette forme est le périmètre PCI-DSS. Elle ne porte que des attributs d'affichage : ni numéro de carte, ni cryptogramme, ni titulaire — ni même le jeton du prestataire, qui reste chez nous.
- format uuid
idchaînefacultatif - toujours payment_method
objectchaînefacultatif createdentierfacultatifSecondes Unix. Même instant que
createdAt.- format uuid
customerIdchaînefacultatifClient rattaché. Développable —
expand[]=customer. - exemple visa
brandchaînefacultatifMarque, telle que le prestataire la nomme.
- motif ^[0-9]{4}$exemple 4242
last4chaînefacultatifLes quatre derniers chiffres. Jamais plus.
- minimum 1maximum 12
expMonthentierfacultatif - exemple 2034
expYearentierfacultatif defaultbooléenfacultatifUtilisé quand un paiement ne précise aucun moyen. Toujours présent, y compris à
false.detachedbooléenfacultatifVrai après
DELETE. Le moyen n'est plus utilisable, mais reste lisible et garde ses attributs d'affichage.- au plus 50 clés
metadataobjetfacultatifClés libres (longueur maximale 40), valeurs de type chaîne (longueur maximale 500).
⚠️ Une valeur qui ressemble à un numéro de carte bancaire est REFUSÉE, sur toutes les ressources : Tupay n'en stocke jamais, y compris ici. Ce refus protège votre conformité PCI-DSS autant que la nôtre. Si c'est une référence interne numérique, préfixez-la (« cmd-… ») pour lever l'ambiguïté.
Vos propres clés et valeurs, attachées à l'objet et relisibles avec lui. De quoi relier une ressource Tupay à votre système sans tenir de table de correspondance.
Bornes : 50 clés au plus, 40 caractères par clé, 500 par valeur. Elles portent sur le RÉSULTAT de la fusion, pas sur ce que vous envoyez : ajouter 5 clés à un objet qui en compte 48 est refusé.
À la modification, les clés fournies remplacent les anciennes et les autres survivent. Une clé à
nullest supprimée. Un objet vide ne change rien, etmetadata: nullefface tout.Ce n'est pas un espace de stockage : les valeurs ne sont ni indexées ni cherchables, et n'ont aucun effet sur le traitement.
livemodebooléenfacultatif- format date-time
createdAtchaînefacultatifDoublon de
created. Lisezcreated. - format date-time
updatedAtchaînefacultatif
SetupIntent
Une intention d'ENREGISTREMENT de carte. Elle ne porte aucun montant, et n'en acceptera jamais : aucun débit ne peut venir de cet objet.
- format uuid
idchaînefacultatif - toujours setup_intent
objectchaînefacultatif createdentierfacultatifSecondes Unix. Même instant que
createdAt.- format uuid
customerIdchaînefacultatifDéveloppable —
expand[]=customer. - valeurs : pending, succeeded, failed, canceled
statuschaînefacultatif - format uuid
paymentMethodIdchaîne ou `null`facultatifLe moyen créé quand l'enregistrement aboutit,
nullavant. Développable —expand[]=payment_method. - valeurs : card_declined, expired_card, incorrect_cvc, insufficient_funds, processing_error, authentication_required, null
failureCodechaîne ou `null`facultatifCode machine STABLE.
authentication_requiredn'est pas un refus : le porteur doit valider son authentification forte, ramenez-le devant son écran. failureMessagechaîne ou `null`facultatifPhrase française, montrable telle quelle au client final.
- au plus 50 clés
metadataobjetfacultatifClés libres (longueur maximale 40), valeurs de type chaîne (longueur maximale 500).
⚠️ Une valeur qui ressemble à un numéro de carte bancaire est REFUSÉE, sur toutes les ressources : Tupay n'en stocke jamais, y compris ici. Ce refus protège votre conformité PCI-DSS autant que la nôtre. Si c'est une référence interne numérique, préfixez-la (« cmd-… ») pour lever l'ambiguïté.
Vos propres clés et valeurs, attachées à l'objet et relisibles avec lui. De quoi relier une ressource Tupay à votre système sans tenir de table de correspondance.
Bornes : 50 clés au plus, 40 caractères par clé, 500 par valeur. Elles portent sur le RÉSULTAT de la fusion, pas sur ce que vous envoyez : ajouter 5 clés à un objet qui en compte 48 est refusé.
À la modification, les clés fournies remplacent les anciennes et les autres survivent. Une clé à
nullest supprimée. Un objet vide ne change rien, etmetadata: nullefface tout.Ce n'est pas un espace de stockage : les valeurs ne sont ni indexées ni cherchables, et n'ont aucun effet sur le traitement.
livemodebooléenfacultatif- format date-time
createdAtchaînefacultatifDoublon de
created. Lisezcreated. - format date-time
updatedAtchaînefacultatif
Product
- format uuid
idchaînefacultatif - toujours product
objectchaînefacultatif createdentierfacultatifSecondes Unix. Même instant que
createdAt.- exemple Sortie lagon
namechaînefacultatif descriptionchaîne ou `null`facultatifactivebooléenfacultatifUn article désactivé n'apparaît plus dans les nouvelles ventes, mais ses tarifs existants continuent de fonctionner. Réversible — ce n'est pas une suppression.
- au plus 50 clés
metadataobjetfacultatifClés libres (longueur maximale 40), valeurs de type chaîne (longueur maximale 500).
⚠️ Une valeur qui ressemble à un numéro de carte bancaire est REFUSÉE, sur toutes les ressources : Tupay n'en stocke jamais, y compris ici. Ce refus protège votre conformité PCI-DSS autant que la nôtre. Si c'est une référence interne numérique, préfixez-la (« cmd-… ») pour lever l'ambiguïté.
Vos propres clés et valeurs, attachées à l'objet et relisibles avec lui. De quoi relier une ressource Tupay à votre système sans tenir de table de correspondance.
Bornes : 50 clés au plus, 40 caractères par clé, 500 par valeur. Elles portent sur le RÉSULTAT de la fusion, pas sur ce que vous envoyez : ajouter 5 clés à un objet qui en compte 48 est refusé.
À la modification, les clés fournies remplacent les anciennes et les autres survivent. Une clé à
nullest supprimée. Un objet vide ne change rien, etmetadata: nullefface tout.Ce n'est pas un espace de stockage : les valeurs ne sont ni indexées ni cherchables, et n'ont aucun effet sur le traitement.
livemodebooléenfacultatif- format date-time
createdAtchaînefacultatifDoublon de
created. Lisezcreated. - format date-time
updatedAtchaînefacultatif
CheckoutSession
Une page de paiement hébergée. Le total est figé à la création et ne suit plus le catalogue.
- format uuid
idchaînefacultatif - toujours checkout_session
objectchaînefacultatif createdentierfacultatifSecondes Unix. Même instant que
createdAt.- valeurs : open, complete, expired
statuschaînefacultatifopentant qu'elle est payable,completeune fois l'argent reçu,expiredpassé l'échéance.Une session ne quitte jamais
complete. Elle peut en revanche passer d'expiredàcomplete: un paiement lancé avant l'échéance et confirmé après elle a bel et bien eu lieu, et c'est l'argent qui tranche. urlchaînefacultatifLa page hébergée par Tupay. C'est là qu'on envoie le client.
amountXpfentierfacultatifTotal figé, somme des lignes. Entier XPF — le franc pacifique n'a pas de centimes.
- toujours XPF
currencychaînefacultatif lineItemsliste· de objetfacultatifCe que la page affiche, tel qu'il a été figé.
- format uuid
priceIdchaîne ou `null`facultatifnullpour une ligne à montant libre. descriptionchaînefacultatifunitAmountXpfentierfacultatifquantityentierfacultatifamountXpfentierfacultatifunitAmountXpf×quantity.
successUrlchaînefacultatifcancelUrlchaîne ou `null`facultatif- format uuid
customerIdchaîne ou `null`facultatifDéveloppable —
expand[]=customer. - format email
customerEmailchaîne ou `null`facultatif - valeurs : provided, created, unique, ambiguous, null
customerMatchchaîne ou `null`facultatifComment la fiche a été obtenue au règlement.
nulltant que la session n'est pas réglée, ou s'il n'y avait rien à rapprocher.| Valeur | Ce qui s'est passé | |---|---| |
provided| vous aviez fournicustomer| |created| l'email était inconnu, une fiche a été créée | |unique| une seule fiche vivante portait cet email | |ambiguous| plusieurs la portaient — une fiche NEUVE a été créée |ambiguousest le seul cas qui demande une action de votre part. Nous ne rattachons jamais « à la plus récente » : cela ferait entrer l'achat d'une personne dans l'historique d'une autre. - format uuid
transactionIdchaîne ou `null`facultatifLe paiement en cours tant que la session est
open— il en interdit un second — puis celui qui l'a réglée. Développable —expand[]=transaction. expiresAtentierfacultatifSecondes Unix. Entre 30 minutes et 24 heures après
created.- au plus 50 clés
metadataobjetfacultatifClés libres (longueur maximale 40), valeurs de type chaîne (longueur maximale 500).
⚠️ Une valeur qui ressemble à un numéro de carte bancaire est REFUSÉE, sur toutes les ressources : Tupay n'en stocke jamais, y compris ici. Ce refus protège votre conformité PCI-DSS autant que la nôtre. Si c'est une référence interne numérique, préfixez-la (« cmd-… ») pour lever l'ambiguïté.
Vos propres clés et valeurs, attachées à l'objet et relisibles avec lui. De quoi relier une ressource Tupay à votre système sans tenir de table de correspondance.
Bornes : 50 clés au plus, 40 caractères par clé, 500 par valeur. Elles portent sur le RÉSULTAT de la fusion, pas sur ce que vous envoyez : ajouter 5 clés à un objet qui en compte 48 est refusé.
À la modification, les clés fournies remplacent les anciennes et les autres survivent. Une clé à
nullest supprimée. Un objet vide ne change rien, etmetadata: nullefface tout.Ce n'est pas un espace de stockage : les valeurs ne sont ni indexées ni cherchables, et n'ont aucun effet sur le traitement.
livemodebooléenfacultatif- format date-time
createdAtchaînefacultatifDoublon de
created. Lisezcreated. - format date-time
updatedAtchaînefacultatif
Receipt
La trace d'un reçu envoyé au client final. Le sujet et le corps de l'email ne sont pas rendus : le reçu s'adresse à votre client, cette ressource vous dit seulement ce qui lui est arrivé.
- format uuid
idchaînefacultatif - toujours receipt
objectchaînefacultatif createdentierfacultatifSecondes Unix. Même instant que
createdAt.- valeurs : pending, succeeded, failed, exhausted
statuschaînefacultatifexhausted= les sept tentatives sont épuisées, ou le fournisseur a refusé définitivement (adresse inexistante). Rien ne repartira sansPOST /receipts/{id}/resend. - format email
emailchaînefacultatifL'adresse figée au moment du paiement. Corriger ou supprimer la fiche client ensuite ne la change pas : le reçu est parti là où votre client l'attendait.
- format uuid
transactionIdchaînefacultatifDéveloppable —
expand[]=transaction. attemptsentierfacultatifnextRetryAtentier ou `null`facultatifSecondes Unix.
nullquand plus rien n'est prévu.sentAtentier ou `null`facultatifSecondes Unix.
providerchaîne ou `null`facultatifQui a traité l'envoi.
resend= parti. `journal` = consigné, pas expédié — un environnement sans email configuré, ce qui n'arrive pas en production.lastErrorchaîne ou `null`facultatiflivemodebooléenfacultatif- format date-time
createdAtchaînefacultatifDoublon de
created. Lisezcreated.
Subscription
Un client lié à un tarif récurrent. Le tarif est toujours récurrent — un abonnement sur un tarif ponctuel est refusé, y compris par la base.
- format uuid
idchaînefacultatif - toujours subscription
objectchaînefacultatif createdentierfacultatifSecondes Unix. Même instant que
createdAt.- valeurs : active, paused, past_due, canceled
statuschaînefacultatifpast_due: le client n'a pas payé et il n'est pas coupé. Nous ne résilions pas à votre place — la décision vous appartient. - format uuid
customerIdchaînefacultatifDéveloppable —
expand[]=customer. - format uuid
priceIdchaînefacultatifDéveloppable —
expand[]=price. - format uuid
paymentMethodIdchaînefacultatifLa carte retenue à la souscription. Non développable : elle porte les quatre derniers chiffres d'une carte, et une liste d'abonnements n'a pas à les faire défiler. Lisez-la par
GET /payment-methods/{id}. cancelAtPeriodEndbooléenfacultatifAnnulation programmée : le service court jusqu'à
currentPeriodEnd, puis l'abonnement se ferme.Distincte de
canceledAt, qui date la cessation effective. Sur un abonnementcanceled, ce champ dit comment il s'est terminé :true= comme prévu,false= coupé net.canceledAtentier ou `null`facultatifSecondes Unix.
nulltant que l'abonnement n'a pas cessé.currentPeriodStartentierfacultatifSecondes Unix.
currentPeriodEndentierfacultatifSecondes Unix. Fin de la période courante, donc la prochaine échéance. Il n'y a pas de second champ pour cet instant : deux champs pour une même date finiraient par diverger.
- au plus 50 clés
metadataobjetfacultatifClés libres (longueur maximale 40), valeurs de type chaîne (longueur maximale 500).
⚠️ Une valeur qui ressemble à un numéro de carte bancaire est REFUSÉE, sur toutes les ressources : Tupay n'en stocke jamais, y compris ici. Ce refus protège votre conformité PCI-DSS autant que la nôtre. Si c'est une référence interne numérique, préfixez-la (« cmd-… ») pour lever l'ambiguïté.
Vos propres clés et valeurs, attachées à l'objet et relisibles avec lui. De quoi relier une ressource Tupay à votre système sans tenir de table de correspondance.
Bornes : 50 clés au plus, 40 caractères par clé, 500 par valeur. Elles portent sur le RÉSULTAT de la fusion, pas sur ce que vous envoyez : ajouter 5 clés à un objet qui en compte 48 est refusé.
À la modification, les clés fournies remplacent les anciennes et les autres survivent. Une clé à
nullest supprimée. Un objet vide ne change rien, etmetadata: nullefface tout.Ce n'est pas un espace de stockage : les valeurs ne sont ni indexées ni cherchables, et n'ont aucun effet sur le traitement.
livemodebooléenfacultatif- format date-time
createdAtchaînefacultatifDoublon de
created. Lisezcreated. - format date-time
updatedAtchaînefacultatif
BalanceTransaction
Une ligne du journal de votre solde. Immuable : elle naît d'un mouvement réel et ne se corrige qu'en écrivant un ajustement.
- format uuid
idchaînefacultatif - toujours balance_transaction
objectchaînefacultatif createdentierfacultatifSecondes Unix. Même instant que
createdAt.sequenceentierfacultatifNuméro séquentiel par compte, par mode et par année, sans rupture. Une ligne manquante laisse un trou visible.
- valeurs : payment, refund, fee, payout, dispute, adjustment
typechaînefacultatif - format uuid
transactionIdchaîne ou `null`facultatifLe paiement à l'origine du mouvement. Développable —
expand[]=transaction. - format uuid
refundIdchaîne ou `null`facultatifDéveloppable —
expand[]=refund. grossXpfentierfacultatifCe que le client a payé, TTC. Négatif sur un remboursement : le journal s'additionne sans cas particulier.
feeXpfentierfacultatifNotre commission. Zéro sur un remboursement — elle n'est pas rendue, et celle du paiement d'origine reste acquise.
netXpfentierfacultatifgrossXpf − feeXpf. C'est lui qui rejoint votre solde.tgcXpfentierfacultatifLa TGC transportée par ce mouvement, de même signe que le brut. Indicative : calculée au taux déclaré sur votre compte.
- valeurs : exempt, 5, 10, 16
tgcRatechaînefacultatifLe taux figé au moment de l'écriture.
tgcLabelchaînefacultatif« TGC 10 % incluse : 4 091 XPF », ou l'exonération.
feeBpsentierfacultatifLe barème appliqué, figé. 250 = 2,5 %.
feeFixedXpfentierfacultatifPart fixe du barème, figée.
availableAtentierfacultatifSecondes Unix : quand ce montant bascule en
available. Figée à l'écriture, jamais recalculée.- toujours XPF
currencychaînefacultatif livemodebooléenfacultatif- format date-time
createdAtchaînefacultatifDoublon de
created. Lisezcreated.
Balance
État instantané, pas une ressource stockée : ni id, ni created. Le solde est la somme de vos écritures au moment où vous le demandez.
- toujours balance
objectchaînefacultatif availableobjetfacultatifEncaissable dès maintenant.
amountXpfentierfacultatifCe qui vous revient, commission déduite, en francs entiers.
tgcXpfentierfacultatifLa TGC contenue dans
amountXpf. Indicatif : calculé au taux déclaré sur votre compte.netOfTgcXpfentierfacultatifamountXpf − tgcXpf— ce qui reste une fois la taxe réservée.countentierfacultatifNombre d'écritures dans cette part.
pendingobjetfacultatifPas encore encaissable.
nextAvailableAtdit quand la plus proche de ces écritures bascule.amountXpfentierfacultatifCe qui vous revient, commission déduite, en francs entiers.
tgcXpfentierfacultatifLa TGC contenue dans
amountXpf. Indicatif : calculé au taux déclaré sur votre compte.netOfTgcXpfentierfacultatifamountXpf − tgcXpf— ce qui reste une fois la taxe réservée.countentierfacultatifNombre d'écritures dans cette part.
nextAvailableAtentier ou `null`facultatifSecondes Unix : quand la plus proche écriture en attente bascule.
nullquand rien n'est en attente.- toujours XPF
currencychaînefacultatif livemodebooléenfacultatif
PartDeSolde
amountXpfentierfacultatifCe qui vous revient, commission déduite, en francs entiers.
tgcXpfentierfacultatifLa TGC contenue dans
amountXpf. Indicatif : calculé au taux déclaré sur votre compte.netOfTgcXpfentierfacultatifamountXpf − tgcXpf— ce qui reste une fois la taxe réservée.countentierfacultatifNombre d'écritures dans cette part.
Invoice
Facture d'une échéance d'abonnement. Montants TTC, ventilation TGC figée à l'émission.
- format uuid
idchaînefacultatif - toujours invoice
objectchaînefacultatif - exemple FAC-2026-000004
numberchaînefacultatifLe numéro comptable : séquentiel, chronologique et sans rupture, par compte et par année. C'est lui qu'on cite à un comptable ;
idne désigne la facture que dans l'API.Attribué par Tupay, jamais modifiable. Le mode test a son propre compteur et son propre préfixe —
TEST-2026-000004— pour qu'une intégration en cours ne creuse pas de trou dans votre séquence réelle. createdentierfacultatifSecondes Unix. Même instant que
createdAt.- valeurs : open, paid, past_due, void
statuschaînefacultatif - format uuid
subscriptionIdchaînefacultatifDéveloppable —
expand[]=subscription. - format uuid
customerIdchaînefacultatifDéveloppable —
expand[]=customer. - format uuid
transactionIdchaîne ou `null`facultatifLe prélèvement tenté.
nulltant qu'aucune tentative n'a eu lieu. Développable —expand[]=transaction. amountXpfentierfacultatifTTC, entier XPF.
htXpf + tgcXpfvaut exactement cette valeur — la base le vérifie, quel que soit le code qui écrit.htXpfentierfacultatifBase hors taxe.
tgcXpfentierfacultatifTaxe comprise dans le TTC, jamais ajoutée. Sur 6 000 XPF à 5 % elle vaut 286, et non 300.
- valeurs : exempt, 5, 10, 16
tgcRatechaînefacultatifLe taux figé à l'émission, pas celui de votre compte aujourd'hui. C'est ce qui rend une facture relisible des années plus tard.
tgcLabelchaînefacultatif« TGC 5 % incluse : 286 XPF », ou l'exonération.
- toujours XPF
currencychaînefacultatif periodStartentierfacultatifSecondes Unix.
periodEndentierfacultatifSecondes Unix.
linesliste· de objetfacultatifRendues d'office — une facture sans ses lignes n'en est pas une.
descriptionchaînefacultatifquantityentierfacultatifunitAmountXpfentierfacultatifamountXpfentierfacultatifTTC.
htXpfentierfacultatiftgcXpfentierfacultatif
attemptsentierfacultatifTentatives de prélèvement déjà faites, celle de l'émission comprise.
nextAttemptAtentier ou `null`facultatifProchaine relance prévue, en secondes Unix.
null= plus rien : la facture est réglée, ou le barème est épuisé.attemptHistoryliste· de objetfacultatifLe journal des tentatives. Rendu seulement sur
GET /invoices/{id}: cinq lignes par facture, personne ne lit cent journaux d'un coup.Un compteur dit combien ; ce journal dit quand et pourquoi.
attemptentierfacultatifsucceededbooléenfacultatif- format uuid
transactionIdchaîne ou `null`facultatif failureCodechaîne ou `null`facultatifCode machine, du catalogue d'erreurs.
failureMessagechaîne ou `null`facultatifMessage français, à montrer au marchand.
attemptedAtentierfacultatifSecondes Unix.
paidAtentier ou `null`facultatifSecondes Unix.
nulltant que la facture n'est pas réglée.livemodebooléenfacultatif- format date-time
createdAtchaînefacultatifDoublon de
created. Lisezcreated. - format date-time
updatedAtchaînefacultatif
Price
Un prix attaché à un article. Immuable dès sa création : montant, devise, périodicité et article ne changent pas.
- format uuid
idchaînefacultatif - toujours price
objectchaînefacultatif createdentierfacultatifSecondes Unix. Même instant que
createdAt.- format uuid
productIdchaînefacultatifDéveloppable —
expand[]=product. amountXpfentierfacultatifEntier XPF. Le franc pacifique n'a pas de centimes.
- toujours XPF
currencychaînefacultatif recurringobjet ou `null`facultatifnullpour un tarif ponctuel.- valeurs : day, week, month, year
intervalchaînefacultatif intervalCountentierfacultatif
nicknamechaîne ou `null`facultatifactivebooléenfacultatifUn tarif désactivé n'est plus proposé, mais reste consultable et continue d'honorer les liens qui le référencent.
- au plus 50 clés
metadataobjetfacultatifClés libres (longueur maximale 40), valeurs de type chaîne (longueur maximale 500).
⚠️ Une valeur qui ressemble à un numéro de carte bancaire est REFUSÉE, sur toutes les ressources : Tupay n'en stocke jamais, y compris ici. Ce refus protège votre conformité PCI-DSS autant que la nôtre. Si c'est une référence interne numérique, préfixez-la (« cmd-… ») pour lever l'ambiguïté.
Vos propres clés et valeurs, attachées à l'objet et relisibles avec lui. De quoi relier une ressource Tupay à votre système sans tenir de table de correspondance.
Bornes : 50 clés au plus, 40 caractères par clé, 500 par valeur. Elles portent sur le RÉSULTAT de la fusion, pas sur ce que vous envoyez : ajouter 5 clés à un objet qui en compte 48 est refusé.
À la modification, les clés fournies remplacent les anciennes et les autres survivent. Une clé à
nullest supprimée. Un objet vide ne change rien, etmetadata: nullefface tout.Ce n'est pas un espace de stockage : les valeurs ne sont ni indexées ni cherchables, et n'ont aucun effet sur le traitement.
livemodebooléenfacultatif- format date-time
createdAtchaînefacultatifDoublon de
created. Lisezcreated. - format date-time
updatedAtchaînefacultatif
Refund
- format uuid
idchaînefacultatif - toujours refund
objectchaînefacultatif createdentierfacultatifSecondes Unix. Même instant que
createdAt.- format uuid
transactionIdchaînefacultatif amountXpfentierfacultatif- toujours XPF
currencychaînefacultatif - valeurs : pending, succeeded, failed
statuschaînefacultatif reasonchaîne ou `null`facultatif- au plus 50 clés
metadataobjetfacultatifClés libres (longueur maximale 40), valeurs de type chaîne (longueur maximale 500).
⚠️ Une valeur qui ressemble à un numéro de carte bancaire est REFUSÉE, sur toutes les ressources : Tupay n'en stocke jamais, y compris ici. Ce refus protège votre conformité PCI-DSS autant que la nôtre. Si c'est une référence interne numérique, préfixez-la (« cmd-… ») pour lever l'ambiguïté.
Vos propres clés et valeurs, attachées à l'objet et relisibles avec lui. De quoi relier une ressource Tupay à votre système sans tenir de table de correspondance.
Bornes : 50 clés au plus, 40 caractères par clé, 500 par valeur. Elles portent sur le RÉSULTAT de la fusion, pas sur ce que vous envoyez : ajouter 5 clés à un objet qui en compte 48 est refusé.
À la modification, les clés fournies remplacent les anciennes et les autres survivent. Une clé à
nullest supprimée. Un objet vide ne change rien, etmetadata: nullefface tout.Ce n'est pas un espace de stockage : les valeurs ne sont ni indexées ni cherchables, et n'ont aucun effet sur le traitement.
livemodebooléenfacultatif- format date-time
createdAtchaînefacultatifDoublon de
created. Lisezcreated.
WebhookEndpoint
- format uuid
idchaînefacultatif - toujours webhook_endpoint
objectchaînefacultatif createdentierfacultatifSecondes Unix. Même instant que
createdAt.- format uri
urlchaînefacultatif descriptionchaîne ou `null`facultatifenabledEventsliste· de chaînefacultatif- valeurs : enabled, disabled
statuschaînefacultatif - au plus 50 clés
metadataobjetfacultatifClés libres (longueur maximale 40), valeurs de type chaîne (longueur maximale 500).
⚠️ Une valeur qui ressemble à un numéro de carte bancaire est REFUSÉE, sur toutes les ressources : Tupay n'en stocke jamais, y compris ici. Ce refus protège votre conformité PCI-DSS autant que la nôtre. Si c'est une référence interne numérique, préfixez-la (« cmd-… ») pour lever l'ambiguïté.
Vos propres clés et valeurs, attachées à l'objet et relisibles avec lui. De quoi relier une ressource Tupay à votre système sans tenir de table de correspondance.
Bornes : 50 clés au plus, 40 caractères par clé, 500 par valeur. Elles portent sur le RÉSULTAT de la fusion, pas sur ce que vous envoyez : ajouter 5 clés à un objet qui en compte 48 est refusé.
À la modification, les clés fournies remplacent les anciennes et les autres survivent. Une clé à
nullest supprimée. Un objet vide ne change rien, etmetadata: nullefface tout.Ce n'est pas un espace de stockage : les valeurs ne sont ni indexées ni cherchables, et n'ont aucun effet sur le traitement.
livemodebooléenfacultatif- format date-time
createdAtchaînefacultatifDoublon de
created. Lisezcreated. - format date-time
updatedAtchaînefacultatif - format date-time
disabledAtchaîne ou `null`facultatif
WebhookDelivery
- format uuid
idchaînefacultatif - toujours webhook_delivery
objectchaînefacultatif createdentierfacultatifSecondes Unix. Même instant que
createdAt.eventIdchaînefacultatifeventTypechaînefacultatif- valeurs : pending, succeeded, failed, exhausted
statuschaînefacultatif attemptsentierfacultatifresponseStatusentier ou `null`facultatifresponseBodychaîne ou `null`facultatiflastErrorchaîne ou `null`facultatif- format date-time
nextRetryAtchaîne ou `null`facultatif - format date-time
deliveredAtchaîne ou `null`facultatif livemodebooléenfacultatifLe mode de l'endpoint destinataire — une livraison n'en porte pas elle-même. Sans lui, vous ne pouviez pas savoir si une livraison affichée était réelle ou de test sans remonter à son endpoint.
- format date-time
createdAtchaînefacultatifDoublon de
created. Lisezcreated.
Merchant
- format uuid
idchaînefacultatif - toujours merchant
objectchaînefacultatif createdentierfacultatifSecondes Unix. Même instant que
createdAt.- format email
emailchaînefacultatif namechaînefacultatif- valeurs : pending, validated, rejected
kybStatuschaînefacultatif ibanXpfchaîne ou `null`facultatif- valeurs : exempt, 5, 10, 16
tgcRatechaînefacultatif - au plus 50 clés
metadataobjetfacultatifClés libres (longueur maximale 40), valeurs de type chaîne (longueur maximale 500).
⚠️ Une valeur qui ressemble à un numéro de carte bancaire est REFUSÉE, sur toutes les ressources : Tupay n'en stocke jamais, y compris ici. Ce refus protège votre conformité PCI-DSS autant que la nôtre. Si c'est une référence interne numérique, préfixez-la (« cmd-… ») pour lever l'ambiguïté.
Vos propres clés et valeurs, attachées à l'objet et relisibles avec lui. De quoi relier une ressource Tupay à votre système sans tenir de table de correspondance.
Bornes : 50 clés au plus, 40 caractères par clé, 500 par valeur. Elles portent sur le RÉSULTAT de la fusion, pas sur ce que vous envoyez : ajouter 5 clés à un objet qui en compte 48 est refusé.
À la modification, les clés fournies remplacent les anciennes et les autres survivent. Une clé à
nullest supprimée. Un objet vide ne change rien, etmetadata: nullefface tout.Ce n'est pas un espace de stockage : les valeurs ne sont ni indexées ni cherchables, et n'ont aucun effet sur le traitement.
livemodebooléenfacultatif- format date-time
createdAtchaînefacultatifDoublon de
created. Lisezcreated. - format date-time
updatedAtchaînefacultatif - valeurs : pending, validated, rejected
kyb_statuschaînefacultatifDoublon de
kybStatus. Servi au minimum douze mois, puis retiré par une version datée. iban_xpfchaîne ou `null`facultatifDoublon de
ibanXpf. LisezibanXpf.- valeurs : exempt, 5, 10, 16
tgc_ratechaînefacultatifDoublon de
tgcRate. LiseztgcRate. - format date-time
created_atchaînefacultatifDoublon de
createdAt. LisezcreatedAt, oucreated. - format date-time
updated_atchaînefacultatifDoublon de
updatedAt. LisezupdatedAt.
Event
Événement tel que l'API le RESTITUE.
À ne pas confondre avec WebhookEvent, l'enveloppe REÇUE sur votre endpoint. Les deux décrivent le même fait, mais l'enveloppe porte en plus apiVersion : elle est construite au moment de la livraison, pour la version de l'endpoint destinataire.
- exemple evt_9f8c1a2b3d4e5f60
idchaînefacultatif - valeurs : event
objectchaînefacultatif - exemple 1767225600
createdentierfacultatifSecondes Unix. Même instant que
createdAt. - exemple payment.succeeded
typechaînefacultatif - format date-time
createdAtchaînefacultatifDoublon de
created. Lisezcreated. livemodebooléenfacultatifdataobjetfacultatifobjectobjetfacultatifForme identique dans les réponses REST et dans
data.objectdes webhooks : un seul modèle à écrire côté intégrateur.- format uuid
idchaînefacultatif - toujours transaction
objectchaînefacultatif createdentierfacultatifSecondes Unix. Même instant que
createdAt.amountXpfentierfacultatifamountEurCentsentierfacultatifCentimes EUR, pour réconciliation avec le prestataire bancaire.
- toujours XPF
currencychaînefacultatif - valeurs : pending, processing, succeeded, failed, refunded
statuschaînefacultatif paymentIntentIdchaînefacultatif- format uuid
customerIdchaîne ou `null`facultatifClient rattaché,
nullpour un encaissement de passage. Développable :expand[]=customer. - format uuid
paymentMethodIdchaîne ou `null`facultatifCarte enregistrée débitée,
nullsi le porteur a saisi la sienne. Développable :expand[]=payment_method. offSessionbooléenfacultatifLe porteur n'était pas devant son écran.
- valeurs : card_declined, expired_card, incorrect_cvc, insufficient_funds, processing_error, authentication_required, null
failureCodechaîne ou `null`facultatifSur un échec : la raison, en code machine stable.
authentication_requiredn'est pas un refus. failureMessagechaîne ou `null`facultatifLa même raison, en français, montrable au marchand.
- format uuid
paymentLinkIdchaîne ou `null`facultatif - au plus 50 clés
metadataobjetfacultatifClés libres (longueur maximale 40), valeurs de type chaîne (longueur maximale 500).
⚠️ Une valeur qui ressemble à un numéro de carte bancaire est REFUSÉE, sur toutes les ressources : Tupay n'en stocke jamais, y compris ici. Ce refus protège votre conformité PCI-DSS autant que la nôtre. Si c'est une référence interne numérique, préfixez-la (« cmd-… ») pour lever l'ambiguïté.
Vos propres clés et valeurs, attachées à l'objet et relisibles avec lui. De quoi relier une ressource Tupay à votre système sans tenir de table de correspondance.
Bornes : 50 clés au plus, 40 caractères par clé, 500 par valeur. Elles portent sur le RÉSULTAT de la fusion, pas sur ce que vous envoyez : ajouter 5 clés à un objet qui en compte 48 est refusé.
À la modification, les clés fournies remplacent les anciennes et les autres survivent. Une clé à
nullest supprimée. Un objet vide ne change rien, etmetadata: nullefface tout.Ce n'est pas un espace de stockage : les valeurs ne sont ni indexées ni cherchables, et n'ont aucun effet sur le traitement.
livemodebooléenfacultatifrefundedAmountXpfentierfacultatifCumul remboursé. C'est ce champ qui fait foi, pas
status: un remboursement partiel laissestatusàsucceeded.- format date-time
refundedAtchaîne ou `null`facultatif - format date-time
createdAtchaînefacultatifDoublon de
created. Lisezcreated. - format date-time
updatedAtchaînefacultatif
WebhookEvent
Enveloppe POSTée sur les endpoints déclarés.
Signature dans le header Tupay-Signature: t=<unix>,v1=<hmac hex> : HMAC-SHA256 de ${t}.${corps brut} avec le secret de l'endpoint. Vérification obligatoire côté marchand, tolérance 5 min.
idchaînefacultatifIdentifiant d'événement. Dédupliquez dessus.
- toujours event
objectchaînefacultatif - valeurs : payment.succeeded, payment.failed, payment.processing, payment.refunded
typechaînefacultatif - toujours 2026-01-01
apiVersionchaînefacultatif createdentierfacultatifHorodatage Unix en secondes.
livemodebooléenfacultatifdataobjetfacultatifobjectobjetfacultatifForme identique dans les réponses REST et dans
data.objectdes webhooks : un seul modèle à écrire côté intégrateur.- format uuid
idchaînefacultatif - toujours transaction
objectchaînefacultatif createdentierfacultatifSecondes Unix. Même instant que
createdAt.amountXpfentierfacultatifamountEurCentsentierfacultatifCentimes EUR, pour réconciliation avec le prestataire bancaire.
- toujours XPF
currencychaînefacultatif - valeurs : pending, processing, succeeded, failed, refunded
statuschaînefacultatif paymentIntentIdchaînefacultatif- format uuid
customerIdchaîne ou `null`facultatifClient rattaché,
nullpour un encaissement de passage. Développable :expand[]=customer. - format uuid
paymentMethodIdchaîne ou `null`facultatifCarte enregistrée débitée,
nullsi le porteur a saisi la sienne. Développable :expand[]=payment_method. offSessionbooléenfacultatifLe porteur n'était pas devant son écran.
- valeurs : card_declined, expired_card, incorrect_cvc, insufficient_funds, processing_error, authentication_required, null
failureCodechaîne ou `null`facultatifSur un échec : la raison, en code machine stable.
authentication_requiredn'est pas un refus. failureMessagechaîne ou `null`facultatifLa même raison, en français, montrable au marchand.
- format uuid
paymentLinkIdchaîne ou `null`facultatif - au plus 50 clés
metadataobjetfacultatifClés libres (longueur maximale 40), valeurs de type chaîne (longueur maximale 500).
⚠️ Une valeur qui ressemble à un numéro de carte bancaire est REFUSÉE, sur toutes les ressources : Tupay n'en stocke jamais, y compris ici. Ce refus protège votre conformité PCI-DSS autant que la nôtre. Si c'est une référence interne numérique, préfixez-la (« cmd-… ») pour lever l'ambiguïté.
Vos propres clés et valeurs, attachées à l'objet et relisibles avec lui. De quoi relier une ressource Tupay à votre système sans tenir de table de correspondance.
Bornes : 50 clés au plus, 40 caractères par clé, 500 par valeur. Elles portent sur le RÉSULTAT de la fusion, pas sur ce que vous envoyez : ajouter 5 clés à un objet qui en compte 48 est refusé.
À la modification, les clés fournies remplacent les anciennes et les autres survivent. Une clé à
nullest supprimée. Un objet vide ne change rien, etmetadata: nullefface tout.Ce n'est pas un espace de stockage : les valeurs ne sont ni indexées ni cherchables, et n'ont aucun effet sur le traitement.
livemodebooléenfacultatifrefundedAmountXpfentierfacultatifCumul remboursé. C'est ce champ qui fait foi, pas
status: un remboursement partiel laissestatusàsucceeded.- format date-time
refundedAtchaîne ou `null`facultatif - format date-time
createdAtchaînefacultatifDoublon de
created. Lisezcreated. - format date-time
updatedAtchaînefacultatif
Error
Testez error (code machine stable). message est destiné à un humain, est en français et peut changer sans préavis : une reformulation ne change jamais le code.
Retirer ou renommer un code est un changement cassant, réservé à une version datée. En ajouter un ne l'est pas : traitez un code inconnu comme sa classe type.
type est la CLASSE de l'erreur. Elle permet un seul branchement pour toute une famille, sans énumérer chaque code.
errorchaînerequisCode machine stable, en snake_case anglais.
- valeurs : invalid_request, authentication, permission, not_found, conflict, idempotency, rate_limit, provider, api
typechaînerequisClasse de l'erreur, dans un ensemble fermé.
invalid_request: l'appel est mal formé ou hors bornes, corrigez la requête.authentication: aucune identité valide.permission: identité valide, opération refusée.not_found: la ressource n'existe pas, ou pas pour vous.conflict: l'état courant interdit l'opération, ne retentez pas à l'identique.idempotency: le refus porte sur la clé d'idempotence, pas sur la requête.rate_limit: trop d'appels.provider: le prestataire bancaire a refusé ou n'a pas répondu.api: incident de notre côté, rien à corriger chez vous. messagechaînerequisDestiné à un humain, toujours en français.
codeentierrequisStatut HTTP, repris dans le corps par commodité.