> ## Documentation Index
> Fetch the complete documentation index at: https://developers.hubspot.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

---
id: 9004a964-e090-4c62-9ed4-b3ca9fef2f7f
---

# Discounts API

> Learn how to create and associate a discount as part of the pricing details of a quote.

export const ScopesList = ({scopes = [], description = "This API requires one of the following scopes:"}) => {
  if (!scopes || scopes.length === 0) {
    return null;
  }
  const sortedScopes = scopes.sort((a, b) => a.localeCompare(b));
  return <div>
      <div className="text-sm mb-2">{description}</div>
      <div>
        {sortedScopes.map((scope, index) => <div key={index}>
            <code>
              <span className="text-xs">{scope}</span>
            </code>
          </div>)}
      </div>
    </div>;
};

<Accordion title="Scope requirements">
  <ScopesList
    scopes={[
  'crm.objects.line_items.read',
  'crm.objects.line_items.write'
]}
  />
</Accordion>

When you're [creating a quote in HubSpot](/docs/api-reference/2026-03/crm/objects/quotes/guide), you can create and associate a discount as part of the pricing details of the quote.

## Create a discount

Discounts are used in conjunction with [fees](/docs/api-reference/2026-03/crm/objects/fees/guide) and [taxes](/docs/api-reference/2026-03/crm/objects/taxes/guide) when determining the pricing details for a quote. Any discounts you associate with your quote will be applied first, followed by associated fees, and then any associated taxes will apply.

```json theme={null}
{
  "properties": {
    "hs_label": "A fixed, one-time discount",
    "hs_duration": "ONCE",
    "hs_type": "PERCENT",
    "hs_value": "50",
    "hs_sort_order": "2"
  }
}
```

After you create a discount, you can use its ID to associate it with a quote. To retrieve a list of discounts you've created, you can make a `GET` request to `/crm/objects/2026-03/discount`.

## Merge discounts

To merge two discount records, make a `POST` request to `/crm/objects/2026-03/discount/merge`. The remaining record combines activities, associations, and most property values from both records. For example, merge duplicate discounts to preserve historical context and consolidate their activity timelines. Learn more about [what happens when you merge HubSpot records](https://knowledge.hubspot.com/records/merge-records#what-happens-when-i-merge-records).

Include the following in your request body:

| Field             | Description                                                                                |
| ----------------- | ------------------------------------------------------------------------------------------ |
| `objectIdToMerge` | The record ID to merge with the primary record.                                            |
| `primaryObjectId` | The record ID of the primary record, which is the record that will remain after the merge. |

For example, to merge the record `45678` into the record `12345`, your request would look like:

```json theme={null}
{
  "objectIdToMerge": "45678",
  "primaryObjectId": "12345"
}
```

In a successful merge response, the `id` is the record ID of the merged record.

<Warning>
  **Please note:** if an account is enrolled in the [*Primary ID Preservation for Merged Records* public beta](https://app.hubspot.com/l/product-updates/?rollout=318895), the primary (i.e., the remaining record after a merge) record's Record ID value (`primaryObjectId`) is preserved instead of generating a new one. Once enrolled, this behavior applies to all merges, including [in HubSpot](https://knowledge.hubspot.com/records/merge-records) and all versions of the API.
</Warning>
