Supported products
Supported products
Requires one of the following products or higher.
Scope requirements
Scope requirements
Changes for CPQ quotes
Below is an overview of the changes for creating CPQ quotes versus legacy quotes. Properties:- When creating a CPQ quote, you must set
hs_template_typetoCPQ_QUOTEat the time of creation. This automatically sets the quote to use a CPQ template. CPQ quote templates cannot be created via the API. Learn how to manage CPQ quote templates in HubSpot. - While many of the existing legacy quote properties are supported for configuring CPQ quotes, there’s a new set of CPQ-specific properties, which replaces some legacy properties.
- A CPQ quote must include line item, contact, and deal associations. For quotes that require signatures, you’ll also need to associate a signing contact.
- Currently, one-time discounts, taxes, fees, and payment schedules are not supported for CPQ quotes. You can still set discounts and tax rates on individual line items.
- If you want to associate a specific quote template with a quote, you can only do so at the time of creation. The quote template’s, properties, content, and associations will be added to the quote as supplemental information, with properties set on the quote overriding the quote template’s settings.
- A CPQ quote created via the API will automatically be set to
DRAFT. Other states such asPENDING_APPROVAL,APPROVED, andREJECTEDare primarily managed via the UI and approval workflows. - The state will automatically be updated to
ACCEPTEDwhen the buyer accepts the quote.
If you’re a partner (a user that is assigned a Partner Seat) in an account that has both legacy and CPQ quotes:
- When creating a quote in the UI, you can select either the legacy builder or CPQ builder.
- You can manage both legacy and CPQ approval workflows in the accounts Approvals settings.
Create a CPQ quote
To create a quote, make aPOST request to /crm/v3/objects/quotes. In the request body, you’ll specify the quote’s properties and associations with other CRM objects as needed.
At a minimum, a CPQ quote must include the following properties:
hs_titlehs_expiration_datehs_template_type(must be set toCPQ_QUOTE)
| Parameter | Type | Description |
|---|---|---|
hs_title | String | The title of the quote. |
hs_expiration_date | String | The date that the quote expires. |
hs_template_type | Enumeration | Specifies the type of quote template to use. For CPQ quotes, use CPQ_QUOTE. |
properties object, you can include properties for configuring the acceptance method (e.g., e-signature) and enabling payments, as shown below.
Enable e-signatures
By default, a CPQ quote will be configured for manual printing and signing. Use thehs_acceptance_method property to customize the quote’s signature requirements.
hs_acceptance_method can be set to one of the following:
clickwrap: renders a button on the quote to allow the buyer to accept by clicking (no signature).

esignature: renders a button on the quote that triggers an e-signature flow. This option requires at least one buyer contact to be associated with the quote as a signer. You can add one or more countersigners via the HubSpot UI to capture seller signatures.

print_and_sign(default): renders fields intended for printing and signing. This option requires at least one buyer contact to be associated with the quote as a signer. You can add one or more countersigners via the HubSpot UI to capture seller signatures.

Enable payments
If you’ve set up HubSpot payments or Stripe payment processing, the quote will automatically be configured to be payable through your connected payment processor. Payment details are configured by a set of default properties, which you can update as needed.| Parameter | Type | Description |
|---|---|---|
hs_payment_enabled | Boolean | By default, this will be set to true with a connected payment processor, which enables the quote to collect payment using either HubSpot payments or Stripe payment processing. |
hs_billing_enabled | Boolean | By default, this will be set to true with a connected payment processor, which enables HubSpot to automatically create invoices and subscriptions for the transaction. When set to true, hs_payment_enabled must also be true. This property is only available for CPQ quotes. |
hs_payment_type | Enumeration | Determines which payment processor to use. Automatically set by HubSpot based on the account’s payment processor. Value can be either HUBSPOT or BYO_STRIPE. |
hs_payment_status | Enumeration | The status of payment collection, if you’ve enabled payments. Upon publishing with payments enabled, this property will be set to PENDING. Once the buyer submits payment through the quote, the status will automatically update accordingly. Learn more about enabling payments. |
hs_allowed_payment_methods | Enumeration | The payment methods to be used. By default, this will be set to the payment methods configured for the account. Can be one of: ACH, CREDIT_OR_DEBIT_CARD, SEPA, BACS, PADS. |
hs_collect_billing_address | Boolean | When set to true, allows the buyer to enter their billing address during checkout. |
hs_collect_shipping_address | Boolean | When set to true, allows the buyer to enter their shipping address during checkout. |
Quote associations
In order for a CPQ quote to be published and shared externally, the quote must include line item, contact, and deal associations. For quotes that require signatures, you’ll also need to associate a signing contact. You can set these associations either when creating the quote or by updating it via the associations API. By default, setting a quote’shs_template_type to CPQ_QUOTE will automatically create the quote using the default CPQ quote template. However, you can specify a different template at the time of creation if needed. The quote template’s properties, content, and associations will be added to the quote as supplemental information, with properties set on the quote overriding the quote template’s settings. Learn more about setting associations when creating a quote.
Below are the associations available for CPQ quotes.
| Object type | Type ID | Description |
|---|---|---|
| Line items Required | 67 | The goods and/or services being sold through the quote. You can create line items from products in your product library or create custom standalone line items. |
| Deal Required | 64 | The deal record for tracking revenue and sales lifecycle. A quote inherits values from the associated deal, including the owner and currency. Each quote can be associated with one deal. |
| Contact Required | 69 | Specific buyers that you’re addressing in the quote. |
| Contact (signer) | 702 | Specifies the contact whose signature is required on the quote. This association is required if the quote requires a signature. |
| Company | 71 | A specific company that you’re addressing in the quote. Each quote can be associated with one company. |
| Quote template | 286 | The template that renders the quote. This association can only be set at the time of creation. The quote template’s properties, content, and associations will be added to the quote as supplemental information, with properties set on the quote overriding the quote template’s settings. |
Set associations when creating a quote
To set associations when creating a quote, include theassociations array in the request body. For each CRM object you’re associating with the quote, you’ll include an object with association details, such as the ID of the CRM record and the ID of the association type.
For example, the request body below would create a CPQ quote that’s associated with a contact, a deal, and a line item. A list of association type IDs for the available CRM object associations is provided in the table below the code sample.
Associating after creation
To configure associations for an existing quote, make aPOST request to the following associations API endpoint for each association:
/crm/v4/objects/quote/{quoteId}/associations/default/{toObjectType}/{toObjectId}
| Parameter | Description |
|---|---|
quoteId | The ID of the quote. |
toObjectType | The type of CRM object to associate with the quote (e.g., contact). |
toObjectId | The ID of the CRM record to associate with. |
1234567 with a contact that has an ID of 8675309:
/crm/v4/objects/quote/1234567/associations/default/contact/8675309
Quote properties
Below is a list of available default quote properties, including properties that can only be used with CPQ quotes. To fetch all available quote properties from a given account, make aGET request to crm/v3/properties/quotes. Learn more about the properties API.
The following legacy quote properties are not supported in CPQ quotes:
hs_esign_enabled(replaced byhs_acceptance_method)hs_show_signature_box(replaced byhs_acceptance_method)hs_proposal_*(e.g.,hs_proposal_domain)
CPQ properties
The properties below can be used exclusively with CPQ quotes.| Property | Type | Description |
|---|---|---|
hs_acceptance_method | Enumeration | The acceptance method of the quote. Can be one of:
|
hs_billing_enabled | Boolean | Set to true to enable automatic invoice and subscription creation. |
hs_clickwrap_accepted_by | String | The name or identifier of the individual who accepted the quote via clickwrap (i.e., without providing a handwritten or electronic signature). |
hs_collection_process | Enumeration | Sets how payments for the quote are collected. Can be one of:
|
hs_contract_effective_start_date | Date | Contract effective start date. |
hs_contract_effective_start_date_type | Enumeration | How the effective start date of a contract is determined. Can be one of:
|
hs_contract_effective_start_delayed_by_days | Number | The number of days that the contract’s effective start date is delayed by. |
hs_contract_effective_start_delayed_by_months | Number | The number of months that the contract’s effective start date is delayed by. |
hs_cover_letter | String | The cover letter presented on the quote. |
hs_net_payment_terms | Number | The period in days in which a buyer must make a full payment. |
Properties set by quote state
Updating the quote’s state will update the following properties:| Property | Type | Description |
|---|---|---|
hs_quote_amount | Number | The total amount due for the quote. This can be either total contract value or the amount due at checkout depending on portal settings. |
hs_domain | String | Domain this quote should be served from. |
hs_slug | String | Path to serve this quote from. |
hs_quote_total_preference | Enumeration | What LineItem property will be used to calculate the Quote Amount. |
hs_timezone | String | Timezone for displaying dates on the quote. |
hs_locale | String | The locale for displaying this quote publicly. |
hs_quote_number | String | Reference number shown on quote document. |
hs_language | String | The language for displaying this quote publicly. |
hs_currency | String | Currency code for the quote. |
| Property | Type | Description |
|---|---|---|
hs_pdf_download_link | String | Populated with a URL of a PDF for the quote. |
hs_locked | Boolean | Set to true. To modify any properties after you’ve published a quote, you must first update the hs_status of the quote back to DRAFT, PENDING_APPROVAL, or REJECTED. |
hs_quote_link | String | The quote’s publicly accessible URL. This is a read-only property and cannot be set through the API after publishing. |
hs_esign_num_signers_required | Number | If you’ve enabled e-signatures, displays the number of signatures required. |
hs_payment_status | Enumeration | The status of payment collection, if you’ve enabled payments. Upon publishing with payments enabled, this property will be set to PENDING. Once the buyer submits payment through the quote, the status will automatically update accordingly. Learn more about enabling payments. |