Skip to main content

Supported products

HubSpot quotes offer enhanced functionality over legacy quotes. While you can build both types of quotes using the same API, there are important differences in how you create and manage them. If you’ve set up either HubSpot payments or Stripe payment processing, you can configure a quote to be payable through this API. Learn more about payable quotes below.
Creating a quote requires a Revenue Hub Professional or Enterprise subscription. Other accounts created before September 3rd, 2025 may have access to legacy quotes:
  • Users in a Free account: access to legacy quotes if one or more quotes were created in the 6 months prior to Sept. 3rd, 2025.
  • Users in a Sales Hub account: continue to have access to legacy quotes after Sept. 3rd, 2025.
If the account has access to legacy quotes and you’re assigned a Revenue Hub seat, you’ll no longer be able to create new legacy quotes via the UI, but you can still view and edit existing legacy quotes. To go back to the legacy experience, you’ll need to change your seat to a core or view-only seat.

Quotes vs. legacy quotes

Below is an overview of the differences between quotes and legacy quotes. For a full comparison, see Differences between legacy quotes and Revenue Hub quotes on HubSpot’s Knowledge Base. Properties:
  • When creating a quote, you must set hs_template_type to CPQ_QUOTE at the time of creation. This automatically sets the quote to use the correct type of template. Learn more about quote templates below.
  • While many of the existing legacy quote properties are supported for configuring quotes, there’s a new set of properties, which replaces some legacy properties.
Associations:
  • A 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 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.
Learn more about quote associations. Quote states:
  • A quote created via the API will automatically be set to DRAFT. Other states such as PENDING_APPROVAL,APPROVED, and REJECTED are primarily managed via the UI and approval workflows.
  • The state will automatically be updated to ACCEPTED when the buyer accepts the quote.
If you’re a partner (a user that is assigned a Partner Seat) in an account that still has access to legacy quotes:
  • When creating a quote in the UI, you’ll have the option of creating a quote or a legacy quote.
  • You can manage approval workflows for all quote types in the accounts Approvals settings.

Create a quote

To create a quote, make a POST request to /crm/objects/2026-03/quotes. In the request body, you’ll specify the quote’s properties and associations with other CRM objects as needed. At a minimum, a quote must include the following properties:
  • hs_title
  • hs_expiration_date
  • hs_template_type (must be set to CPQ_QUOTE)
Within the 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 quote will be configured for manual printing and signing. Use the hs_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).
Screenshot of the clickwrap option rendering on a quote template in HubSpot
  • 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.
Screenshot of the esignature option rendering on a quote template in HubSpot
  • 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.
Screenshot of the print_and_sign option rendering on a quote template in HubSpot
Please note:A quote with e-sign enabled can’t be published if the account has exceeded its monthly e-signature limit.

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.

Quote associations

For a quote to be published and shared externally, it 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’s hs_template_type to CPQ_QUOTE will automatically create the quote using the default 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 quotes.

Set associations when creating a quote

To set associations when creating a quote, include the associations 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 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 a POST request to the following associations API endpoint for each association: /crm/objects/2026-03/quote/{quoteId}/associations/default/{toObjectType}/{toObjectId} For example, the following request would associate a quote that has an ID of 1234567 with a contact that has an ID of 8675309: /crm/objects/2026-03/quote/1234567/associations/default/contact/8675309
Please note: you can only associate a quote template with a quote at the time of creation.

Quote templates

Quote templates can be created and customized in the HubSpot UI. When creating a quote via the API, you can specify a quote template to use by associating it with the quote 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. There are multiple ways to retrieve the ID of a quote template:

Retrieve an ID from the quote template editor

To find the ID of a quote template in HubSpot, navigate to the quote template editor, then copy the second number in the URL (the number that is not your HubID):
Screenshot of the quote template ID in the URL of the quote template editor in HubSpot

Retrieve all quote templates via the API

To retrieve all quote templates from an account, make a GET request to /crm/objects/2026-03/quote_templates?properties=hs_type.
The properties=hs_type query parameter adds the hs_type property of each template to the response. Compatible templates will have a hs_type property value of cpq_template.
Example response:

Search for quote templates via the API

To retrieve only the quote templates that are compatible with the CPQ system, make a POST request to /crm/objects/2026-03/quote_templates/search. In the request body, include a filter for the hs_type property with a value of cpq_template, as shown below.

Editing template source code

Using the quote template editor in HubSpot, you can edit the source code of rich text template sections, such as the Acceptance section. This gives you the ability to add custom code to the template.
Please note: using HubL in rich text areas is not recommended, as HubL code will not render or populate data until the quote is published. While editing the template or quote, the HubL output will not be visible.
To edit the source code of a quote template:
  • In your HubSpot account, click the Settings icon.
  • In the left sidebar menu, navigate to Objects > Quotes.
  • Click the Quote templates tab.
  • Click the name of the template that you want to edit.
  • In the editor, click into a rich text section, such as the Cover letter, Executive summary, or Acceptance section. Then, in the top bar, click Advanced > Source code.
Screenshot of the quote template editor in HubSpot with the source code option highlighted
  • Add your custom code, then click Save changes.

Quote properties

Below is a list of available default quote properties. To fetch all available quote properties from a given account, make a GET request to crm/properties/2026-03/quotes. Learn more about the properties API.
The following properties are only supported in legacy quotes:
  • hs_esign_enabled (replaced by hs_acceptance_method)
  • hs_show_signature_box (replaced by hs_acceptance_method)
  • hs_proposal_* (e.g., hs_proposal_domain)
The properties below can only be used with quotes, not legacy quotes.

Properties set by quote state

Updating the quote’s state will update the following properties:Additionally, the properties below will be calculated when the quote is published.
Last modified on June 11, 2026