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

# HubSpot Deals

The HubSpot Deals API manages the deal records that drive HubSpot sales pipelines, exposing single and batch CRUD plus search across the standard /crm/v3/objects/deals surface. It supports pipeline stage transitions, deal property updates, deal merging, and association lookups so agents can move opportunities through pipelines programmatically. This is the primary API for any AI agent that needs to read, update, or report on revenue-stage data inside HubSpot.

## For AI agents

Create, update, search, merge, and batch-manage HubSpot deal records to move opportunities through sales pipelines via /crm/v3/objects/deals.

## Scope

Does not handle invoicing, payment collection, or commission calculation - use for managing deal records and pipeline stages inside HubSpot CRM only.

## Capabilities

- Create new deals with pipeline, stage, and amount properties via POST /crm/v3/objects/deals
- Move deals to a new pipeline stage with PATCH /crm/v3/objects/deals/{dealId}
- Search deals by amount, stage, owner, or close date through POST /crm/v3/objects/deals/search
- Bulk-import or update up to 100 deals per call with the batch endpoints
- Merge two duplicate deal records into one via POST /crm/v3/objects/deals/merge
- Archive lost deals with DELETE /crm/v3/objects/deals/{dealId} while keeping audit history

## Use cases

### Pipeline Stage Automation

Move deals between pipeline stages automatically when external events occur - for example, when a contract is signed in the e-signature tool, advance the deal to Closed Won and stamp the close date. The PATCH endpoint updates only the specified properties, so other fields like amount and owner remain untouched. Stage transitions trigger HubSpot's downstream workflows.

Example prompt: Patch deal 12345 with dealstage set to closedwon and closedate set to today's ISO timestamp via PATCH /crm/v3/objects/deals/12345.

### Sales Forecasting Pull

Pull all open deals matching forecast criteria - typically pipeline equals 'default', dealstage not in closed states, and closedate within the current quarter - to feed a forecasting dashboard. The search endpoint accepts complex filterGroups, sorts by closedate or amount, and returns paginated results so a forecasting job can stream tens of thousands of deals.

Example prompt: Search HubSpot deals where pipeline equals default, dealstage NOT IN [closedwon, closedlost], and closedate is within the current quarter, returning deal id, amount, and owner.

### Deduplicate Inbound Deals

Merge duplicate deal records that arrive from multiple inbound sources (web forms, partner referrals, BDR outreach) into a single record so the rep sees one opportunity. The merge endpoint preserves the primary deal's ID and history while consolidating activities and associations from the secondary deal. Use it after a search confirms two deals refer to the same opportunity.

Example prompt: Call POST /crm/v3/objects/deals/merge with primaryObjectId 1001 and objectIdToMerge 1002, then verify the merged deal returns a 200 with the primary ID.

### Agent-Driven Deal Creation via Jentic

An AI sales assistant turns a meeting recap into a new HubSpot deal - with amount, stage, contact association, and owner - without the user touching the CRM. Through Jentic the agent searches for the create-deal operation, loads its input schema, and executes it with structured fields parsed from the call notes. Total integration takes under an hour vs. 2-3 days direct.

Example prompt: Use Jentic to search 'create a HubSpot deal', load the POST /crm/v3/objects/deals schema, and execute it with dealname, amount, dealstage, pipeline, and hubspot_owner_id from the parsed meeting recap.

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | /crm/v3/objects/deals | List deals with pagination and property selection |
| POST | /crm/v3/objects/deals | Create a new deal |
| GET | /crm/v3/objects/deals/{dealId} | Retrieve a deal by ID |
| PATCH | /crm/v3/objects/deals/{dealId} | Update specific properties on a deal |
| POST | /crm/v3/objects/deals/batch/upsert | Batch-upsert deals by external ID |
| POST | /crm/v3/objects/deals/search | Search deals by property filters |
| POST | /crm/v3/objects/deals/merge | Merge two duplicate deals |

## Key resources

- **Basic** — Single-record CRUD on deal objects with property selection
- **Batch** — Bulk read, create, update, upsert, and archive across up to 100 deals per request
- **Search** — Filter, sort, and paginate deals by any property

## Why Jentic

- **Setup:** Wiring the HubSpot Deals API by hand means handling its OAuth 2.0 authorization-code flow or a private app token, targeting api.hubapi.com, and building batch, search, and merge payloads yourself. Through Jentic you install once, import HubSpot Deals from the API Directory, store the token once, and your agent calls it.
- **Permission scoping:** HubSpot gates this API with per-object OAuth scopes, so you grant only the deal scopes your agent needs and you choose which operations it may call: you can allow creating, reading, and updating deal records while leaving destructive operations like merge out of the allowed set unless you add them.
- **Credential handling:** Your HubSpot OAuth 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 deal' or 'search deals by stage', and Jentic returns the matching deals operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **HubSpot Contacts** — Associate deals with the contacts driving the opportunity
- **HubSpot Companies** — Link deals to company records for account-level pipeline
- **HubSpot Deal Splits** — Split deal credit and revenue across multiple owners
- **Salesforce** — Salesforce Opportunity object is the equivalent in Sales Cloud
- **Pipedrive** — Pipedrive offers a simpler deal pipeline API for SMB sales teams

## FAQ

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

The Deals API accepts OAuth 2.0 with the crm.objects.deals.read or .write scopes, plus legacy OAuth and HubSpot private app API keys via the private-app and private-app-legacy headers. Through Jentic the token is held in your Jentic One instance and injected at execution so it never reaches the agent's context.

### Can I move a deal between pipelines with this API?

Yes. Send a PATCH /crm/v3/objects/deals/{dealId} call with both the pipeline and dealstage properties set to a stage that exists in the target pipeline. Updating only dealstage without changing pipeline keeps the deal in its current pipeline.

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

Account-level limits apply - typically 100 requests per 10 seconds for OAuth apps and 190 per 10 seconds for private apps on paid tiers, plus a daily cap. Use POST /crm/v3/objects/deals/batch/upsert for high-volume writes since each batch counts as a single request.

### How do I search HubSpot deals through Jentic?

Run jentic.search('search HubSpot deals'), load the schema for POST /crm/v3/objects/deals/search, and execute it with a filterGroups payload (for example, dealstage equals presentationscheduled and amount greater than 10000). Jentic returns results as structured JSON.

### Can I merge two duplicate deals via the API?

Yes. POST /crm/v3/objects/deals/merge takes a primaryObjectId (the deal you want to keep) and objectIdToMerge (the duplicate). The merged record retains the primary ID along with consolidated activities and associations from the secondary deal.

### Do I need separate calls to associate a deal with a contact?

Yes. The Deals API itself does not create associations. After creating the deal, call the CRM Associations API to link it to the contact, company, or line item - Jentic exposes that as a separate operation you can chain in the same workflow.

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

Yes. Because you run Jentic One yourself, your own rules decide which HubSpot Deals operations and which OAuth scopes the agent may use. You can allow it to create, read, update, and search deals through POST and PATCH /crm/v3/objects/deals while leaving destructive operations like the merge and archive endpoints out of the allowed set. The HubSpot token is held by your self-hosted instance and injected only for the operations you permit, so the agent can never call an endpoint you have not granted.
