Features Pricing Services
Compare
Resources
Contact Start Free Trial
Home/Docs/Customer Portal

Customer (Buyer) Portal

The customer app is a white-label, mobile-first self-service app for your B2B customers. They sign in with their email, see only their company's catalog and price list, place orders without an agent in the loop, and check shipment status. Optional — disabled by default.

i

Beta status. The customer app is feature-complete and production-stable, but we keep "beta" on it because we're still iterating on white-label theming and aggregate analytics. Use it freely — your data is safe, your buyers won't see anyone else's prices.

Activation

  1. Open Settings → Buyer app.
  2. Toggle buyerPortalEnabled on.
  3. Save. The customer app is now reachable at /buyer/<your-shop-handle>.

White-label customization

From Settings → Buyer app:

For deeper customization (custom CSS, login page hero copy), the Custom Branding add-on is available on Growth and Pro for +€29/mo.

Buyer signin flow

  1. Buyer visits the portal URL (or follows a link from a quote / invoice email).
  2. They enter their email.
  3. An OTP code is sent via Resend. Magic-link version also supported.
  4. They enter the code → JWT cookie set, valid 90 days.
  5. Alternatively: "Sign in with Google" if you've configured Google OAuth.

The buyer's email must already exist as a contact on a Shopify B2B Company. If not, signin fails with "no matching company". This prevents drive-by signups.

i

Rate-limited. The OTP request endpoint is dehindrate-limited (5 per identity, 30 per IP, 5-minute window) to prevent abuse. Excess returns HTTP 429.

Catalog scoping

The buyer's view is automatically scoped to their company:

Server-side enforcement: every buyer API verifies that the requested location belongs to the session's companyId. Cross-company access returns HTTP 403. No client-side scoping — it's all enforced on the API.

Cart & ordering

  1. Buyer browses catalog, taps + on items to add to cart.
  2. Cart screen shows lines, subtotal, ship-to picker.
  3. Slide-to-confirm gesture submits the order.
  4. A draft order is created in Shopify, tagged with soryk_buyer:<email> (sanitized).
  5. Shopify proceeds with the standard B2B checkout / invoicing.

Reorder from history

From the Orders tab, every past order has a Reorder button. Tap it to copy all line items into a fresh cart — quantities included. Out-of-stock items are flagged but not blocked (matches the agent-side behaviour).

Shipment tracking

The Shipments tab lists fulfillment events for the company's recent orders, with carrier tracking links straight to UPS / DHL / GLS / etc. — pulled from Shopify's native fulfillment objects.

Buyer analytics

A simple consumption dashboard: spend per period, order count trend, top products. Useful for buyers who want to forecast or report internally. Scoped strictly to the buyer's own company.

Limitations vs agent mode

CapabilityAgent modeBuyer portal
Place orders for a companyYes (any assigned)Yes (own company only)
Apply discountYes (within cap)No
Save quotesYesNo (current beta)
See other companies' dataIf assignedNever — strict scoping
Custom payment termsPick from approved listDefaults to company's term
Visit formsYesN/A
Push notificationsYes (push notifications)Not yet

When to enable the customer app

When to leave it off

Was this helpful?
Edit this page on GitHub