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

# House discounts

> Rate-card discounts keyed to a buyer's brand or operator, resolved up the brand hierarchy and applied at product discovery.

## Overview

A **house discount** is a structured rate-card discount you set for a buyer,
applied at [product discovery](/v2/guides/discovery). Every buy carries two buyer
identities — the **brand** (the advertiser) and the **operator** (the agency or
DSP doing the buying) — so a discount declares which axis it applies to:

| `scope`    | Keyed to                                                       | Matches                                       |
| ---------- | -------------------------------------------------------------- | --------------------------------------------- |
| `brand`    | An advertiser entity or its house (`coke.com`, `nike.com`)     | The buy's brand, resolved up its hierarchy    |
| `operator` | An agency/holdco entity or its house (`groupm.com`, `wpp.com`) | The buy's operator, resolved up its hierarchy |

Each axis resolves up the buyer's own [brand hierarchy](/v2/concepts/glossary#brand-hierarchy)
(from its published `brand.json`), so one row covers a whole corporate family:

* "Coke gets 20%" → a **brand** discount on `coke.com`
* "the whole Nike family gets 12%" → a **brand** discount on `nike.com` (reaches a
  Converse buy: `converse.com → nike.com`)
* "everything GroupM buys gets 8%" → an **operator** discount on `groupm.com`

This is the **structured** home for buyer discounts. For the narrower cases a
single entity can't express — a discount that requires a specific operator **and**
brand together, country-specific terms, or freeform negotiation notes — use a
[buyer instruction](/v2/storefront/buyer-instructions/overview) instead.

## How a discount is chosen

At discovery the buy's brand and operator are each resolved up their hierarchy. A
`brand`-scoped discount can only match the brand chain; an `operator`-scoped one
only the operator chain. Two rules then pick the winner:

* **Nearest ancestor wins.** A discount on the exact entity beats one on its
  house; a closer parent beats a more distant one. A parent never overrides a
  more specific descendant — set a discount on `nike.com` and another on
  `converse.com`, and a Converse buy takes the Converse rate.
* **Larger discount wins across axes.** When both a brand discount and an
  operator discount match a buy, the buyer gets the **larger** of the two — brand
  and operator are independent buyer identities, so neither hides a better deal
  from the other. (e.g. a `coke.com` brand discount of 10% and a `wpp.com`
  operator discount of 20% on a WPP-buying-Coke buy yields 20%.) A tie resolves
  to the brand axis.

A node with no discount of its own inherits the nearest ancestor that has one, on
its axis.

<Note>
  Operator-axis resolution needs the agency/holdco to publish a resolvable
  `brand.json` corporate hierarchy (so `groupm.com → wpp.com` resolves). Many
  agencies don't. When an operator's family can't be resolved, key the discount on
  the **exact** operator domain you want it to apply to rather than a parent
  holdco.
</Note>

## Composition with buyer instructions

A buy can also match a [buyer instruction](/v2/storefront/buyer-instructions/overview).
Whenever more than one discount matches a buy — across axes or across rails — the
buyer gets the **larger** one. Because a house discount isn't tied to an
identified buyer, it also applies to **anonymous** (no-account) discovery; a
buyer instruction never does.

## The wholesale floor

Every quote is floored at the storefront's wholesale cost. A discount can reduce a
price toward that floor but never below it: a 40% discount on a $35 quote whose
floor is $25 yields \*\*$25**, not $21. Discounts never price inventory under cost.

## Isolation

Discounted quotes are cached **per resolved entity**, never on the shared public
partition. A discount negotiated for the Nike house can never leak into the price
another buyer — one whose brand does not roll up to that house — sees.

## Fields

| Field             | Type                  | Description                                                                                                                                         |
| ----------------- | --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| `houseDomain`     | string                | The buyer-entity domain the discount is keyed to (e.g. `nike.com`, `wpp.com`). Lowercased, no leading `www.`. 1–253 chars. Immutable after creation |
| `scope`           | `brand` \| `operator` | Which buyer axis this applies to. A brand discount matches the buy's advertiser; an operator discount matches the buying agency/DSP                 |
| `discountPercent` | number                | Discount percent off the storefront quote. `0`–`100`                                                                                                |
| `notes`           | string \| null        | Freeform operator notes (e.g. the negotiated rate's provenance). Max 2000 chars. `null` = no notes                                                  |

`(houseDomain, scope)` is unique per storefront — the same domain may carry both a
brand discount and an operator discount.

## Tasks

<CardGroup cols={2}>
  <Card title="List house discounts" href="/v2/storefront/house-discounts/tasks/list-house-discounts" icon="list">
    Read every discount on the storefront.
  </Card>

  <Card title="Create house discount" href="/v2/storefront/house-discounts/tasks/create-house-discount" icon="plus">
    Add a brand or operator discount.
  </Card>

  <Card title="Update house discount" href="/v2/storefront/house-discounts/tasks/update-house-discount" icon="pen">
    Change the discount or notes on a row.
  </Card>

  <Card title="Delete house discount" href="/v2/storefront/house-discounts/tasks/delete-house-discount" icon="trash">
    Remove a row by id.
  </Card>
</CardGroup>

## Related

<CardGroup cols={2}>
  <Card title="Buyer instructions" href="/v2/storefront/buyer-instructions/overview" icon="user-gear">
    Operator-and-brand intersections, country terms, and freeform notes.
  </Card>

  <Card title="Product discovery" href="/v2/guides/discovery" icon="magnifying-glass">
    Where discounts are applied as buyers compose products.
  </Card>
</CardGroup>
