Scope requirements
Scope requirements
Create a product
To create a product make aPOST request to crm/objects/2026-03/products. In the request body, include a properties object containing any product properties that you’d like to set on create. You can later update a product’s properties through a PATCH request to the same endpoint.
To see all available product properties, make a GET request to the properties API. To retrieve product properties, the request URL will be /crm/properties/2026-03/products.
Note that the value for
hs_recurring_billing_period is formatted as P#M, where # is the number of months.Tiered pricing
HubSpot supports tiered pricing, which allows you to charge different rates based on the quantity purchased. Tiered pricing requires a Commerce Hub subscription and a Commerce Hub seat. When creating a product with tiered pricing, use the following properties instead of the standardprice property:
| Property | Type | Description |
|---|---|---|
hs_pricing_model | String | The pricing model. Can be one of the following:
Learn more about tiered pricing types on HubSpot’s Knowledge Base. |
hs_tier_ranges | String | A JSON array (serialized as a string) defining the quantity ranges for each tier. |
hs_tier_prices | String | A JSON array (serialized as a string) defining the price for each tier range. |
Define tier ranges
Thehs_tier_ranges property is a JSON array serialized as a string. Each object in the array defines one tier’s quantity range, referenced by its zero-based index. The final tier can be left open-ended by omitting the end value:
Define tier prices
Thehs_tier_prices property is a JSON array serialized as a string. Each entry’s index field references the corresponding range by its zero-based position in hs_tier_ranges. Every range must have a price entry:
currency field. You don’t need to provide prices for every currency your account supports, but each currency you include must have an entry for every range:
Single-currency example
The following example creates a volume-priced product with three tiers:Multi-currency example
For accounts with multiple currencies, include acurrency field on each tier price entry:
Retrieve with tiered pricing properties
To retrieve a product with all tiered pricing properties included, make aGET request to: /crm/objects/2026-03/products/{productId}?properties=hs_pricing_model,hs_tier_ranges,hs_tier_prices
The response will include the three tiered pricing properties alongside the standard product properties:
Associate products
Products themselves can’t be associated with other CRM objects. However, to associate a product’s information with a deal or a quote, you can create a line item based on that product. Line items are individual instances of products, and are a separate object from products so that you can tailor the goods and services on a deal or quote as needed without needing to update the product itself. For example, if you’re putting together a deal where one of your products is being sold, you’d first create a line item from the product, then associate it with the deal. You can either do this with two separate calls, or with one call that creates and associates the line item. Both options are shown below.Create and associate a line item (multiple calls)
First, you’ll create a line item based on a product with the ID of1234567. For a full list of available line item properties, make a GET request to the properties API. The URL for line items would be crm/properties/2026-03/line_items. Because you’re create the line item from an existing product, it will inherit property values from the product, such as price.
7791176460.
To associate the line item with an existing deal (ID: 14795354663), you’ll make a PUT request to /crm/objects/2026-03/line_items/7791176460/associations/default/deals/14795354663. This request uses the default association type.
A 200 response will return information similar to the following:

Create and associate a line item (single call)
To create a line item from an existing product and associate it with a deal using a single call, you can include anassociations array in the line item create request.
To create the line item, make a POST request to crm/objects/2026-03/line_item. Your request body will look similar to the following. Note that the associationTypeId for the line item-deal association is 20. Learn more about association types between different types of CRM records.
200 response will return details about the new line item. In HubSpot, the deal record will display the line item in the Line items card.
