Skip to content
Knowledge ERP Docs
API Reference ↗
Sales

Price Lists

A named set of per-Product price overrides that lets you give specific customers — or customer segments — different prices without touching your default catalog.

A price list is a named collection of Product-level price overrides. When a customer has a price list assigned, any Product that appears on that list is sold at the list's price rather than the Product's default. Everything else falls back to the default catalog price — the list only needs to cover the Products where pricing differs.

Who sees which price? The lookup order is: price list item (if the customer has a list and the Product is on it) → then the Product's default price. Only active price lists are offered as choices on the customer record, so you can safely draft and test a list before turning it on.

Creating a price list #

Price lists live under Sales → Account Administration → Price Lists → New Price List. The header form is short:

  • Name — a descriptive label, e.g. Wholesale Tier A or Contract: Acme Corp. Required.
  • Description — free-text notes about who this list applies to or when it was negotiated.
  • Active — controls whether the list can be assigned to new customers. Inactive lists are hidden from the customer form but keep their items intact; toggle them back on if you need them again.

Save the header first, then add Product prices in the Product Prices panel that appears below.

Adding Product prices #

The Product Prices tab on the price list view page is where you build the list item by item. Each entry links one Product to one override price:

  • Product — search or select from your inventory catalog. Required; each Product can only appear once per list.
  • Price — the custom selling price for that Product on this list, entered in dollars. Required.

You can add, edit, and delete individual items at any time without deactivating the list. Prices are stored as integers in cents internally — the UI converts for you.

A Product that is not listed explicitly inherits the Product's own default price, so you only need to add rows for Products where this list differs from the default.

Assigning a price list to a customer #

Once a list is active, open a customer record (Sales → Customers → edit) and set the Price List field to the relevant list. The price list is then associated with the customer for reference when pricing quotes, sales orders, and invoices. The field shows Default pricing when no list is assigned. See Customers for more on the customer record.

The price list index #

Sales → Price Lists shows each list's name, Products (the number of line items currently on the list), and active status. Click a row to open the detail view with the full Product-price breakdown. Filter or sort by name or active flag to find what you need.

How price lists interact with other modules #

  • Sales Orders & Quotes — when you add a Product line to a quote, sales order, or invoice for a customer with a price list, the unit price auto-fills from that list (falling back to the Product's default when the Product isn't on the list). You can still override the price by hand. The Product picker also matches on the Product's barcode value, not just its name.
  • Customer Invoices — invoices generated from sales orders carry the prices from when the order was created; changing the list later does not retroactively alter existing documents.
  • Tax Rates — tax is applied on top of the resolved price, whether that comes from the list or the Product default.

Price list items #

Each row on a price list is a price list item: a three-field record (price_list, sku, price) that maps one Product to one override price. Items are independent records — you can query, create, or remove them via the API without touching the parent list. The price field is always an integer in cents over the API.

Doing it from the API #

# Create a price list
curl -X POST "https://your-domain.com/api/v1/price-lists" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "Wholesale Tier A", "description": "Net-30 wholesale accounts", "active": true}'

# Add a Product price override to the list
curl -X POST "https://your-domain.com/api/v1/price-list-items" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"price_list_id": "<price-list-id>", "product_id": "<product-id>", "price": 14900}'

# List all items on a specific price list
curl "https://your-domain.com/api/v1/price-list-items?price_list_id=<price-list-id>" \
  -H "Authorization: Bearer $TOKEN"

Prices are sent and returned in cents over the API (14900 = $149.00), even though the UI shows dollars. Listing price lists accepts an active boolean query parameter to scope results to active or inactive lists only.