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

# HubSpot Discounts

The HubSpot Discounts API manages discount records that can be applied to HubSpot quotes and line items, exposing single and batch CRUD plus search across /crm/v3/objects/discounts. It supports percentage and fixed-amount discounts, custom properties, and standard pagination so agents can read, create, and reconcile discount catalogues programmatically. Use it whenever quote pricing depends on reusable discount records rather than ad-hoc line-item adjustments.

## For AI agents

Create, update, search, and batch-manage HubSpot discount records used on quotes and line items via /crm/v3/objects/discounts.

## Scope

Does not calculate quote totals, run pricing approval workflows, or process payment - use for managing reusable discount records inside HubSpot CRM only.

## Capabilities

- Create reusable discount records via POST /crm/v3/objects/discounts
- Update discount values or labels with PATCH /crm/v3/objects/discounts/{discountId}
- Search discounts by amount, type, or custom property through POST /crm/v3/objects/discounts/search
- Bulk-import a discount catalogue with POST /crm/v3/objects/discounts/batch/create
- Upsert discounts by external ID using POST /crm/v3/objects/discounts/batch/upsert
- Archive expired promotional discounts via DELETE /crm/v3/objects/discounts/{discountId}

## Use cases

### Promotional Discount Rollout

Create a set of seasonal or campaign-specific discount records once, then reference them on multiple quotes for the duration of the promotion. The batch create endpoint handles up to 100 discounts in a single request, so launching a holiday sale across regions takes one call rather than many. Agents can then search by an internal campaign property to find the right discount when generating a quote.

Example prompt: Batch-create five holiday discounts (10, 15, 20, 25, and 30 percent) via POST /crm/v3/objects/discounts/batch/create with a campaign property set to 'holiday-2026'.

### Quote-Time Discount Lookup

When generating a quote, search the discount catalogue for the best match - for example, the highest discount whose campaign matches the deal's source. The search endpoint accepts filterGroups, sorts, and paginated results so a quote generator can fetch candidates fast even with hundreds of active discounts. Apply the discount ID on the quote line item afterwards.

Example prompt: Search HubSpot discounts where campaign equals 'partner-2026' and active equals true, sorted by hs_value descending, returning the top result.

### Discount Catalogue Hygiene

Archive promotions that are no longer valid so reps cannot accidentally apply expired discounts on new quotes. The single-record archive endpoint removes the discount from active lookups while preserving history for audit. Run a daily search filtered to expired campaigns and archive the results in one batch.

Example prompt: Search for discounts where end_date is before today and is_archived is false, then archive each with DELETE /crm/v3/objects/discounts/{discountId}.

### Agent-Driven Discount Creation via Jentic

An AI agent reading a manager's Slack message about a one-day promotion creates the matching HubSpot discount record without an engineer touching the CRM. Through Jentic the agent searches for the create operation, loads its input schema, and executes it with the parsed promo details. The flow runs on a single Jentic credential without exposing the HubSpot key.

Example prompt: Use Jentic to search 'create a HubSpot discount record', load the POST /crm/v3/objects/discounts schema, and execute it with type, value, and label parsed from the Slack message.

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | /crm/v3/objects/discounts | List discounts with pagination |
| POST | /crm/v3/objects/discounts | Create a discount record |
| PATCH | /crm/v3/objects/discounts/{discountId} | Update a discount |
| POST | /crm/v3/objects/discounts/batch/create | Batch-create up to 100 discounts |
| POST | /crm/v3/objects/discounts/batch/upsert | Batch-upsert discounts by external ID |
| POST | /crm/v3/objects/discounts/search | Search discounts by property filters |

## Key resources

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

## Why Jentic

- **Setup:** Wiring the HubSpot Discounts API by hand means handling its OAuth 2.0 authorization-code flow or a private app token, targeting api.hubapi.com, and building batch and search payloads yourself. Through Jentic you install once, import HubSpot Discounts 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 discount scopes your agent needs and you choose which operations it may call: you can allow reading and searching discount records while leaving create and update 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 discount' or 'list discount records', and Jentic returns the matching discounts operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **HubSpot Quotes** — Apply discount records to generated quotes
- **HubSpot Line Items** — Apply discounts to individual line items on a deal or quote
- **HubSpot Products** — Maintain the product catalogue that discounts are applied against
- **Salesforce** — Salesforce CPQ provides equivalent quote-discount management

## FAQ

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

Discounts accepts OAuth 2.0 access tokens (with the crm.objects.line_items or quote scopes depending on use) and HubSpot private app API keys passed in the private-app or private-app-legacy headers. Through Jentic the credential lives in your Jentic One instance and is injected at execution time.

### Can I create a percentage discount through the API?

Yes. Set the discount type to PERCENT and pass the value as a number on POST /crm/v3/objects/discounts. For fixed-amount discounts, use type FIXED and the corresponding currency value. The discount can then be applied on quotes or line items by reference.

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

Discounts share HubSpot's account-wide limit - typically 100 requests per 10 seconds for OAuth apps and 190 per 10 seconds for private apps on paid tiers. Use POST /crm/v3/objects/discounts/batch/create for catalogue imports since the batch counts as one request.

### How do I search discounts through Jentic?

Run jentic.search('search HubSpot discount records'), load the schema for POST /crm/v3/objects/discounts/search, and execute it with a filterGroups payload. Jentic returns matching discounts as structured JSON ready to be referenced on a quote.

### Do I need to apply discounts to a line item separately?

Yes. The Discounts API only manages the discount records themselves. To apply one to a quote or line item, reference its ID through the Line Items or Quotes APIs - Jentic exposes those as separate operations you can chain.

### Can I upsert a discount by an external ID?

Yes. POST /crm/v3/objects/discounts/batch/upsert accepts an idProperty referencing a custom unique property (for example, an internal SKU or campaign code). HubSpot inserts new discounts and updates existing ones in the same call.

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

Yes. Because you run Jentic One yourself, your own rules decide which discount operations and credentials the agent may use. HubSpot gates this API with per-object OAuth scopes, so you can grant only the discount scopes the agent needs and choose which endpoints it may call, for example allowing it to list and search discount records via GET and POST /crm/v3/objects/discounts/search while leaving create, update, and archive out of the allowed set. The HubSpot token is stored once by your instance and injected only at execution time, never entering the agent's prompt or logs.
