Products
Product objects represent the goods or services you sell. By attaching a Product to a CheckoutSession, a PaymentLink, or an Invoice, you display the product’s details on the payment page and in receipts.
Each Product carries its own price (unit_amount + currency). For variable-priced products or open donations, use price_type: “free”.
You can create a PaymentIntent with a raw amount without a Product.
Products are recommended as soon as you want to display a name, description, and
image on the payment page, or generate per-product reports in your dashboard.
Endpoints
| Méthode | Endpoint | Description |
|---|---|---|
| POST | /products/ | Create a product |
| GET | /products/ | List products (paginated, filterable) |
| GET | /products/{id}/ | Retrieve a product by its ID |
| PATCH | /products/{id}/ | Update a product |
| DELETE | /products/{id}/ | Archive a product (soft delete) |
Object schema
Create a Product
Creates a new product in your catalog. The product is immediately available to be attached to a CheckoutSession, PaymentLink, or Invoice.
nameRequisName of the product. Visible to the buyer on the payment page, in receipts, and in confirmation emails.
Max 255 characters. Choose a clear, descriptive name — it’s the first piece of information the buyer sees before paying.
unit_amountRequisUnit price in cents. Ignored if price_type is free.
Same rule as for PaymentIntents: always express in cents. 25,000 XAF
= 25000. For decimal currencies (USD, EUR), 25 USD = 2500.
currencyRequisISO 4217 currency code for the product. Must match a currency enabled on your App.
price_typeRequisDetermines whether the price is fixed or open. Values: fixed (price set
by unit_amount) or free (the buyer enters the amount).
free is ideal for donations, crowdfunding, or
“pay what you want” payments. In this mode, unit_amount can serve as a
suggested amount displayed to the buyer.
descriptionOptionnelDetailed description of the product. Displayed below the name on the payment page and in receipts.
En savoir plus
Max 2,000 characters. Plain text only — no HTML. A good description increases buyer confidence and reduces payment abandonment.
imagesOptionnelList of product image URLs. The first image is used as the main image on the payment page.
En savoir plus
Maximum 8 images. Accepted formats: JPEG, PNG, WebP. Recommended dimensions: 800×800 px minimum. URLs must be publicly accessible (HTTPS). Sangho does not store images — reference your own CDN URLs.
activeOptionnelIndicates whether the product is active and can be used in new CheckoutSessions, PaymentLinks, or Invoices.
En savoir plus
Deactivating a product (active: false) does not delete existing
links — payments in progress remain valid. It’s a way to remove a
product from the catalog without losing history.
metadataOptionnelFree-form data associated with the product — internal SKU, category, ERP reference, etc.
En savoir plus
The Product’s metadata is included in the checkout.completed and payment_intent.succeeded webhooks when a
Product is attached. Useful for triggering server-side automations
(license delivery, access activation, etc.).
Create a Product
List Products
activeOptionnelFilter by activation status. true returns only active
products, false returns archived ones.
En savoir plus
By default (without this filter), all active AND archived products are returned.
Use active=true to show only the current catalog to your
customers.
currencyOptionnelFilter by currency. Useful if your catalog covers multiple markets with different currencies.
searchOptionnelSearch on the product’s name and description. Partial match, case-insensitive.
orderingOptionnelSorting. Available fields: created_at, name, unit_amount.
pageOptionnelpage_sizeOptionnelUpdate a Product
Updates the fields of an existing Product. Changing the price (
unit_amount) does not affect CheckoutSessions or PaymentLinks already
created — only new ones use the new price.
nameOptionnelNew name. Updated on the payment page for existing links not yet paid.
unit_amountOptionnelEn savoir plus
Changing a product’s price does not retroactively affect payment sessions already created. Only new CheckoutSessions created after the change will use the new price.
activeOptionnelActivate (true) or archive (false) the product.
metadataOptionnelArchive a Product
The DELETE endpoint archives the product (soft delete) by setting active to false. The product remains accessible via the API but can no longer be
attached to new links.
Unlike Customers, deleting a Product is reversible. You can
reactivate it via PATCH { active: true }. Existing PaymentLinks and
CheckoutSessions that reference this product continue to work.