Products
Les objets Product représentent les biens ou services que vous vendez. En associant un Product à un CheckoutSession, un PaymentLink ou une Invoice, vous affichez les détails du produit sur la page de paiement et dans les reçus.
Chaque Product embarque son propre prix (unit_amount + currency). Pour des produits à prix variable ou des dons libres, utilisez price_type: “free”.
Vous pouvez créer un PaymentIntent avec un amount brut sans Product. Les
Products sont recommandés dès que vous souhaitez afficher un nom, une description et une
image sur la page de paiement, ou générer des rapports par produit dans votre dashboard.
Endpoints
| Méthode | Endpoint | Description |
|---|---|---|
| POST | /products/ | Créer un produit |
| GET | /products/ | Lister les produits (paginé, filtrable) |
| GET | /products/{id}/ | Récupérer un produit par son ID |
| PATCH | /products/{id}/ | Modifier un produit |
| DELETE | /products/{id}/ | Archiver un produit (soft delete) |
Schéma de l’objet
Créer un Product
Crée un nouveau produit dans votre catalogue. Le produit est immédiatement disponible pour être associé à un CheckoutSession, PaymentLink ou Invoice.
nameRequisNom du produit. Visible par l’acheteur sur la page de paiement, dans les reçus et les emails de confirmation.
Max 255 caractères. Choisissez un nom clair et descriptif — c’est la première information que l’acheteur voit avant de payer.
unit_amountRequisPrix unitaire en centimes. Ignoré si price_type est free.
Même règle que pour les PaymentIntents : exprimez toujours en centimes. 25 000 XAF
= 25000. Pour les devises à décimales (USD, EUR), 25 USD = 2500.
currencyRequisCode ISO 4217 de la devise du produit. Doit correspondre à une devise activée sur votre App.
price_typeRequisDétermine si le prix est fixe ou libre. Valeurs : fixed (prix défini
par unit_amount) ou free (l’acheteur saisit le montant).
free est idéal pour les dons, le crowdfunding ou les paiements
“pay what you want”. Dans ce mode, unit_amount peut servir de montant
suggéré affiché à l’acheteur.
descriptionOptionnelDescription détaillée du produit. Affichée sous le nom sur la page de paiement et dans les reçus.
En savoir plus
Max 2 000 caractères. Texte brut uniquement — pas de HTML. Une bonne description augmente la confiance de l’acheteur et réduit les abandons de paiement.
imagesOptionnelListe d’URLs d’images du produit. La première image est utilisée comme image principale sur la page de paiement.
En savoir plus
Maximum 8 images. Formats acceptés : JPEG, PNG, WebP. Dimensions recommandées : 800×800 px minimum. Les URLs doivent être publiquement accessibles (HTTPS). Sangho ne stocke pas les images — référencez vos propres URLs CDN.
activeOptionnelIndique si le produit est actif et peut être utilisé dans de nouveaux CheckoutSessions, PaymentLinks ou Invoices.
En savoir plus
Désactiver un produit (active: false) ne supprime pas les liens
existants — les paiements en cours restent valides. C’est un moyen de retirer un
produit du catalogue sans perdre l’historique.
metadataOptionnelDonnées libres associées au produit — SKU interne, catégorie, référence ERP, etc.
En savoir plus
Les métadonnées du Product sont incluses dans les webhooks checkout.completed et payment_intent.succeeded quand un
Product est attaché. Pratique pour déclencher des automatisations côté serveur
(livraison de licence, activation d’accès, etc.).
Créer un Product
Lister les Products
activeOptionnelFiltrer par statut d’activation. true retourne uniquement les produits
actifs, false les archivés.
En savoir plus
Par défaut (sans ce filtre), tous les produits actifs ET archivés sont retournés.
Utilisez active=true pour n’afficher que le catalogue courant à vos
clients.
currencyOptionnelFiltrer par devise. Utile si votre catalogue couvre plusieurs marchés avec des devises différentes.
searchOptionnelRecherche sur le nom et la description du produit. Partielle, insensible à la casse.
orderingOptionnelTri. Champs disponibles : created_at, name, unit_amount.
pageOptionnelpage_sizeOptionnelModifier un Product
Modifie les champs d’un Product existant. Le changement de prix (
unit_amount) n’affecte pas les CheckoutSessions ou PaymentLinks déjà
créés — seuls les nouveaux utilisent le nouveau prix.
nameOptionnelNouveau nom. Mis à jour sur la page de paiement pour les liens existants non encore payés.
unit_amountOptionnelEn savoir plus
Modifier le prix d’un produit n’affecte pas rétroactivement les sessions de paiement déjà créées. Seuls les nouveaux CheckoutSessions créés après la modification utiliseront le nouveau prix.
activeOptionnelActiver (true) ou archiver (false) le produit.
metadataOptionnelArchiver un Product
L’endpoint DELETE archive le produit (soft delete) en passant active à false. Le produit reste accessible via l’API mais ne peut plus être
attaché à de nouveaux liens.
Contrairement aux Customers, la suppression d’un Product est réversible. Vous pouvez
le réactiver via PATCH { active: true }. Les PaymentLinks et
CheckoutSessions existants qui référencent ce produit continuent de fonctionner.