Price overrides
A price override is a custom price for a single product that applies only to a single customer. Your catalog price stays the same for everyone else.
This is the B2B equivalent of a negotiated contract price: you list Widget A
at $10.00 on the catalog, but you've agreed a $8.50 rate with Acme
Restaurant — so you set an override, and Acme sees $8.50 on the storefront
and on every order they place from then on.
Where to manage overrides
From a customer's detail page (/dashboard/customers/{id}), scroll to the
Custom pricing section. You'll see:
- Every product with an existing override — default price, custom price,
and the diff as a percentage (
+15.0%in red for a markup,-15.0%in green for a discount). - A + Add price button that opens an inline form: pick a product from the dropdown and type the custom price.
Adding an override
- Click + Add price.
- Pick a product from the dropdown. Only active products in your catalog show up, and products that already have an override for this customer are filtered out.
- The price field defaults to the current catalog price — change it to the custom rate.
- Click Save.
The override is saved against the customer + product pair — only one override per product per customer is allowed. An audit-log entry captures the change with the customer, product, and new price.
Editing an override
Click Edit next to the existing override, change the price inline, and click Save (or press Enter). Same write, same audit log.
Removing an override
Click Remove next to the override. The override is deleted. The customer
goes back to paying the catalog price on that product, immediately. An
audit-log entry with action PriceOverrideDeleted is written.
How overrides apply
Two places in the customer's journey consult a customer's overrides:
1. When they browse the storefront
On catalog page load, Distribu queries every override for the logged-in customer and merges them into the product list. The product card shows the custom price, and the default price isn't shown on the storefront — so from the customer's perspective it just looks like "that's the price."
If a product doesn't have an override, it shows the catalog price.
2. When they place an order
At order time Distribu re-checks overrides on the server. For each line
item: if a custom price exists for this customer + product, that's the
unitPrice saved on the order — otherwise the catalog price is used.
This is important — we don't trust the price the client sent. Even if the customer somehow manipulates the cart to submit a lower price, the server re-computes the correct price at order time.
The order item's saved unitPrice is a snapshot of whatever price
applied. If you later change or delete the override, existing orders keep
the price they were placed at — historical totals never change.
Validation
| Price | Non-negative number, up to 2 decimal places |
| Customer and product scope | Both must belong to your company — enforced both in the dashboard and server-side |
| One override per product per customer | Enforced server-side — attempting a second override for the same product replaces the first |
A negative price is rejected: "Price must be a positive number." An override
price of $0.00 is allowed — it's how you'd mark a free sample or a
promotional item.
How this differs from a catalog price change
| Catalog price change | Price override | |
|---|---|---|
| Who sees the new price | Everyone | Just this one customer |
| Where to set it | Inventory → product edit | Customers → customer → Custom pricing |
| Affects existing orders | No (unit price is snapshotted at order time) | No (same) |
| Plan limit | None | None |
If you need to raise prices for all customers, edit the product in Inventory. Overrides are for exceptions — one customer at a time.
Overrides via API or CSV
Overrides don't have an API endpoint or a CSV importer right now. They live on the customer detail page. If you need to bulk-set overrides across many customers, email support@distribu.app — we can help.
Contacts inherit
A customer's contacts all see and get the same overrides. The overrides are attached to the customer account, not the individual contact, so there's no way to give one contact a different price than another contact under the same customer.
Next: Storefront access.
