nohold / docs
Get started

Install & connect

Install the nohold Shopify app and connect your Brightpearl account.

Installation has two phases: install on Shopify (OAuth), then connect your Brightpearl account.

Before you start

You'll need:

  • Shopify Admin access on the store you want to install on (Apps permission).
  • Brightpearl access with permission to install private apps (Settings → Apps → Private apps).

1. Install the Shopify app

  1. Open the nohold listing on the Shopify App Store and click Install.

  2. Shopify shows the OAuth consent screen. nohold requests these scopes:

    • read_orders for receiving every new order via the orders/create webhook so the classifier can decide whether the cart is mixed.
    • read_products for product tags and metafields used by the classifier, and variant inventory levels for the fallback rule.
    • read_inventory for the inventory-level webhook that tells nohold when your pre-order stock has arrived. This is what auto-release runs on.
    • read_locations for the location each fulfillment is assigned to, which drives the Scale multi-location release filter.
    • read_assigned_fulfillment_orders and write_assigned_fulfillment_orders for orders Shopify assigns to one of your locations.
    • read_merchant_managed_fulfillment_orders and write_merchant_managed_fulfillment_orders for orders you manage yourself. The split, the hold, and the auto-release all happen through these.

    nohold does NOT request write_orders or any payment-related scope. Order content arrives via webhook; nohold never writes back to the original Shopify order. Customer data is the subset Shopify already includes in the order payload.

  3. Click Install app. You'll be redirected straight into the nohold dashboard on the Free plan. There is no charge-approval screen and no card on file — you subscribe later, if and when you want to.

If you installed before September 2026, Shopify will ask you to approve two new permissions (read_inventory and read_locations) the next time you open nohold. Until you do, held pre-orders will not release automatically when stock arrives — nohold cannot see your inventory levels without them.

1b. Look at your own orders first

Before connecting anything, the dashboard runs a mixed-cart audit: it reads your last 60 days of Shopify orders, applies your pre-order detection rules, and tells you how many of them were mixed carts and how much in-stock value was sitting behind a pre-order.

It needs no Brightpearl connection and changes nothing. If the number is small, nohold is not the tool for you and you have found that out in thirty seconds.

What about multi-location release filtering?

nohold captures the Shopify location each held fulfillment was assigned to and stores it on the hold. When stock arrives at a different location, the auto-release doesn't fire, keeping inventory at the right warehouse from spilling into another warehouse's release.

Full per-tag routing rules (for example, campaign:fall24 → London warehouse) are on the roadmap. The feature stays on Scale.

2. Connect Brightpearl

From the dashboard, go to Settings → Brightpearl Connection and click Connect Brightpearl.

There are two ways in.

Enter your account code — the slug in your Brightpearl URL, so abc123 for https://abc123.brightpearl.com — and click Connect with Brightpearl. You'll approve nohold in Brightpearl and land back on Settings. Nothing to copy or paste.

The nohold Brightpearl app is still in Brightpearl's Development lifecycle, which means Brightpearl only lets accounts we have explicitly enabled complete this flow. If you see an authorisation error, use the private-app method below and email support with your account code — enabling an account takes us minutes, and it is a Brightpearl-side setting, not something wrong with your store.

Connect manually with a private app

Under Connect manually with a private app (advanced) you'll be asked for four values from your Brightpearl admin:

FieldWhere to find it
Account codeBrightpearl URL — the slug after https://. For https://abc123.brightpearl.com it's abc123.
API domainYour datacenter's API gateway, e.g. ws-use.brightpearl.com (US) or ws-eu1.brightpearl.com (EU). Note the US host has no trailing digit.
App referenceThe reference you chose when creating the private app in Brightpearl (App Store → Private Apps → Add Private App → System App).
Account tokenGenerated with the private app. Copy it once; Brightpearl won't show it again.

Whichever route you take, nohold will:

  1. Verify the credentials by hitting /account-info on the Brightpearl API.
  2. Discover your default Sales Order status IDs (you can override these later in Settings).
  3. Mark the connection as healthy on the dashboard.

If verification fails, see Troubleshooting → Brightpearl connection.

3. Configure pre-order detection

By default, nohold treats any line item whose product carries the Shopify tag pre-order as a pre-order.

If you tag pre-order products differently (e.g. backorder, arriving-jan, etc.), or use a metafield instead of tags, jump to Settings → Pre-order detection and update the values.

You can change this any time. The change applies to new orders only — orders already split won't be re-evaluated.

4. Watch it work before it writes anything

New accounts start in test mode. nohold classifies every mixed cart, builds both Brightpearl sales orders, and records them as previews — without writing to Brightpearl and without holding anything in Shopify.

Open any preview split and you'll see the exact sales order nohold would have created: rows, tax, shipping, delivery address, status IDs. This is the point to check that the split matches what you'd have done by hand.

When you're satisfied, click Go live on the dashboard. From then on nohold creates real sales orders and holds the pre-order half of each mixed cart. Existing previews stay as they are.

Nothing expires and nothing pushes you: a store can sit in test mode indefinitely.

4. You're ready

That's it. Place a test order with a mixed cart and head to First split to confirm everything is working end-to-end.

On this page