Home / Help Center / pos-app-wholesale / wholesale / B2B Catalog
📚 wholesale

B2B Catalog

B2B Catalog lets you view your product list from the perspective of a single Trade Account, mark individual products as B2B-only (hidden from regular retail sale), and set a per-account custom SKU / custom name (an "alias") — useful when a wholesale customer refers to your products by their own internal codes or names.

📍 Menu path: Wholesale → B2B Catalog
👤 Who uses it: All roles with the Billing feature enabled

Overview

You must pick a Trade Account first — the whole table is scoped to one account at a time and shows that account's tier price and any aliases already set for it.

Tier Price is pulled from the active Price List entry matching that account's customerTier (falls back to STANDARD) — it is informational here, not editable on this page.

The B2B Only toggle (eye/eye-slash icon) is a global flag on the product itself, not scoped to the selected account — toggling it for one account's view changes visibility for all accounts and for regular retail sale.

The Listed indicator dot reflects the per-account alias's isListed flag; a product with no alias at all defaults to "listed" (green dot) even though no alias row exists yet.

Aliases (custom SKU / custom name / listed flag) are strictly per Trade Account — the same product can have a different custom SKU for every account.

Before You Start

Step-by-Step Guide

1 View a trade account's catalog

  1. Open Wholesale → B2B Catalog and choose a Trade Account from the dropdown (shown as "Business Name (Tier)").
  2. The table loads every active product for your store, each row showing its base SKU, any Account SKU / Account Name alias, its Tier Price for this account's tier, and Listed / B2B Only status.
  3. Use the search box to filter by product name, base SKU, or the account's custom SKU/name.

2 Restrict a product to B2B-only

  1. Click the eye icon in the "B2B Only" column for a product — the icon and tooltip flip between "Public — click to restrict to B2B" and "B2B only — click to make public".
  2. This calls PATCH /wholesale/catalog/products/:id/b2b immediately (no confirmation) and updates the shared Product record — the change is not specific to the account you currently have selected.

3 Set a custom SKU / name for one trade account

  1. Click the tag icon in the Actions column for a product to open "Custom SKU / Name".
  2. Enter a Custom SKU (what shows on this account's invoices) and/or a Custom Product Name, and toggle "Listed in this account's catalog" if you want to hide it from that account without touching the global B2B flag.
  3. Click "Save Alias" — this upserts a single WholesaleProductAlias row keyed by (Trade Account, Product), so re-opening and saving again for the same product/account updates the same row rather than creating a duplicate.

4 Remove a custom alias

  1. For any product that already has an alias (its row shows a trash icon next to the tag icon), click the trash icon and confirm.
  2. This deletes the alias row entirely — the product reverts to showing its base SKU/name and defaults back to "listed" for that account.

Every Field & Button, Explained

Field / ButtonWhat it does
Trade Account selectorRequired to load any data; switching accounts reloads the whole table scoped to the new account's aliases and tier.
SearchClient-side filter across product name, base SKU, and the currently-loaded account's custom SKU/name — does not re-query the server.
Product / SKU columnsThe product's own name and base SKU, unaffected by any alias.
Account SKU / Account Name columnsShow the alias's customSku/customName for the selected account if one exists, else a "—" placeholder.
Tier PriceBest matching active Price List price for the selected account's customerTier (or STANDARD if the account has none); shows "—" when no matching price list entry exists — read-only here.
Listed (dot indicator)Green when the alias's isListed is true or no alias exists yet (default-listed); red when an alias exists with isListed explicitly set to false.
B2B Only (eye icon)Global per-product flag (Product.isB2BOnly); purple eye-slash icon = currently B2B only, grey eye icon = currently visible to all customers. Click to toggle.
Tag icon (Actions)Opens the Custom SKU / Name modal for that product, pre-filled with any existing alias for the selected account.
Trash icon (Actions)Only shown once an alias exists for that product/account; permanently deletes the alias after a confirm prompt.
Custom SKU / Custom Product Name / Listed checkbox (modal)The three editable alias fields; all optional — you can save an alias with just a custom SKU and no custom name, for example.

Tips & Best Practices

Troubleshooting & FAQ

I marked a product B2B Only from this page while looking at Account A, and now Account B's catalog also shows it as B2B Only.
That is expected — B2B Only is stored on the Product record itself (isB2BOnly), not per trade account, so toggling it affects every account's view and also removes the product from regular retail visibility, not just the one account you had selected when you clicked it.
A product shows a green "Listed" dot even though I never explicitly listed it for this account.
A product with no alias row at all defaults to "listed" (isListed reads as true when alias.id is null) — the green dot does not mean someone actively listed it, only that nothing has unlisted it. Create an alias and uncheck "Listed" if you specifically need to hide it from this account.
Tier Price shows "—" for a product I know has pricing set up.
Tier Price only pulls from WholesalePriceList entries that are isActive, match this account's customerTier (or have no tier restriction), and fall within any validFrom/validUntil date range — a price list entry that is inactive, tier-mismatched, or outside its valid date window will not show here even though it exists.
I saved a Custom SKU for a product, closed the modal, and reopened it for the same product — my values were still there. Is it creating duplicates?
No — the alias is upserted on a unique (tradeAccountId, productId) pair, so saving again for the same product/account always updates the same row. You will only ever see one Account SKU / Account Name per product per trade account.