B2B commerce

Sell to businesses on their terms, not just their prices

Companies with buyers in roles, orders on account against a credit limit, approval before a junior buyer spends the company’s money, quotes priced for one buyer, bulk and repeat orders, enquiries routed to the right dealer, and the tiered pricing underneath — in the engine and its MIT-licensed modules, enforced before an order exists rather than cleaned up after.

New in GoCommerce 1.2

Eight things suppliers asked for, in plain terms.

What each one does for you
NewWhat it does
A trade portalBuyers and dealers sign in at /portal on your store’s address. No storefront to build first.
Shipping per companyGive a customer group its own shipping rates. Its buyers see those instead of the public ones.
Tax-exempt companiesMark a customer group tax-exempt. Its orders carry no tax, and say which group made them exempt.
StatementsOne page per period: what was owed at the start, every order and payment, what is owed at the end. Download it as a spreadsheet.
How late it isUnpaid money split into not yet due, 1–30, 31–60, 61–90 and over 90 days late.
Terms historyEvery change to a credit limit, payment days or rules, with who changed it and when.
Spreadsheet ordersUpload a CSV of SKUs and quantities, up to 500 rows. Problem rows come back with their row number.
CataloguesLimit a company to some categories and products. Checkout, quick orders and quotes all keep to it.

Everything B2B in GoCommerce today

Grouped by what a business customer meets. Each item is in the code now.

Company accounts

  • Companies with a code, tax number, notes and a status: active, on hold, or closed.
  • Buyer roles: admin, approver and buyer, the company’s own business rather than the store’s.
  • Invitations mailed to an address; accepting confirms it and joins the company.
  • Self-service: a company’s admins add, re-role and remove their own buyers through the storefront API.
  • Catalogues: hold a company to some categories and products; checkout refuses the rest.

Pricing

  • Customer groups and price lists, with priority, a date window and a channel.
  • Quantity breaks: the highest break at or below the quantity ordered, per line.
  • Proven buyers only: a group price reaches a cart through a confirmed address, never a typed one.
  • Agreed line prices on quotes and phone orders, over every list.
  • Shipping rates per group, and tax-exempt groups.

Terms and credit

  • Pay on account: confirmed at once, payment due net days later.
  • Credit limits checked with the order’s final total before it exists.
  • On hold stops ordering on account; closed stops ordering at all.
  • Receivables: outstanding, available and overdue per company, and every unpaid order on account.
  • Statements for any period, with how late each amount is, as a page or a spreadsheet.
  • Terms history: who changed a credit limit or payment terms, and when.

Approvals

  • A threshold per company: a buyer’s order over it waits for an approver.
  • Approvers emailed, and the buyer told the decision.
  • Placed as submitted: at the prices the approver was shown, whatever the cart does next.
  • Reject with a reason, or withdraw your own request.

Quotes

  • Requests for quote on quantities, with a note.
  • Priced per line by the store, with a reply and an expiry, then sent.
  • Accepted into an order at the quoted prices — or into an approval.
  • One order per quote, even when two people accept at once.

Ordering

  • Bulk order: paste many SKUs or upload a spreadsheet; the lines that cannot go are listed by row, not fatal.
  • Repeat order: a past order back in the basket, at today’s prices.
  • Partial checkout: order the lines you choose and keep the rest in the basket.
  • Purchase order numbers on every order, required per company if you choose.

Dealer networks

  • Territories: a country, a state or a postcode prefix, each held by one dealer.
  • Lead routing: a consumer’s enquiry goes to the dealer whose territory fits best.
  • Dealers see their own leads and mark them contacted, won or lost.
  • The store sees every lead, catches the unrouted ones and reassigns.

Many stores

  • A store per dealer or brand from one install and one database.
  • Each in its own schema, with its own operators, admin panel and domain.
  • A platform API to create, suspend and delete stores, with its own credentials.
  • Custom domains, with certificates issued on demand by your proxy.

Systems

  • API keys with a role, for a procurement system that never logs in.
  • Idempotent checkout: a retried order is the same order, never a second.
  • Webhooks out, and numbered invoices.
  • Admin screens for companies, catalogues, statements, quotes, approvals and receivables.
  • A trade portal at /portal for buyers and dealers, on the store’s own address.

One buyer’s order, end to end

  • The cart is priced as the buyer — the company’s group prices — once the buyer is signed in with a confirmed address.
  • Checkout goes through the company: a company-priced basket sent to the public checkout is refused, so nobody routes around approval.
  • The company’s rules run inside the checkout, with the final total: status, PO number, approval threshold, credit limit.
  • Refused means nothing happened: no order, no stock reserved, no order number drawn.

POST /x/b2b/checkout → 201 order · 202 approval · 403 credit_limit_exceeded

A buyer checks out on account

Buyer

role: buyer · address confirmed

cart priced at the company’s group prices

Checkout guard

status · PO · threshold · credit, one company at a time

under the threshold and the limit

Order on account

confirmed · payment pending · due in 30 days

invoice settled

Marked paid

the credit is free again

Controls, not apologies

A limit that is checked after the order exists is a cancellation email. These run before.

Where the edge is

What a business buyer may expect that is not there yet.

Catalogues bind at checkout

A company held to a catalogue cannot buy outside it, but the public storefront still shows every product. Checkout, quick orders and quotes are where the catalogue is enforced.

One approval threshold

A company has one limit above which a buyer waits. Multi-level chains and per-buyer budgets are not modelled.

Your storefront, or the portal

Buyers can use /portal today. A storefront of your own talks to the same API; Svelte Commerce does not ship company, approval or quote screens yet. An invoice is issued when an order is paid, not when it ships.

FAQ

Questions about B2B

How does a business customer get its own prices?

A company points at a customer group, and its buyers’ addresses are in that group. A price list attached to the group holds rows of variant, minimum quantity and amount, so a buyer’s cart is priced from the list at the quantity they order — with priority, a date window and a channel when two lists could apply.

Can somebody get a dealer’s prices by typing the dealer’s email?

No. A group price reaches a cart only through an address something has proven: a signed-in account whose email is confirmed, an operator placing the order, or a storefront backend vouching for its own signed-in customer. The email typed onto a cart is a contact address and earns nothing. Buyers join a company by an invitation mailed to their address, and accepting it is the proof.

How do payment terms and credit limits work?

A company with an account pays on account: the order is confirmed with payment pending and a due date its net days out, and settling the invoice marks it paid. Its credit limit is checked inside the checkout, against the order’s final total, before the order exists — under a lock per company, so two buyers ordering at the same moment cannot both fit under a limit only one of them fits under.

How do approvals work?

A company sets an approval threshold. A buyer whose order is over it gets an approval request instead of an order, and the company’s approvers are emailed. An approver places it at the prices it was submitted at, or rejects it with a reason; the buyer can withdraw it. Admins and approvers order without approval.

How do quotes work?

A buyer asks for a quote on quantities. The store prices each line, adds a reply and an expiry, and sends it. The buyer accepts and the order is placed at exactly those prices — over the catalogue and over the company’s own price list — or it waits for approval when it is over the buyer’s limit. A quote becomes one order at most.

Can a business get a statement of its account?

Yes. Pick a period and you get what was owed at the start, every order and payment, what is owed at the end, and how late it is in 30-day steps. The store sees it in the admin, a company’s own admins through the API, and both can download it as a spreadsheet. A payment is dated when the store recorded it; if that record is gone, the line says so instead of guessing.

Can I limit what a company can buy?

Yes. A catalogue is a set of categories, each with everything under it, plus single products. Hold a company to one and checkout refuses anything outside it, however it got into the basket. Quick orders leave those lines out and say why, quotes cannot include them, and the buyer can list what they may buy at their own prices.

Can buyers order from a spreadsheet?

Yes. Upload a CSV with a SKU or variant id and a quantity on each row, up to 500 rows. What can go in goes in; anything that cannot is listed with its row number and the reason.

Can a buyer’s procurement system order without a person logging in?

Yes. An API key carries a role’s rights, a prefix that identifies it in a log line, its last-used time and a revocation. Checkout takes an Idempotency-Key, so a system that retries a timed-out request does not place the order twice.

Can consumer enquiries go to the nearest dealer?

Yes. A dealer is a company with territories — a country, a state or a postcode prefix — and an enquiry posted from the storefront goes to the dealer whose territory fits it most specifically, with its admins emailed. The public answer never names the dealer, so the form cannot be used to map the network, and the store sees and reassigns every lead, including the ones no territory covers.

Can each dealer have a store of its own?

Yes, from one install. Platform mode serves many stores from one process and one PostgreSQL database, each in a schema of its own with its own operators, admin panel and domain, created and suspended through a platform API whose credentials open no store.

Do buyers need a storefront built for them?

No. Since GoCommerce 1.2, buyers and dealers sign in at /portal on the store’s own address with their store account. They see their company’s terms and what it owes, order by SKU or from a spreadsheet, check out the lines they tick, repeat orders, approve, accept quotes and download statements. Each person sees only what their role and company allow.

Can a company have its own shipping and tax?

Yes, through its customer group. A shipping rate can name a group, and that group’s buyers are offered its rates instead of the public ones in that zone. A group can be tax-exempt: its orders carry no tax and record which group exempted them.

Is it free to use for B2B?

Yes, to run yourself. GoCommerce is MIT-licensed, and the B2B module is in the same repository as the engine, not an add-on. A store hosted on kitcommerce.store pays 1% of every successful order.

Create a company, set its terms, invite a buyer.

Run the stack with the b2b module, open Customers › Companies in the admin, and place an order on account from the API docs.

Chat on WhatsApp