Quotes are used to share pricing info with prospects. The quotes endpoints allow you to retrieve this data and sync it between HubSpot and other systems.
POST
request to /crm/v3/objects/quotes
. Later, you’ll make a separate call to associate the quote with other objects, such as the quote template, line items, or a deal.
Parameter | Type | Description |
---|---|---|
hs_title | String | The name of the quote. |
hs_expiration_date | String | The date that the quote expires. |
GET
request to crm/v3/properties/quotes
. Learn more about the properties API.
The response will include an id
, which you’ll use to continue configuring the quote. You can update quote properties at any time by making a PATCH
request to /crm/v3/objects/quotes/{quoteId}
.
hubspot_owner_id
property manually isn’t possible due to it being a calculated property, and any values will be overridden. When using quotes, the property works as follows:
hubspot_owner_id
property will reflect the hs_associated_deal_owner_id
property (hs_associated_deal_owner_id
is a calculated property).hubspot_owner_id
property will reflect the hs_quote_owner_id
property.hs_esign_enabled
boolean property in your request body with a value of true
. Note that you will not be able to add countersigners through the API, so those will need to be added in HubSpot before publishing the quote. You also cannot publish a quote with e-sign enabled if you’ve exceeded your monthly e-signature limit.
hs_payment_enabled
boolean property in your request body with a value of true
. Depending on your payment processor and accepted payment methods, you’ll also need to set hs_payment_type
and hs_allowed_payment_methods
.
Parameter | Type | Description |
---|---|---|
hs_payment_enabled | Boolean | When set to true , enables the quote to collect payment using either HubSpot payments or Stripe payment processing. Default is false . |
hs_payment_type | Enumeration | Determines which payment processor to use. Value can be either HUBSPOT or BYO_STRIPE . |
hs_allowed_payment_methods | Enumeration | The payment methods to be used (e.g., credit card). |
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. |
hs_payment_status
and hs_payment_date
properties:
hs_payment_status
property to PENDING
.hs_payment_status
property to PROCESSING
.hs_payment_status
property to PAID
.hs_payment_date
to the date and time that the payment was confirmed.Object type | Required | Description |
---|---|---|
Line items | Yes | 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. |
Quote template | Yes | The template that renders the quote, along with providing some default configuration settings for the quote, such as language. Each quote can be associated with one template. |
Deal | Yes | 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 | No | Specific buyers that you’re addressing in the quote. |
Company | No | A specific company that you’re addressing in the quote. Each quote can be associated with one company. |
Discounts, fees, and taxes | No | Any discounts, fees, and taxes to be applied at checkout. When determining the total quote amount, HubSpot first applies discounts, followed by fees, then taxes. You can use the hs_sort_order field to reorder objects of the same type. Can be set to fixed values or percentages by setting hs_type to either FIXED or PERCENT . |
GET
request to the relevant object endpoint, which follows the same pattern across each CRM object. When making each request, you can also include a properties
query parameter to return specific properties when needed. Below are example GET
requests for each type of object.
200
response with details for each fetched object type. You’ll use the value in the id
field to set associations in the next step.
PUT
request using the URL structure below:
/crm/v4/objects/quotes/{fromObjectId}/associations/default/{toObjectType}/{toObjectId}
Parameter | Description |
---|---|
fromObjectId | The ID of the quote. |
toObjectType | The type of object you’re associating with. For example, line_items , deals , and quote_template . |
toObjectId | The ID of the object you’re associating the quote with. |
PUT
requests for each type of object.
123456
, the requests to associate the quote might include the following:
55555
, 66666
):
/crm/v4/objects/quotes/123456/associations/default/line_items/55555
/crm/v4/objects/quotes/123456/associations/default/line_items/66666
987654
): /crm/v4/objects/quotes/123456/associations/default/quote_template/987654
345345
): /crm/v4/objects/quotes/123456/associations/default/deals/345345
200
response with details about the association. The above calls will associate the objects in both directions, with each direction have its own ID. For example, if you associate the quote with a quote template, the response will describe the association from both ends. In the example response below, 286
is the quote-to-quote-template association type ID, and 285
is the quote-template-to-quote association type ID.
CUSTOMIZABLE_QUOTE_TEMPLATE
template type can be used.PUT
request to the following URL:
/crm/v4/objects/quote/{quoteId}/associations/contact/{contactId}
In the request body, you’ll need to specify the associationCategory
and associationTypeId
, as shown below:
associations
field to match existing data in your CRM. Review the Retrieving IDs for associations section for additional guidance.POST
/crm/v3/objects/quote
Parameter | Type | Description |
---|---|---|
properties | Object | Property values to define the quote details. Required properties are hs_title and hs_expiration_date :
|
associations | Array | The other CRM records and objects associated with the quote. For a quote to be publishable, it must have an associated deal and quote template. Line items associated with a quote should be distinct from the line items associated with the quote’s deal (i.e., you should create copies of the line items). To set each association, include a separate object in this array with the following fields:
|
PATCH
request to /crm/v3/objects/quote/{quoteId}
.
A quote’s state is based on the hs_status
field. Certain quote states allow users to edit, publish, and use the quote in quote approval workflows. Below are the available quote states.
hs_status
field, the quote will be in a Minimal state. The quote will appear on the index page of the quotes tool, but cannot be edited directly. Quotes in this state can still be used in automation, such as the sequences tool, and are also available to analyze within the reporting tool.DRAFT
: enables the quote to be edited in HubSpot. This state can be useful for when the quote isn’t fully configured or if you’d rather enable sales reps to complete the quote configuration process in HubSpot.APPROVAL_NOT_NEEDED
: publishes the quote at a publicly accessible URL (hs_quote_link
) without needing to be approved.PENDING_APPROVAL
: indicates that the quote is waiting to be approved before it can be published.APPROVED
: the quote has been approved and is now published at a publicly accessible URL (hs_quote_link
).REJECTED
: indicates that the quote has been set up but has not been approved for publishing, and must be edited before it can be submitted for approval again.hs_template_type
property to CUSTOMIZABLE_QUOTE_TEMPLATE
after you update the quote’s state. This template type is supported by the v3 API, whereas the following template types are legacy templates that are no longer supported:QUOTE
PROPOSAL
hs_quote_amount
: calculated based on any associated line items, taxes, discounts, and fees.hs_domain
: set from the associated quote template.hs_slug
: randomly generated if one is not explicitly provided.hs_quote_total_preference
: set based on your account settings. If you haven’t configured this setting, it will default to the value of the total_first_payment field.hs_timezone
: defaults to your HubSpot account’s timezone.hs_locale
: set from the associated quote template.hs_quote_number
: set based on the current date and time, unless one is provided.hs_language
: set from the associated quote template.hs_currency
: set based on the associated deal. If you haven’t associated a deal with the quote, it will default to your HubSpot account’s default currency.hs_pdf_download_link
: populated with a URL of a PDF for the quote.hs_locked
: 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
: 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
: if you’ve enabled e-signatures, displays the number of signatures required.hs_payment_status
: 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.GET
request to /crm/v3/objects/quotes/{quoteID}
.GET
request to /crm/v3/objects/quotes
.Parameter | Description |
---|---|
properties | A comma separated list of the properties to be returned in the response. If a requested property isn’t defined, it won’t be included in the response. If a requested property is defined but a quote doesn’t have a value, it will be returned as null . |
propertiesWithHistory | A comma separated list of the current and historical properties to be returned in the response. If a requested property isn’t defined, it won’t be included in the response. If a requested property is defined but a quote doesn’t have a value, it will be returned as null . |
associations | A comma separated list of objects to retrieve associated IDs for. Any specified associations that don’t exist will not be returned in the response. Learn more about the associations API. |
POST
request to crm/v3/objects/quotes/batch/read
and include the IDs in the request body. You can also include a properties
array to specify which properties to return. The batch endpoint cannot retrieve associations. Learn how to batch read associations with the associations API.
crm.objects.quotes.write
, crm.objects.quotes.read
, crm.objects.line_items.write
, crm.objects.line_items.read
, crm.objects.owners.read
, crm.objects.contacts.write
, crm.objects.contacts.read
, crm.objects.deals.write
, crm.objects.deals.read
, crm.objects.companies.write
, crm.objects.companies.read
crm.schemas.quote.read
, crm.schemas.line_items.read
, crm.schemas.contacts.read
, crm.schemas.deals.read
, crm.schemas.companies.read