---
title: "Shopify B2B technical reference for agencies"
description: "Shopify B2B by plan, the Company, catalog, customer-account and draft-order mechanics, the API changes that touch B2B, and where a quote layer fits. Dated."
url: "https://www.quotway.com/reference/shopify-b2b"
type: "reference"
published: "2026-09-20"
verified: "2026-10-07"
shopify_api_version: "2026-10"
audience: "Shopify agencies, developers and solution architects scoping a B2B build"
scope: "Native Shopify B2B (Companies, locations, catalogs, customer accounts, checkout, draft orders, payment terms, Markets, sales staff, migration, API versions) and the gaps a quote workflow fills"
locale: "en"
source: "QuotWay - B2B Quote & Negotiation App for Shopify"
---

# Shopify B2B technical reference for agencies

This page is a maintained lookup table, not an article.

**How to read it.** Every statement is one of three kinds, and the page says which. **Shopify fact** - the default for every row above the final section: read from the Shopify page linked at the top of its section, on the date shown, quoted where the wording matters. **Recommendation** - an engineering judgement, tagged inline and stated with the mechanics that make it reasonable. **QuotWay** - how this product behaves, confined to the final section and tagged there. Nothing on the page is a measurement of merchants; where a number is QuotWay's own data it will be labelled *QuotWay observation* with its sample, and there are none yet.

Every row cites the Shopify page it was read from and the date it was checked, because Shopify's B2B capabilities changed substantially in 2026 (every plan since 2 April, a quarterly API cadence, Editions through the year) and agency guides have gone stale within weeks: a widely shared implementation guide dated 25 May 2026 still says native B2B needs Shopify Plus, seven weeks after Shopify extended it to every plan. When a Shopify Edition or a quarterly API release changes a row, the row changes and the change is logged at the foot of the page.

QuotWay is a quote and negotiation app, so the last section states plainly where a quote layer attaches to this model and what it depends on. Nothing above that section is about QuotWay.

## Plan capability matrix
Source: [B2B features by plan](https://help.shopify.com/en/manual/b2b/getting-started/plan-features) and the [2 April 2026 announcement](https://www.shopify.com/news/b2b-for-all), both read on 20 September 2026 and re-read 7 October 2026. B2B is included at no extra cost on Basic, Grow, Advanced and Plus; the rows below are the differences.

| Capability | Basic | Grow | Advanced | Plus |
| --- | --- | --- | --- | --- |
| Companies, company locations, location-level permissions | Yes | Yes | Yes | Yes |
| B2B market catalogs | Up to 3 active across all B2B markets | Up to 3 | Up to 3 | Unlimited |
| Direct catalog assignment to a company or location | No | No | No | Yes |
| Quantity rules and quantity price breaks | Yes | Yes | Yes | Yes |
| Net terms, payment reminders, vaulted credit cards, ACH (US) | Yes | Yes | Yes | Yes |
| Deposit requirements | No | No | No | Yes |
| Partial payments, payment request per fulfilment | No | No | No | Yes |
| Draft order to invoice, checkout to draft, easy reorders, PO numbers | Yes | Yes | Yes | Yes |
| Contextual checkout and storefront customisation by market | No | No | Yes | Yes |
| Sales staff permissions (up to 10 staff per company location) | Yes | Yes | Yes | Yes |
| Trade theme, quick order list | Yes | Yes | Yes | Yes |
| Shopify Flow B2B triggers and actions | Yes | Yes | Yes | Yes |

Read: [do you need Shopify Plus for B2B?](/blog/shopify-b2b-without-plus) for the plan decision in merchant terms, and [Shopify B2B features explained](/blog/shopify-b2b-features-explained) for what each row means.

What none of the four plans models natively: a buyer's price request, a seller's proposal with versions, a counter-offer, an approval chain on a discount, or an audit trail of the negotiation. *Recommendation:* those live in a quote layer or a custom build; see the last section, and [when you shouldn't use a quote app](/blog/when-not-to-use-a-shopify-quote-app) for the cases the native features already cover.

## The object model
Source: [Build B2B apps](https://shopify.dev/docs/apps/build/b2b) and [companies and customers](https://help.shopify.com/en/manual/b2b/companies-and-customers), read 20 September 2026 and re-read 7 October 2026; [adding customers to companies](https://help.shopify.com/en/manual/b2b/companies-and-customers/adding-customers), read 7 October 2026 - "you can add a customer only to one company".

| Object | Shopify's definition | What attaches to it |
| --- | --- | --- |
| Company | "The business entity that makes a B2B purchase. A company contains locations and contacts." | Locations, contacts, company-wide payment terms, metafields |
| Company location | "A single location or branch of the company" - the entity actually sold to | Billing and shipping addresses, tax ID and exemptions, catalogs, payment terms, checkout settings (draft-only checkout, editable shipping address), vaulted cards, sales staff, contacts |
| Company contact | "A person that acts on behalf of the company", connected to a Shopify customer record | Roles per location; a customer belongs to one company but can be on several of its locations |
| Catalog | Products and pricing a location can buy: a product selection, a price list, quantity rules and volume pricing | B2B markets (any plan) or directly to companies and locations (Plus) |
| Order or draft order | Associated with a company, a location, or a contact via `purchasingEntity` | Payment terms, PO number, deposit (Plus), locked prices, reserved inventory |

> **Shopify B2B object model**
>
> A company contains one or more company locations and company contacts. The company location is the entity sold to: catalogs (a publication plus a price list, reached through a B2B market on any plan or assigned directly on Plus), payment terms, tax ID and exemptions, checkout settings and up to ten sales staff all attach to it. A contact is connected to a Shopify customer record and can act for several locations. A draft order or order is associated with the company, location and contact through purchasingEntity, carries payment terms, PO number, a deposit on Plus, locked prices and reserved inventory, and becomes an order when paid. A dashed band marks the B2B market that groups locations and sets their currency.
>
> The five objects and what hangs off each; the location is where pricing, terms and tax meet, and the draft order is where they leave.

Catalogs attach to locations, never to contacts. A buyer signed in with several locations chooses one before they see prices or check out, so every price the storefront shows is a location's price.

## Catalogs, quantity rules and volume pricing
Source: [B2B catalogs](https://help.shopify.com/en/manual/b2b/catalogs) and [quantity rules and volume pricing](https://help.shopify.com/en/manual/b2b/catalogs/quantity-pricing), read 20 September 2026; [customizing B2B pricing using catalogs](https://help.shopify.com/en/manual/b2b/catalogs/creating-catalogs), [B2B catalogs with Markets](https://help.shopify.com/en/manual/b2b/markets/catalogs) and [manage B2B catalogs (apps)](https://shopify.dev/docs/apps/build/b2b/manage-catalogs), read 21 September 2026; all re-read 7 October 2026 at API 2026-10, with [ProductVariantContextualPricing](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductVariantContextualPricing).

- A location can have several catalogs (up to 25; 10,000 per store). Two rules decide the price when the same product appears in more than one, in this order: a catalog assigned directly to the location (Plus) is "the most specific" and beats a catalog that reaches the location through a B2B market; among catalogs at the same level, "the lowest price displays to the customer" (compared "not including quantity rules or volume pricing breaks"), and quantity rules and volume pricing follow the catalog with the lowest price per variant - on an equal lowest price, "the first catalog that was created". There is no precedence setting beyond that. (Corrected 21 Sep 2026 - the first publication stated only the lowest-price rule.)
- A catalog is a publication (which products) plus a price list (what they cost). With no price list the location gets the base variant prices converted to the market currency; with no publication, B2B customers logged in for that location see no products. Fixed prices override the catalog's percentage adjustment.
- Off Plus, the limit is three *active* catalogs across all B2B markets combined, not three per market. Plus lifts the cap and adds direct assignment to a company or location. A catalog assigned directly to a company or location can't be added to a rollout.
- Quantity rules are per variant: minimum, maximum and increment (a whole number, default 1). Quantities do not combine across variants.
- Volume pricing allows up to 10 price breaks per product, applied per variant. A break's quantity must exceed the minimum and be a multiple of the increment. Once volume pricing is applied, the product's price is fixed and the catalog's overall percentage adjustment no longer applies to it.
- From API 2026-10, `ProductVariant.contextualPricing` also returns `auditTrail`: the ordered price adjustments (type, value, resulting price, display label) behind the contextual price. It is empty when Shopify cannot return a complete trail, does not cover order or draft-order lines, and names no catalog or price list.
- Catalog pricing is fixed pricing. A price that depends on the deal - freight, specification, a one-off volume, a negotiation - is outside what a catalog can express. How the resolved price should become a quote's starting point is in [what price a Shopify B2B quote should start from](/blog/shopify-b2b-quote-starting-price).

Read: [why B2B buyers can't see their prices](/blog/shopify-b2b-prices-not-showing) for the symptom-by-symptom diagnosis when a buyer sees the retail price, no price or a price that changes at checkout.

## Customer accounts and sign-in
Source: [Sign-in and customer accounts in B2B](https://help.shopify.com/en/manual/b2b/customer-login-and-accounts) and [customer accounts for apps](https://shopify.dev/docs/apps/build/customer-accounts), read 20 September 2026 and re-read 7 October 2026; [identity provider requirements](https://help.shopify.com/en/manual/customers/customer-accounts/sign-in-options/identity-provider/requirements), read 7 October 2026.

- Legacy customer accounts are deprecated as of 26 February 2026: no longer available to new stores or to existing stores not already using them, no further feature updates or support, and "all merchants must upgrade". Deprecated is not yet sunset - Shopify's changelog says "a final sunset date for legacy customer accounts will be announced later in 2026", so a store still on them keeps working until that date is set. B2B never supported them: "you can't use legacy customer accounts for B2B customers and orders". Any guide that frames a B2B build as a legacy-versus-new decision is describing a choice that no longer exists.
- Buyers sign in with the email on a company location and a one-time PIN sent to that email. No password.
- A buyer on several locations picks the location they are buying for before browsing or checkout.
- In the account a B2B buyer can view order history, account and location information, saved payment methods, pay invoices, track orders, reorder by duplicating a past order, and submit return requests.
- Customer account UI extensions run only on the current customer accounts. That is how an app puts a page (quotes, for instance) inside the account. On Shopify Plus a store can connect its own OAuth 2.0 / OpenID Connect identity provider, and the Spring '26 Edition added profile and tag sync from providers such as Auth0, Ping Identity and Azure ID (also Plus only); sessions of up to 365 days apply on every plan.
- A buyer who is not associated with a company location is treated as a D2C customer even if they sign in.

Read: [building a Shopify B2B portal on customer accounts](/blog/shopify-b2b-customer-accounts-buyer-portal) for the four surfaces, the extension limits and where guests go, and [a B2B buyer portal on Shopify](/blog/b2b-buyer-portal-shopify) for what the account can and cannot carry for a quoting buyer.

## Checkout and draft orders
Source: [Checkout and accounts](https://help.shopify.com/en/manual/b2b/checkout), [draft orders for B2B apps](https://shopify.dev/docs/apps/build/b2b/draft-orders) and [B2B features overview](https://help.shopify.com/en/manual/b2b/getting-started/features), read 20 September 2026; [creating B2B orders using draft orders](https://help.shopify.com/en/manual/b2b/checkout-and-orders/draft-orders), [DraftOrderStatus](https://shopify.dev/docs/api/admin-graphql/latest/enums/DraftOrderStatus) and [draftOrderUpdate](https://shopify.dev/docs/api/admin-graphql/latest/mutations/draftOrderUpdate), read 21 September 2026; all re-read 7 October 2026 at API 2026-10.

| Setting or step | Behaviour |
| --- | --- |
| Location set to "Submit all orders as drafts for review" (the checkout overview still names the same setting "Only allow draft orders at checkout") | The buyer's button reads "Submit for approval"; the order lands on the Drafts page with prices locked, and completes only when the merchant creates the order or the buyer pays an invoice |
| No payment terms on the location | Buyer enters a card and clicks "Pay now" |
| Net terms on the location | Buyer clicks "Submit"; the order shows "Payment pending"; nothing is captured automatically when the terms expire |
| Net terms with a deposit (Plus) | Buyer clicks "Submit now" and pays the deposit; the order shows "Partially paid" or "Payment pending" depending on capture |
| PO number | Optional field at checkout, shown on the order status page; readable inside checkout Functions since Spring '26 |
| Creating a draft order for a company via the API | `draftOrderCreate` with `purchasingEntity: { purchasingCompany: { companyId, companyLocationId, companyContactId } }`; `draftOrderInvoiceSend` emails the invoice; `draftOrderComplete` turns it into an order |
| Locked prices and reserved inventory | For a draft created in the admin, both are explicit per-draft actions: it neither freezes its prices nor holds stock unless you tell it to. A draft the buyer submitted for review arrives with its prices locked (lock stops automatic rises and automatic falls alike) |
| Draft order status | `DraftOrderStatus` has three values at 2026-07 and 2026-10: `OPEN` (not paid, no invoice sent), `INVOICE_SENT`, `COMPLETED` (paid). `draftOrderUpdate` changes the draft in place (a draft has no versions) and is not restricted on an invoice-sent draft; an update after a checkout has started unlinks that checkout |
| Line items | 500 per order or draft order; the API's `draftOrderCreate` and `draftOrderUpdate` ceiling is 499 (see [draft-order limits](/blog/shopify-draft-order-limits)) |
| Accelerated checkouts | Shop Pay, Apple Pay, Google Pay and Amazon Pay are incompatible with B2B checkout |

A draft order is the record of an agreed order awaiting payment or approval. It has no request, proposal, version or counter-offer state; those either happen before the draft order exists or in a system that creates the draft order once the price is settled. [A Shopify draft order is not a quote](/blog/shopify-draft-order-vs-quote) sets the three draft-order states against the quote states a negotiation needs, and shows where the hand-off sits. `draftOrderCreate` takes no idempotency key at 2026-07 or 2026-10 (mutations that support one, such as `inventoryAdjustQuantities`, document `@idempotent` on their reference page); [how one accepted quote becomes exactly one draft order](/blog/idempotent-draft-order-creation) covers building that guarantee in the app.

Read: [why a quote converts at the wrong price](/blog/quote-converts-at-wrong-price) when a draft order's price differs from the accepted quote, and [when the quote and the Shopify order disagree](/blog/quote-to-order-out-of-sync) for what drifts after conversion.

## Payment terms and deposits
Source: [payment terms](https://help.shopify.com/en/manual/b2b/checkout-and-orders/payment-terms) and the [deposit fields changelog](https://shopify.dev/changelog/draft-order-deposit-fields-now-available-in-the-admin-and-customer-account-graphql-apis), read 20 September 2026; [creating draft orders](https://help.shopify.com/en/manual/fulfillment/managing-orders/create-orders/create-draft) and the [`PaymentTermsType` enum](https://shopify.dev/docs/api/admin-graphql/2026-10/enums/PaymentTermsType), read 30 September 2026; all re-read 7 October 2026 at API 2026-10, with [B2B considerations](https://help.shopify.com/en/manual/b2b/getting-started/considerations) and the [2026-10 release notes](https://shopify.dev/changelog/release-notes/2026-10).

- Options on a company location: no payment terms (due immediately, the default), Net 7, 15, 30, 45, 60 or 90, due on fulfilment, or a fixed date.
- The Admin API enumerates four term types - `RECEIPT` ("due on receipt"), `FULFILLMENT`, `NET` and `FIXED` - and the draft-order help lists due on receipt among the terms a draft order can carry; the B2B payment-terms page lists all but due on receipt.
- Terms attach to a company location, to a single draft order, company-wide to all locations, or in bulk across companies.
- Payment terms are not B2B-only: Shopify's general draft-order help (outside the B2B section) has you "select **Payment due later**" and pick a term from the **Payment terms** menu, for any customer, with no company or location required. Apps set them through `DraftOrderInput.paymentTerms` with the `write_payment_terms` scope.
- Payment reminders can go out on the due date through Shopify Flow. Payment is not captured automatically when terms expire, and B2B orders and draft orders "must be manually captured when they don't have a valid authorization and due on fulfillment payment terms" (Shopify's wording).
- Vaulted credit cards are saved at the company-location level; Spring '26 added Flow-driven charging of a vaulted card on fulfilment, on the due date or on invoicing. Since API 2026-10 (1 October 2026), `paymentInstrumentSendAddEmail` emails a buyer a link to add a payment method to a specific draft order or order.
- Deposits are a percentage requirement on a location or a draft order and are "available only on the Shopify Plus plan". Since API 2026-07 (1 July 2026) apps can set `DraftOrderInput.deposit` on the Admin API and read `DraftOrder.deposit` on the Customer Account API, again Plus only.
- Partial payments and a payment request per fulfilment are Plus only.

Read: [Shopify B2B payment terms](/blog/shopify-b2b-payment-terms) for how terms behave on a quote and an order, and [taking deposits on negotiated quotes](/blog/take-deposits-on-negotiated-quotes) for the deposit mechanics.

## B2B markets
Source: [B2B and Markets](https://help.shopify.com/en/manual/b2b/markets) and [managing B2B with Markets](https://help.shopify.com/en/manual/b2b/markets/managing), read 20 September 2026 and re-read 7 October 2026; [catalogs with Markets](https://help.shopify.com/en/manual/markets-new/catalogs) and the [2026-10 Market object](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Market), read 7 October 2026.

A B2B market groups companies to give them their own currency, theme, tax and duty collection, discounts, pricing and product availability. Catalogs attach to B2B markets on every plan; the three-active-catalog limit counts across all B2B markets. Theme-editor customisation by market needs Advanced or Plus, which is also where contextual checkout lives. A company location can match several B2B markets at once; Shopify's B2B pages give no tie-break beyond "the customizations of the markets that they match". Markets can be nested: from API 2026-10 apps with `read_markets` can read the hierarchy through `marketRelationships` and `Market.parentMarkets` / `childMarkets` (eventually consistent after a change), and the general Markets catalog rule is the more specific market's price, else the lower price.

## Sales staff and admin access
Source: [orders, data and admin access for B2B sales staff](https://help.shopify.com/en/manual/b2b/sales-staff), read 20 September 2026 and re-read 7 October 2026, with the [B2B features overview](https://help.shopify.com/en/manual/b2b/getting-started/features).

- "You can assign up to 10 sales staff to each company location", and one staff member can be on many locations.
- The permissions involved are "View companies", "Assign staff to company locations" and "Restrict permissions to assigned company locations".
- A restricted staff member sees only the Customers, Orders, Draft orders and Companies pages, filtered to their locations.
- Available on all plans; the number of staff seats still follows the plan, and Shopify's features overview adds that "some permission levels might be limited on non-Plus plans" without naming them.

Read: [sales-rep quoting on Shopify](/blog/b2b-sales-rep-quoting-shopify) for what these permissions do and do not cover once reps quote, and [the B2B security review checklist](/blog/shopify-b2b-security-review-checklist#admin-access) for the rest of the store's access review - two-step authentication, collaborators, draft-order and discount permissions, buyer contact roles.

## Migrating existing customers into companies
Sources: [migrating customers to B2B](https://help.shopify.com/en/manual/b2b/getting-started/migrating-customers), read 20 September 2026 and re-read 23 September 2026 and 7 October 2026; Shopify Staff on the [developer forum](https://community.shopify.dev/t/historic-orders-linking-to-company-customer/26587), 2 December 2025, read 23 September 2026 and re-read 7 October 2026 (no later reply).

| Rule | Detail |
| --- | --- |
| Which orders move | D2C orders only; B2B orders stay with the company they were placed for |
| How much history | The customer's full order history or none - "partial order history migration isn't supported" |
| Where history lands | One company location; orders cannot be split across locations |
| What else can come along | Tax exemptions (except those made by switching off tax collection), shipping-address flexibility, draft-order submission preference, payment terms |
| Orders that never move | Cancelled and deleted orders - "you can't migrate canceled or deleted orders"; exclude them before counting, or reconciliation will not match the source |
| Batch size | Up to 250 customers at once via the customers page's "Add to company" |
| Automation | None for this step. `CompanyLocationMigrateOrdersMutation` and `CompanyLocationRevertMigratedOrders` are "internal-only and not exposed in the public API". Orders that live outside Shopify are a different job and do have an API: `orderCreate` with `companyLocationId` and `customer.toAssociate` |
| Reversibility | Deleting a new company returns its customers to D2C; removing a customer from an existing company offers "the option to remove the original orders that you migrated" |

Read: [migrating wholesale customers to Shopify Companies](/blog/migrate-wholesale-customers-to-shopify-companies) for the two paths, the dependency chain that fixes the order of work, the throughput arithmetic and how to pilot.

## Automation and integrations
Source: [B2B features overview](https://help.shopify.com/en/manual/b2b/getting-started/features) and [Shopify Editions Spring '26](https://www.shopify.com/editions/spring2026), read 20 September 2026 and re-read 7 October 2026.

- Shopify Flow ships B2B triggers and actions on every plan, which is the native automation surface for B2B.
- Shopify's own integrations named in Spring '26: QuickBooks syncs B2B orders, PO numbers and company details; Mailchimp can target B2B segments. ERP, accounting and PIM connections beyond those go through partner apps or the Admin API.
- Checkout Functions can read the billing address and PO number, so PO-required or address-restricted rules can be enforced in Functions rather than in the theme.

Read: [ERP, CRM and PIM integration patterns](/blog/shopify-b2b-erp-crm-pim-integration-patterns) for who writes which field, the three doors a quote leaves through and what a converted order carries; [building a Shopify Flow integration](/blog/building-a-shopify-flow-integration) for the trigger and action pattern; and [Shopify Sidekick intent types](/blog/shopify-sidekick-intent-types) for the assistant surface.

## API versions and the changes that touch B2B
Source: [API versioning](https://shopify.dev/docs/api/usage/versioning), [2026-07 release notes](https://shopify.dev/changelog/release-notes/2026-07), [2026-10 release notes](https://shopify.dev/changelog/release-notes/2026-10), read 20 September 2026 and re-read 7 October 2026; the changelog entries on the [`priceRule` removal](https://shopify.dev/changelog/posts/remove-pricerule-from-draft-order-discount-warning), [`orderUpdate` tax recalculation](https://shopify.dev/changelog/posts/updating-an-orders-shipping-address-returns-accurate-financial-data) and [Events](https://shopify.dev/changelog/blog/next-generation-events-are-now-generally-available), and the 2026-10 [DraftOrderLineItem](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/DraftOrderLineItem) reference, read 7 October 2026.

Shopify releases a version every three months on the first day of the quarter; each stable version is supported for at least 12 months. A request that names an unsupported version "falls forward" to the oldest accessible stable version, silently. Stable on 7 October 2026: 2026-01, 2026-04, 2026-07 and 2026-10 (latest, released 1 October 2026); 2027-01 is the release candidate. 2025-10 is listed as unsupported and stays accessible until 16 October 2026 at 15:00 UTC, after which a request that names it falls forward to 2026-01.

| Version | Change | Type |
| --- | --- | --- |
| 2026-07 | `DraftOrderInput.deposit` on the Admin API; `DraftOrder.deposit` (read-only) on the Customer Account API - Plus stores | New, 1 Jul 2026 |
| 2026-07 | `DraftOrderLineItem.weight` replaces `grams`. Shopify's changelog says `grams` is removed from 2026-07, but the 2026-07 and 2026-10 references still list it as deprecated - stop reading it either way | Deprecated, 13 Apr 2026 |
| 2026-07 | Customer Account API: `DraftOrder.discountApplications` and `DraftOrderLineItem.discountAllocations` added; `discountedUnitPrice` deprecated in favour of `approximateDiscountedUnitPrice` | New and deprecated, 1 Jul 2026 |
| 2026-10 | `priceRule` removed from `DraftOrderDiscountNotAppliedWarning`, and with it the legacy `PriceRule` object and its related types; select `discountTitle` and `discountCode` from `draftOrderCalculate`, `draftOrderCreate` and `draftOrderUpdate` instead | Removed, 1 Oct 2026 |
| 2026-10 | Customer Account API: `Customer.lastIncompleteCheckout` and the `Checkout` subtree removed, no replacement | Removed, 1 Oct 2026 |
| 2026-10 | Changing the shipping address of an unfulfilled order with `orderUpdate` now recalculates its taxes for the new destination; partly or fully fulfilled orders, and orders that can't be edited, are not recalculated | Changed, 1 Oct 2026 |
| 2026-10 | `OrderDisplayFulfillmentStatus` can return `FULFILLMENT_NOT_REQUIRED` for an order with zero remaining fulfillable quantity | New, 1 Oct 2026 |
| 2026-10 | Events, Shopify's successor to classic webhooks, generally available for topics including Order, Company and Customer: the app chooses the triggers and a GraphQL query for the payload; classic webhooks keep working | New, 1 Oct 2026 |

`ProductVariantContextualPricing.auditTrail` (2026-10) is recorded under [catalogs](#catalogs), and the market hierarchy (`marketRelationships`, 2026-10) under [B2B markets](#markets).

Deprecations are announced in the developer changelog, in the app's alerts in the Dev Dashboard, in API client warnings and in the reference itself. *Recommendation:* an integration that pins a version and clears its Dev Dashboard alerts before each upgrade will not be surprised by any of the rows above.

Read: [Shopify B2B technical debt](/blog/shopify-b2b-technical-debt) for the retired surfaces around these versions - checkout.liquid, Shopify Scripts, legacy customer accounts - in one dated calendar, and the structural decisions that are hard to reverse.

## Known limitations
Source: [requirements and considerations for using B2B](https://help.shopify.com/en/manual/b2b/getting-started/considerations), read 20 September 2026 and re-read 7 October 2026, plus the plan-features gaps above.

| Area | Limitation |
| --- | --- |
| Checkout | Accelerated checkouts (Shop Pay, Apple Pay, Google Pay, Amazon Pay) and tipping are incompatible; checkout.liquid customisations are not supported |
| Products | Subscriptions are incompatible with B2B; agentic storefronts are not supported for B2B wholesale |
| Delivery | Local delivery only on B2B draft orders; pickup points incompatible; pickup in store off by default (Support request) |
| Off by default, Support request to enable | Abandoned checkouts, line item scripts, gift cards at checkout, pickup in store |
| Orders | 500 line items per order or draft order; the buyer must be associated with a company location when the order is placed |
| Catalogs off Plus | Three active catalogs across all B2B markets; no direct company assignment |
| Payments off Plus | No deposits, no partial payments, no payment request per fulfilment |
| Customer accounts | Legacy accounts not supported (and deprecated platform-wide since 26 Feb 2026) |
| Fees | B2B and D2C orders can carry different platform fee rates; confirm with Shopify Support |
| Apps | Some third-party apps are incompatible with B2B; check with the developer |

Read: [tax exemption on Shopify B2B](/blog/shopify-b2b-tax-exemption) for the exemption rows in practice, and [the draft-order limits](/blog/shopify-draft-order-limits) for the order rows.

Read: [is Shopify good for B2B?](/blog/is-shopify-good-for-b2b) for the limits and native gaps that make another platform the better fit, and how six other B2B platforms document the same capabilities.

## Where a negotiated-quote layer fits
Native B2B is a fixed-price model: a location's catalog price, quantity rules and terms, then checkout or a draft order. It has no object for a buyer asking for a price, a seller proposing one, a counter-offer, a discount that needs sign-off, or the history of that exchange. *Recommendation:* a quote layer owns exactly those states and hands Shopify a draft order once the price is agreed; anything else it stores would be a second copy of Shopify's data.

*QuotWay* - how the product attaches to the model on this page, stated as shipped on 20 September 2026 and updated on 30 September 2026:

| Model element | What QuotWay does with it |
| --- | --- |
| Company, location, contact | A quote attaches to the buyer's Company, Company Location and Contact (company-aware quoting, Enterprise plan); targeting rules can show quoting to a specific company or location |
| Catalog price | A proposal prices from the buyer's company-location catalog and negotiates from there; standing prices stay in Shopify |
| Proposal and counter-offer | Versioned proposals and buyer counters; a sent proposal's lines are locked, so a change is a new version or a counter, never an edit in place |
| Approval | Approval policies route a discount past a threshold to the right approver, enforced server-side |
| Draft order | An accepted quote converts to a native draft order carrying the Shopify payment terms picked on the proposal - any quote (wholesale, DTC or company-aware), every plan, no Shopify B2B needed |
| Deposits | A negotiable deposit (1-99 percent) is collected at Shopify checkout on the converted draft order; Shopify Plus stores, from the Professional plan |
| Customer account | Quotes appear inside the customer account through a customer account UI extension, or in a hosted portal for guests and stores without customer accounts; detected automatically |
| Flow, API and webhooks | Flow triggers on Professional and up, actions on Enterprise; a [REST API](/docs/api) that reads quotes and creates quote requests, and [signed outbound webhooks](/docs/api/webhooks) for quote events, on Enterprise. The API never sets a price or converts a quote; the draft order still comes from the conversion above |
| Plans | Draft-order conversion and payment terms run on every plan including the free Lite plan; company-aware quoting on Enterprise |

Full detail: [what lives in Shopify and what belongs in the quote layer](/blog/shopify-b2b-quote-architecture) (the architecture, object by object), [how to evaluate a Shopify B2B app](/blog/shopify-b2b-app-evaluation-checklist) (53 vendor-neutral questions), [native B2B, a quote app, a custom build or CPQ](/blog/shopify-b2b-native-vs-quote-app-vs-custom-vs-cpq) (the decision guide), [the 50-test launch plan](/blog/shopify-b2b-launch-test-plan), [Shopify B2B quoting](/features/b2b), [what QuotWay can and cannot do](/capabilities), [converting to draft orders](/docs/converting-to-orders/convert-a-quote-to-a-draft-order).

## Changes to this page
| Date | Change |
| --- | --- |
| 20 Sep 2026 | **Added.** First publication. All rows verified against the Shopify pages linked in each section on 20 September 2026; API 2026-07 stable, 2026-10 release candidate |
| 21 Sep 2026 | **Changed.** Draft-order rows re-read for the [draft order vs quote](/blog/shopify-draft-order-vs-quote) post: the per-location setting is named "Submit all orders as drafts for review" on the B2B draft-orders and checkout-settings pages and "Only allow draft orders at checkout" on the checkout overview - both recorded; submitted drafts have prices locked by default; `DraftOrderStatus` confirmed as three values (OPEN, INVOICE_SENT, COMPLETED) at 2026-07 |
| 21 Sep 2026 | **Corrected.** Catalog rows corrected for the [starting-price post](/blog/shopify-b2b-quote-starting-price): the first publication stated only "the lowest price wins"; Shopify's Markets page gives two rules in order - a catalog assigned directly to the location is "the most specific" and beats a market catalog, then lowest price among equals, with quantity rules following the lowest-priced catalog per variant. Added: catalog = publication + price list, the no-price-list and no-publication behaviours, 25 catalogs per location, 10,000 per store |
| 22 Sep 2026 | **Changed.** Customer-accounts row re-read against Shopify's 26 Feb 2026 changelog: legacy accounts are deprecated, not yet sunset - the final date is to be announced later in 2026 - and the row now says so. The introduction's "B2B is the part of Shopify that changes most" replaced with what can be shown (every plan since 2 April 2026, quarterly API releases, Editions). Change-table rows labelled Added / Changed / Corrected from here on. An evidence legend (Shopify fact / Recommendation / QuotWay) added at the top and the three recommendation sentences tagged inline |
| 22 Sep 2026 | **Added.** Pointer from the automation section to the [integration patterns post](/blog/shopify-b2b-erp-crm-pim-integration-patterns), whose research re-read the Order and DraftOrder objects, `CompanyInput.externalId`, the price-list mutations, the webhook topic list, Flow's Send HTTP request action and the Global ERP Program collection on 22 September 2026; no row of this page changed as a result |
| 22 Sep 2026 | **Added.** Pointer from the customer-accounts section to the [portal-on-customer-accounts post](/blog/shopify-b2b-customer-accounts-buyer-portal), whose research re-read the B2B sign-in, payment-terms, company-account-request and contact-permission pages, the customer account UI extension targets and capabilities (64 KB, 128 KB for a full page), the Customer Account API's draft orders and the headless B2B guide on 22 September 2026; no row of this page changed as a result |
| 23 Sep 2026 | **Added.** Two migration rows for the [migration playbook](/blog/migrate-wholesale-customers-to-shopify-companies): cancelled and deleted orders cannot be migrated, and the migrate-orders and revert-migration mutations are internal to Shopify, so the admin migration cannot be scripted - Shopify Staff on the developer forum, 2 December 2025, read 23 September 2026. The section's source line now carries both sources and the re-read date |
| 24 Sep 2026 | **Added.** Pointer from the API-versions section to [Shopify B2B technical debt](/blog/shopify-b2b-technical-debt), whose research re-read the API versioning page (including the App Store delisting rule for apps still on unsupported resources), the checkout.liquid and checkout-upgrade pages, the Scripts deprecation notice, the Functions plan rule, the cart and checkout validation API and the B2B store-type and expansion-store pages on 24 September 2026; no row of this page changed as a result |
| 25 Sep 2026 | **Added.** Pointer from the sales-staff section to the [B2B security review checklist](/blog/shopify-b2b-security-review-checklist), whose research read the two-step authentication, collaborator, staff-permission and company-contact pages, the access-scope, offline-token, webhook and app-proxy pages, and the custom-app and expiring-token changelog entries on 25 September 2026; no row of this page changed as a result |
| 30 Sep 2026 | **Changed.** QuotWay section: the Flow row now also records the REST API and signed outbound webhooks, live on the Enterprise plan from 30 September 2026 ([API docs](/docs/api)); no Shopify row changed |
| 30 Sep 2026 | **Corrected.** Payment-terms section: added due on receipt (the Admin API's `RECEIPT` term type, also listed on the draft-order help page; the B2B page omits it) and that any draft order can carry payment terms without a company. QuotWay section: payment terms now work on any quote on every plan, not only company-aware quotes on Enterprise |
| 30 Sep 2026 | **Added.** The checkout and draft orders section now records that `draftOrderCreate` documents no `@idempotent` directive at 2026-07 (read 30 September 2026 against `inventoryAdjustQuantities`, which does), with a pointer to [idempotent draft order creation](/blog/idempotent-draft-order-creation) |
| 7 Oct 2026 | **Changed.** Whole page re-verified at API 2026-10 (stable 1 October 2026) against the Shopify pages in each section. API versions: 2026-10 is the latest stable version and 2027-01 the release candidate; 2025-10 is unsupported and accessible until 16 October 2026 at 15:00 UTC; the two 2026-10 removals (`priceRule` with the legacy `PriceRule` types, and `Customer.lastIncompleteCheckout`) shipped as listed, so their release-candidate labels are gone; deprecation notices now point to Dev Dashboard alerts, not the API health report; the release-notes links moved under /changelog/release-notes/. Unchanged from 2026-07: `DraftOrderInput`, the draft-order mutations, `DraftOrderStatus`, `PaymentTermsType`, the plan matrix, catalog and quantity rules, sales staff, migration, legacy customer accounts (still no sunset date), Flow and checkout Functions, the limitations list; `draftOrderCreate` still documents no `@idempotent` |
| 7 Oct 2026 | **Added.** API-versions rows for the `orderUpdate` tax recalculation on an address change, `FULFILLMENT_NOT_REQUIRED`, and Events as the successor to classic webhooks; `contextualPricing.auditTrail` (catalogs); the market hierarchy (`marketRelationships`, `Market.parentMarkets` / `childMarkets`) and the missing tie-break for a location in two B2B markets (markets); `paymentInstrumentSendAddEmail` (payment terms); the equal-price tie (quantity rules from the first-created catalog) and the rollout restriction on directly assigned catalogs; the "some permission levels might be limited on non-Plus plans" caveat (sales staff); a source for one company per customer (object model) |
| 7 Oct 2026 | **Corrected.** `DraftOrderLineItem.grams` was listed as removed; Shopify's references still list it as deprecated at 2026-07 and 2026-10, so the row now says both. The manual-capture rule now quotes Shopify's sentence instead of paraphrasing it, and payment reminders are sent through Flow. Connecting your own identity provider, and the profile and tag sync, are Plus only; 365-day sessions are on every plan. Vaulted-card charging by Flow can also trigger on invoicing. Migration reversal: removing a customer from an existing company offers to remove the migrated orders, rather than doing it automatically |
| 9 Oct 2026 | **Corrected.** The draft-order row said `draftOrderUpdate` "replaces the input wholesale"; Shopify's reference documents only that an update changes the draft in place and unlinks a checkout in progress, so the row now says that. |

Each row of this table is labelled **Added**, **Changed** or **Corrected** so a reader can tell a refresh from a mistake. Re-verification is scheduled for every Shopify Edition and every quarterly API release; the next is the 2027-01 release on 1 January 2027.

## Sources
Shopify pages, first read on 20 September 2026 and all re-read on 7 October 2026 at API 2026-10:

- [B2B features by plan](https://help.shopify.com/en/manual/b2b/getting-started/plan-features)
- [B2B for all - announcement, 2 April 2026](https://www.shopify.com/news/b2b-for-all)
- [Overview of B2B features](https://help.shopify.com/en/manual/b2b/getting-started/features)
- [Requirements and considerations for using B2B](https://help.shopify.com/en/manual/b2b/getting-started/considerations)
- [B2B catalogs](https://help.shopify.com/en/manual/b2b/catalogs) and [quantity rules and volume pricing](https://help.shopify.com/en/manual/b2b/catalogs/quantity-pricing)
- [B2B and Markets](https://help.shopify.com/en/manual/b2b/markets)
- [Sign-in and customer accounts in B2B](https://help.shopify.com/en/manual/b2b/customer-login-and-accounts)
- [Checkout and accounts](https://help.shopify.com/en/manual/b2b/checkout) and [payment terms](https://help.shopify.com/en/manual/b2b/checkout-and-orders/payment-terms)
- [Orders, data and admin access for B2B sales staff](https://help.shopify.com/en/manual/b2b/sales-staff)
- [Migrating customers to B2B](https://help.shopify.com/en/manual/b2b/getting-started/migrating-customers)
- [Build B2B apps](https://shopify.dev/docs/apps/build/b2b) and [draft orders for B2B](https://shopify.dev/docs/apps/build/b2b/draft-orders)
- [Customer accounts for apps](https://shopify.dev/docs/apps/build/customer-accounts)
- [API versioning](https://shopify.dev/docs/api/usage/versioning), [2026-07 release notes](https://shopify.dev/changelog/release-notes/2026-07), [2026-10 release notes](https://shopify.dev/changelog/release-notes/2026-10), [draft-order deposit fields changelog](https://shopify.dev/changelog/draft-order-deposit-fields-now-available-in-the-admin-and-customer-account-graphql-apis)
- [Shopify Editions Spring '26](https://www.shopify.com/editions/spring2026)

Shopify pages first read on 7 October 2026:

- [Adding customers to companies](https://help.shopify.com/en/manual/b2b/companies-and-customers/adding-customers)
- [Managing B2B with Markets](https://help.shopify.com/en/manual/b2b/markets/managing) and [catalogs with Markets](https://help.shopify.com/en/manual/markets-new/catalogs)
- [Identity provider requirements](https://help.shopify.com/en/manual/customers/customer-accounts/sign-in-options/identity-provider/requirements)
- 2026-10 Admin API reference: [ProductVariantContextualPricing](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/ProductVariantContextualPricing), [Market](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Market), [DraftOrderLineItem](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/DraftOrderLineItem), [PaymentTermsType](https://shopify.dev/docs/api/admin-graphql/2026-10/enums/PaymentTermsType)
- Changelog: [pricing audit trail](https://shopify.dev/changelog/posts/pricing-audit-trail-for-contextual-product-variant-prices), [market relationships](https://shopify.dev/changelog/posts/market-relationships), [`priceRule` removed from the draft-order discount warning](https://shopify.dev/changelog/posts/remove-pricerule-from-draft-order-discount-warning), [`orderUpdate` address changes recalculate tax](https://shopify.dev/changelog/posts/updating-an-orders-shipping-address-returns-accurate-financial-data), [Events generally available](https://shopify.dev/changelog/blog/next-generation-events-are-now-generally-available)
