Orders, customers and shipping
B2B terms in your store: credit limits, payment terms and tax exemptions that match the ERP
Credit limits, open balances, payment terms and resale certificates live in your ERP. An order on terms is placed in the store, where none of that is known. We build the integration that checks each order against the account before it ships, gives the buyer the terms on the invoice and keeps tax exemptions per state.
The order is placed where the limit is unknown
A B2B order on terms captures no payment at checkout. The store accepts it, and the money is due 30 days after the invoice. Whether the account can take another order is known only in the ERP: the credit limit, the open balance, the orders not yet billed, and whether an invoice is overdue. Shopify B2B has payment terms on a company location. It has no credit limit and no balance.
Take customer 10432, with a credit limit of 25,000.00 in NetSuite:
credit limit 25,000.00
open balance (balance) -23,880.00
unbilled orders (unbilledorders) -909.90
available 210.10
order #31907, PO-88213 216.10
over the limit by 6.00
At 40 accounts on terms, someone in accounts receivable checks each order by hand before it is released. At 500 accounts and 200 orders on terms a day, they do not, and the warehouse ships orders for accounts that are 60 days behind. The order itself, from the store to the ERP, is on orders, customers and shipping. This page covers the terms that travel with it.
How it works
Where the credit check sits
Three places can stop an order over the limit. Which ones apply depends on the store plan.
| Route | Plan | What the buyer sees | What the ERP gets |
|---|---|---|---|
| Checkout to draft, checked by the integration | all B2B plans | order submitted for review | a sales order once the draft is completed |
| Validation at checkout | Plus, custom app with a Shopify Function | checkout refused with a message | only orders within the limit |
| Accepted, held in the ERP | any | a normal confirmation | a sales order that waits for approval |
Checkout to draft is a setting on the company location, checkoutToDraft in its buyer experience configuration. The draft carries the PO number and the payment terms. The integration reads the account, completes drafts within the limit with draftOrderComplete and holds the rest with the reason. A draft over the limit is checked again when a payment is applied, so it goes through without anyone touching it once the account has room.
Whether unbilled orders count toward the limit is a setting in NetSuite: unbilledorders is part of the credit calculation only when the preference Customer Credit Limit Includes Orders is on. The integration uses the same rule as the ERP. Otherwise it approves an order the ERP would block, or the reverse.
Credit holds
| ERP | Field | Values |
|---|---|---|
| NetSuite | creditholdoverride (Hold) |
Auto follows the accounting preferences, On sets a hold, Off removes it |
| NetSuite | overduebalance, daysoverdue |
amount past due on open transactions, and how many days |
| Business Central | blocked on the customer |
blank, Ship, Invoice or All |
| Business Central | overdueAmount on customerFinancialDetail |
amount past due |
A hold in the ERP becomes a setting on the store: while it is on, the company location submits every order as a draft. A rule such as "more than 15 days overdue" holds an account before the limit is reached. Customer 10432 with an invoice of 4,120.00 that is 17 days past due on Net 30 is held on that rule, even with room under the limit.
Payment terms
Shopify has a fixed set of payment terms templates: net 7, 15, 30, 45, 60 and 90 days, due on fulfillment and due on receipt, plus a fixed date on draft orders. NetSuite stores a term with daysuntilnetdue, discountpercent and daysuntilexpiry, or as date driven with dayofmonthnetdue. Business Central stores dueDateCalculation as a formula such as 30D. Every ERP term needs a rule:
| ERP term | Store shows | Invoice in the ERP |
|---|---|---|
| Net 30 | Net 30, due November 4 for an invoice of October 5 | the same |
| 2% 10 Net 30 | Net 30 | 2% off until October 15: 216.10 becomes 211.78 |
| Net 20 | Net 15, the nearest template that is not later | due October 25 |
| Due on receipt | due on receipt | the same |
| Due on the 10th of next month | a fixed date, on draft orders only | dayofmonthnetdue 10 |
The ERP stays the source of the due date, because it writes the invoice. The store shows the buyer a date that is never later than the one on the invoice.
Tax exemptions
A reseller buys without sales tax in the states where it holds a resale certificate. Shopify sets this per company location in its tax settings: taxExempt for a full exemption, taxExemptions for specific ones, and taxRegistrationId. There is one reseller exemption value per state and for DC. The integration writes the states from the ERP, not a blanket flag:
{
"companyLocationId": "gid://shopify/CompanyLocation/880412",
"taxExempt": false,
"exemptionsToAssign": ["US_TX_RESELLER_EXEMPTION", "US_OK_RESELLER_EXEMPTION"],
"exemptionsToRemove": ["US_LA_RESELLER_EXEMPTION"],
"taxRegistrationId": "32051234567"
}
In NetSuite the customer is not taxable only when taxable is cleared and taxitem is empty; the resale number goes in resalenumber. In Business Central the customer has taxLiable, taxAreaId and taxRegistrationNumber. The certificate number and expiry date stay in the ERP. When a certificate expires, the next run removes that state's exemption.
What goes wrong quietly
| What happens | Example | Result |
|---|---|---|
| The check ignores unbilled orders | three orders of 150.00 on one morning, 210.10 available | each fits, together 239.90 over the limit |
| The store and the ERP count differently | integration counts unbilled orders, NetSuite preference is off | orders held in the store that the ERP would accept |
| A hold in the ERP never reaches the store | Business Central blocked set to Ship |
orders keep coming and wait in the ERP unshipped |
| A term with no template mapped later | Net 20 shown as Net 30 | the buyer pays 10 days after the invoice due date |
| A blanket exemption | taxExempt true for a Texas reseller |
untaxed orders shipped to states without a certificate |
| Taxable cleared, Tax Item still set | NetSuite customer with taxitem filled |
the ERP invoice carries tax the store order did not |
The last row costs a credit memo or a phone call per order. The run report lists every account where the store exemption and the ERP tax setting disagree.
What it covers
- A credit check on every order on terms. Limit, balance and unbilled orders from the ERP, by the same rule the ERP uses.
- Holds that reach the store. A hold or a block in the ERP switches the company location to drafts until it is lifted.
- Payment terms per account. Each ERP term mapped to a Shopify template that is never later than the invoice.
- Tax exemptions per state. Reseller exemptions from the certificates in the ERP, removed when a certificate expires.
- Buyers and roles. Contacts from the ERP as customers of the company, Ordering only or Location admin per location.
Prices per account are on customer-specific pricing and which items an account sees on customer catalogs. Both are part of pricing and customer terms.
Which systems
| System | Credit | Terms and tax |
|---|---|---|
| NetSuite | creditlimit, balance, unbilledorders, overduebalance, creditholdoverride |
terms record; taxable, taxitem, resalenumber |
| Business Central | creditLimit, balanceDue, blocked; overdueAmount |
paymentTermsId to paymentTerm with dueDateCalculation, discountPercent; taxLiable, taxAreaId |
| Shopify | none on the company | payment terms templates, checkoutToDraft, taxSettings per company location; deposits on Plus only |
| Adobe Commerce | company credit with credit_limit, balance, available_limit, exceed_limit |
at the company level |
| WooCommerce | none on the customer | order status on-hold for orders awaiting payment confirmation |
The Shopify fields are in the Admin API reference and the B2B plan features, the NetSuite fields in the Records Browser, the Business Central fields in its API v2.0 reference, all checked on October 3, 2026. Combinations: Shopify B2B and NetSuite, and the system pages for NetSuite and Business Central.
Where standard connectors stop
Standard connectors and iPaaS platforms move the customer and the order. The credit limit, the open balance and the hold status are not part of their field set, so an order on terms is accepted and imported whatever the state of the account. The check then happens by hand in accounts receivable, or after the goods have shipped.
In an integration built for your accounts, every order on terms is checked by the rule your ERP uses, a hold reaches the store on the next run, and the exemptions follow the certificates on file. Before the first live run, a dry run lists the accounts that would be held and why. Send us the terms and limits of five of your accounts.
Frequently asked questions
Can the store show a buyer their available credit?
Yes, as a value the integration writes to the company location, for example in a metafield the theme displays. Shopify has payment terms on a company location but no credit limit or balance field, so the number comes from the ERP: the limit minus the open balance minus unbilled orders, 210.10 for customer 10432 in the example on this page. It is refreshed after every order and every payment.
What happens to an order when the account is on credit hold?
It is not lost and it is not shipped. The integration switches the company location to submit orders as drafts while the hold is on, so new orders wait for review. In NetSuite a hold is the Hold field on the customer, set to On or applied by the rules when set to Auto; in Business Central it is the blocked value Ship, Invoice or All. When the hold is lifted, the location goes back to normal checkout.
Do payment terms like 2% 10 Net 30 work in the store?
The net part does. Shopify offers net 7, 15, 30, 45, 60 and 90 days, due on fulfillment and due on receipt; 2% 10 Net 30 shows as Net 30 in the store. The early payment discount stays on the ERP invoice, where NetSuite keeps it in discountpercent and daysuntilexpiry. Paid by October 15 on an invoice of 216.10 dated October 5, the buyer pays 211.78.
How are resale certificates handled?
Per state. Shopify has one reseller exemption value per state and for DC, 51 in all, such as US_TX_RESELLER_EXEMPTION, set on the company location. The integration assigns the states for which the ERP holds a valid certificate, instead of marking the whole location tax exempt. An order shipped to a state without a certificate is taxed.
Can different buyers at one company have different rights?
Yes. In Shopify B2B a customer belongs to one company and can be assigned to several of its locations, as Ordering only or as Location admin; a company can have up to 10,000 customers. The integration creates the buyers from the contacts in the ERP and sets the role per location. Rules such as an order value above which a manager approves are applied on the draft.
Tell us what you need
Tell us which systems you use and what needs to work better. We reply personally within one working day. We help you define the work, then agree the price and timing before you commit.
- You know the price and the timeline before you commit to anything
- We work out the connection that takes the work off your hands
- We handle the build, hosting, monitoring and maintenance
- Your team has less information to retype and fewer discrepancies to chase