Set Product Prices
PUT https://api.secure.quotivity.com/v1/pricebooks/{priceBookId}/pricesSets prices for multiple products in a price book. Accepts either a single all-products price object or an array of specific-product price objects. Combine product changes into larger requests and keep parallel requests in the low single digits. Specific-product writes persist before HubSpot price-book membership is synchronized asynchronously, so membership is eventually consistent. Requests with more than 500 resolved entries are fully processed asynchronously and return 204. If a HubSpot-dependent request returns 429, wait at least retryAfterSeconds before retrying.
Send your API key in the x-api-key header. See Generating API keys.
Path parameters
Section titled “Path parameters”| Name | Type | Required | Description |
|---|---|---|---|
priceBookId |
string | Yes | — |
Request body
Section titled “Request body”Required, application/json: AllProductsPriceRequest | SpecificProductPriceRequest[]
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 |
PriceBookEntry[] | Prices set successfully |
204 |
— | Bulk update of more than 500 resolved entries accepted for asynchronous processing; no response body |
401 |
— | Unauthorized |
404 |
— | Price book not found |
429 |
HubSpotRateLimitResponse | HubSpot account cooldown is active. Wait at least retryAfterSeconds before retrying. |
500 |
— | Internal Server Error |
Schemas
Section titled “Schemas”AllProductsPriceRequest
Section titled “AllProductsPriceRequest”Extends SpecificProductPriceRequest.
| Field | Type | Required | Description |
|---|---|---|---|
productId |
all |
Yes | — |
adjustments |
map of string to PercentAdjustment | CostPlusAdjustment | Yes | Price adjustments keyed by ISO 4217 currency code (for example USD, EUR); keys are uppercased by the API. The key is the currency; the value carries the adjustment only. When productId is all only percent and costplus adjustments are accepted (a costplus adjustment is copied to every product, which then prices from its own cost). Send null for a currency to clear it. |
calculationIdOverride |
string | null | No | Optional calculated pricing override for this entry; null clears. |
allowUnitPriceEditing |
boolean | null | No | Entry-level unit-price editing flag for Quote Builder; null clears. Do not send inside adjustment objects. |
CostPlusAdjustment
Section titled “CostPlusAdjustment”Derives the list price from the product’s hs_cost_of_goods_sold: basis amount adds value to cost; basis percent applies value as a fraction of cost (0.3 = 30%) as a markup (cost × (1 + value)) or a margin (cost ÷ (1 − value)). Non-primary currencies convert the cost with the account’s cached HubSpot exchange rate. value must not be negative and a margin must be below 1. Requires the Cost Plus feature (Enterprise).
Extends PriceAdjustmentBase.
| Field | Type | Required | Description |
|---|---|---|---|
type |
costplus |
Yes | — |
basis |
amount | percent |
Yes | — |
mode |
markup | margin |
No | Read only when basis is percent; defaults to markup. |
value |
number | Yes | Currency amount above cost for amount; fraction of cost for percent. |
round |
boolean | No | Round the derived price to 2 decimals (default true); false keeps 5 decimals. |
HubSpotRateLimitResponse
Section titled “HubSpotRateLimitResponse”Returned when a request that depends on HubSpot is blocked by an account cooldown. Wait at least retryAfterSeconds before retrying, use low single-digit concurrency, and combine product changes into larger requests.
| Field | Type | Required | Description |
|---|---|---|---|
message |
string | Yes | — |
code |
HUBSPOT_RATE_LIMIT |
Yes | — |
retryAfterSeconds |
integer | No | — |
Example message:
"HubSpot API rate limit reached. Please wait a few seconds and try again."Example retryAfterSeconds:
10NullAdjustment
Section titled “NullAdjustment”Extends PriceAdjustmentBase.
| Field | Type | Required | Description |
|---|---|---|---|
type |
null |
Yes | Explicitly clear an adjustment (represents null). |
amount |
null |
Yes | Always null for a NullAdjustment. |
OverrideAdjustment
Section titled “OverrideAdjustment”Extends PriceAdjustmentBase.
| Field | Type | Required | Description |
|---|---|---|---|
type |
override |
Yes | — |
amount |
number | Yes | — |
PercentAdjustment
Section titled “PercentAdjustment”Extends PriceAdjustmentBase.
| Field | Type | Required | Description |
|---|---|---|---|
type |
percent |
Yes | — |
amount |
number | Yes | — |
PriceAdjustmentBase
Section titled “PriceAdjustmentBase”| Field | Type | Required | Description |
|---|---|---|---|
type |
string | Yes | — |
PriceBookEntry
Section titled “PriceBookEntry”| Field | Type | Required | Description |
|---|---|---|---|
accountId |
string | Yes | — |
priceBookId |
string | Yes | — |
productId |
string | Yes | — |
adjustments |
map of string to PriceBookEntryAdjustment | Yes | Price adjustments keyed by ISO 4217 currency code (for example USD, EUR). The key is the currency; the value carries the adjustment only. |
calculationIdOverride |
string | No | When set, overrides default calculated pricing for this price book entry. Cleared when null. |
allowUnitPriceEditing |
boolean | No | When true, sales reps may edit unit price in Quote Builder for this product on this price book (entry-level, not per currency). |
PriceBookEntryAdjustment
Section titled “PriceBookEntryAdjustment”Type: OverrideAdjustment | PercentAdjustment | CostPlusAdjustment | VolumeAdjustment | TableEnumAdjustment | TableRangeAdjustment | VariantAdjustment
SpecificProductPriceRequest
Section titled “SpecificProductPriceRequest”| Field | Type | Required | Description |
|---|---|---|---|
productId |
string | Yes | — |
adjustments |
map of string to NullAdjustment | OverrideAdjustment | PercentAdjustment | CostPlusAdjustment | TableEnumAdjustment | TableRangeAdjustment | VariantAdjustment | VolumeAdjustment | No | Price adjustments keyed by ISO 4217 currency code (for example USD, EUR); keys are uppercased by the API. The key is the currency: an adjustment value carries no currency field of its own, and there is no currency field beside productId. Each value is a single adjustment object, or null to clear that currency. |
calculationIdOverride |
string | null | No | Optional calculated pricing override for this entry; null clears. |
allowUnitPriceEditing |
boolean | null | No | Entry-level unit-price editing flag for Quote Builder; null clears. Do not send inside adjustment objects. |
Example adjustments:
{ "USD": { "type": "override", "amount": 100 }, "EUR": { "type": "percent", "amount": 0.9 }}TableEnumAdjustment
Section titled “TableEnumAdjustment”Extends PriceAdjustmentBase.
| Field | Type | Required | Description |
|---|---|---|---|
type |
enum |
Yes | — |
property |
string | Yes | — |
values |
object[] | Yes | — |
TableRangeAdjustment
Section titled “TableRangeAdjustment”Extends PriceAdjustmentBase.
| Field | Type | Required | Description |
|---|---|---|---|
type |
range |
Yes | — |
property |
string | Yes | — |
values |
object[] | Yes | — |
VariantAdjustment
Section titled “VariantAdjustment”Extends PriceAdjustmentBase.
| Field | Type | Required | Description |
|---|---|---|---|
type |
variant |
Yes | — |
values |
object[] | Yes | — |
VolumeAdjustment
Section titled “VolumeAdjustment”Extends PriceAdjustmentBase.
| Field | Type | Required | Description |
|---|---|---|---|
type |
volume |
Yes | — |
tiers |
object[] | Yes | — |
Ask the help center
Answers come from these guides, with links to the articles used.
Ask anything about configuring quoting in Quotivity Studio.