Skip to main content
The product catalog is global per account — it is shared by every pipeline, never scoped to just one of them.
A deal also accepts one-off lines (custom: true), which exist only inside it and never enter the global catalog. See Create a deal.

The Product object

id
string
Product UUID
name
string
Product name
price
number
Default unit price

List products

GET /backend/pipeline/products
Requires pipeline.view.

Create a product

POST /backend/pipeline/products
Requires pipeline.products.manage.

Request Body

name
string
required
Product name
price
number
Unit price. Default: 0.
Returns 201 Created with the product.

Update a product

PUT /backend/pipeline/products/{id}
Requires pipeline.products.manage.
name
string
required
Product name
price
number
Unit price
Changing the price in the catalog does not change existing deals. Name and price are copied into the line at the moment the product is added to the deal, preserving the historical value of the negotiation.

Delete a product

DELETE /backend/pipeline/products/{id}
Requires pipeline.products.manage.
Deleting a product does not break the deals that already use it. Existing lines become one-off lines (custom: true, product_id: null), preserving name and price — the deals stay editable and the total does not change.