canonical: https://jentic.com/apis/hubspot.com/hubspot-crm-quotes

# HubSpot Quotes

The HubSpot CRM Quotes API lets sales teams and integrations programmatically create, read, update, archive, and search Quote records - the documents that capture proposed pricing, terms, and line items presented to a buyer. Each quote is a CRM object that can be associated with deals, contacts, companies, line items, and signatures, and supports custom properties just like other HubSpot CRM objects. The API exposes single-record CRUD, batch create, batch read, batch update, batch upsert, batch archive, and a search endpoint with filtering and sorting.

## For AI agents

Create, retrieve, update, search, and archive HubSpot CRM Quotes - the proposal documents that hold pricing and line items - including efficient batch operations against /crm/v3/objects/quotes.

## Scope

Does not handle invoice billing, payment collection, or e-signature workflows - use for managing CRM Quote records and their associations only.

## Capabilities

- Create a new quote tied to a deal with POST /crm/v3/objects/quotes
- Retrieve a quote and its custom properties via GET /crm/v3/objects/quotes/{quoteId}
- Update quote properties such as expiration date or status with PATCH /crm/v3/objects/quotes/{quoteId}
- Search quotes by status, owner, or amount via POST /crm/v3/objects/quotes/search
- Create or update many quotes at once with POST /crm/v3/objects/quotes/batch/upsert
- Archive a quote that is no longer needed with DELETE /crm/v3/objects/quotes/{quoteId}
- Read a batch of quotes in one call using POST /crm/v3/objects/quotes/batch/read

## Use cases

### Automated Quote Generation From Closed-Won Pipeline

When a deal reaches a quote-ready stage in the HubSpot pipeline, an automation creates a Quote record with the right line items, expiration date, terms, and signer fields, then associates it with the deal and primary contact. The Quotes API exposes batch create so quarter-end pushes can generate dozens of quotes in one call. Typical creation time per quote is under a second through the API versus a few minutes per quote in the HubSpot UI.

Example prompt: Call POST /crm/v3/objects/quotes/batch/create with quote inputs containing hs_title, hs_expiration_date, deal association, and line item associations for each closed-won deal.

### Quote Status Reporting and Reminders

Sales operations needs visibility into draft, pending, and signed quotes across the team, plus automated nudges for quotes nearing expiration. Using POST /crm/v3/objects/quotes/search with filters on hs_status and hs_expiration_date, an integration produces a daily report and triggers reminder emails for quotes expiring within 3 days. The search endpoint supports paging and sorting, so even pipelines with thousands of quotes can be reviewed efficiently.

Example prompt: Call POST /crm/v3/objects/quotes/search with a filter on hs_status equal to 'PENDING_BUYER_ACTION' and hs_expiration_date within 3 days, then return the matching quote list.

### CPQ Sync With External Pricing Engine

Companies that maintain pricing logic in an external CPQ tool need to push the resulting quote into HubSpot so the deal record reflects the proposal. A scheduled job pulls priced quotes from the CPQ system and uses POST /crm/v3/objects/quotes/batch/upsert keyed by an external ID property to create new quotes or update existing ones. This avoids duplicates and keeps HubSpot the system of record for sales-facing quote status.

Example prompt: Call POST /crm/v3/objects/quotes/batch/upsert with idProperty set to an external_quote_id custom property and inputs containing the latest pricing fields for each external quote.

### AI Agent Quote Lookup and Update

An AI sales assistant agent answers reps' questions like 'what's the latest quote for Acme?' and updates fields when asked. Through Jentic the agent searches for quote operations, loads the search and patch schemas, and executes a search by associated company, then a PATCH on the returned quoteId to change status or expiration. Jentic stores the OAuth token in its vault so the agent never sees the secret.

Example prompt: Search Jentic for 'find hubspot quote for company', load the search operation, query by associated companyId, then PATCH the returned quoteId to extend hs_expiration_date by 14 days.

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | /crm/v3/objects/quotes | Create a quote |
| GET | /crm/v3/objects/quotes/{quoteId} | Read a quote by ID |
| PATCH | /crm/v3/objects/quotes/{quoteId} | Update a quote |
| DELETE | /crm/v3/objects/quotes/{quoteId} | Archive a quote |
| POST | /crm/v3/objects/quotes/search | Search quotes with filters and sorting |
| POST | /crm/v3/objects/quotes/batch/create | Create many quotes in one call |
| POST | /crm/v3/objects/quotes/batch/upsert | Upsert quotes by unique property values |

## Key resources

- **Basic** — Single-quote CRUD: create, read, update, archive a Quote object via /crm/v3/objects/quotes.
- **Batch** — Batch read, create, update, upsert, and archive operations for working with many Quote records in one request.
- **Search** — Filter, sort, and paginate Quote records with POST /crm/v3/objects/quotes/search.

## Why Jentic

- **Setup:** Wiring HubSpot Quotes by hand means learning its OAuth2 access token or private app token auth, targeting the api.hubapi.com host, and handling batch and search calls yourself. Through Jentic you install once, import HubSpot Quotes from the API Directory, store the token once, and your agent calls it.
- **Permission scoping:** The Quotes API puts the quote id in the URL path (/crm/v3/objects/quotes/{quoteId}), so a rule can pin your agent to one quote for read and update. You choose the operations it may call, so destructive ones like deleting a quote or batch upsert are not included unless you add them.
- **Credential handling:** Your HubSpot access token or private app token is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'create a HubSpot quote' or 'update a quote record', and Jentic returns the matching Quotes operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **Salesforce REST API** — Salesforce CPQ and Quote objects offer comparable proposal management for teams on Salesforce.
- **HubSpot Deals** — Quotes are typically created against an open Deal - use Deals to fetch context before generating a quote.
- **HubSpot Line Items** — Line items represent the priced products on a quote and must exist before they can be attached to a quote.

## FAQ

### What authentication does the HubSpot Quotes API use?

It supports OAuth 2.0 (recommended for public apps) and HubSpot private app access tokens passed as a Bearer token in the Authorization header. Through Jentic the token is stored encrypted in the vault and injected at execution time so the agent never holds the raw secret.

### Can I associate line items with a quote through the Quotes API?

Yes. Quotes are CRM objects that support associations, so you create the line items via the Line Items API and pass association inputs when calling POST /crm/v3/objects/quotes or POST /crm/v3/objects/quotes/batch/create. You can also associate quotes with deals, contacts, and companies in the same call.

### What are the rate limits for the HubSpot Quotes API?

HubSpot enforces 100 requests per 10 seconds for OAuth apps and 190 per 10 seconds for private apps on Enterprise tiers, plus daily quotas. Use the batch endpoints (batch/read, batch/create, batch/upsert) to stay well under these limits when working with many quotes.

### How do I find a quote attached to a specific deal through Jentic?

Search Jentic for 'find hubspot quote by deal', load the POST /crm/v3/objects/quotes/search operation, and execute it with a filter on associations.deal equal to your dealId. Jentic returns typed quote records you can then PATCH or read.

### Can I create a quote and its line items in a single API call?

You create line items separately via the Line Items API, but you can pass their IDs as associations on POST /crm/v3/objects/quotes so they are linked to the quote at creation time. To do everything in one logical step, use a batch flow that creates line items first, then creates the quote with their IDs.

### Does archiving a quote with DELETE /crm/v3/objects/quotes/{quoteId} delete it permanently?

No. Archive is a soft delete - the quote is removed from default lists and search results but can be restored within HubSpot's retention window. To permanently remove records you must use HubSpot's GDPR delete process, not the standard archive endpoint.

### Can I limit what my agent is allowed to do with the HubSpot Quotes API?

Yes. Because you run Jentic One yourself, your own rules decide which Quotes operations and credentials the agent may use. Since the quote id sits in the URL path (/crm/v3/objects/quotes/{quoteId}), you can pin the agent to reading and updating a single quote, and you choose exactly which operations it may call. That means destructive calls like deleting a quote with DELETE /crm/v3/objects/quotes/{quoteId} or a batch upsert stay off the table unless you explicitly grant them.
