Create a sales channel
Open Sales Channels in the Brainerce dashboard and create a storefront sales channel. You'll come away with a single Connection ID that wires your storefront to your catalog.
This page walks you through creating a storefront sales channel. By the end you'll have a vc_* Connection ID, the one string you'll paste into your storefront's .env on the connection step.
Quick steps
- Sidebar → Sales Channels.
- Click Create Channel.
- Fill in Channel Name (the only required field).
- Pick a Site Type. Full Store is recommended for a normal storefront.
- Create (or press Ctrl + Enter), then copy the Connection ID from the channel page.
The detailed walkthrough below covers what each field does, what the three site types actually unlock, and how the Test/Live modes secure the channel.
1. Open the Sales Channels page
In the dashboard sidebar, open Sales Channels. You'll see a list of every channel attached to your store. On a brand-new account the list is empty and a single Create Channel button sits in the middle of the page; once you have at least one channel, the button moves to the top-right; click it to open the Create Sales Channel modal.

Free plan note. The Free plan allows exactly one sales channel. If you hit the cap, the button reads Upgrade to add channel and opens an upgrade dialog instead. Upgrade to add more channels or contact support.
There is only one kind of channel: every channel you create is a storefront (the type that exposes a
vc_*Connection ID and connects via SDK). Google Shopping and the Meta catalogue are not separate channel types: you install an app under Apps and attach it to a sales channel, and it feeds that channel's products out. Selling through TikTok Shop is not available: the TikTok app, once it is released, is for the TikTok pixel and does not sync products or orders. Shopify and WooCommerce aren't channels either; they are one-time import sources inside the Migration Tool, see Import from another platform.
2. Name, describe, and (optionally) point at a domain
The top of the modal has three text fields:
| Field | Required? | What goes here |
|---|---|---|
| Channel Name | Yes | An internal name, just for you. "Main storefront", "Israel store", "Black Friday popup". |
| Description | No | A short note about what this channel is for. Visible in the channel list only. |
| Domain | No | The domain the storefront will live on (mystore.com). Leave blank if you don't have one yet. "You can add this later" is a real promise; the channel works fine without it. |
The Channel Name is the only thing you have to fill in before you can save.
3. Pick a Site Type
This is the most important choice on the page. The Site Type controls which API permissions the channel carries, meaning what the storefront connected to this channel is allowed to do.
There are three options:
Catalog Only
Browse products and view inventory. No cart or checkout.
A read-only window into your catalog. The connected site can list products, show details, see stock levels and categories, but cannot add to cart, take an order, or sign customers in. Pick this when:
- You're building a content site (blog, lookbook, marketing landing) that should link out to a separate checkout flow.
- You're running a price-comparison feed or partner catalog where someone else handles the transaction.
- You want a menu / product showcase (restaurant, gallery, B2B catalog) without commerce on the same surface.
Full Store (Recommended)
Complete store with cart, checkout, and order creation.
The normal storefront permission set: everything from Catalog Only, plus cart, checkout sessions, customer login/registration, and order creation. Pick this for any real storefront: an AI-built storefront made in Lovable, Cursor, Claude Code, etc. It's the option the scaffolder and templates both assume.
Custom
Choose specific permissions manually.
Selecting Custom expands a panel of individual permission toggles. Use this when you need a setup the two presets don't cover, for example a cart-enabled site that doesn't create orders (because orders are placed via a separate POS), or a guest-only storefront with no customer accounts.
The toggles you'll see:
| Permission | What it controls |
|---|---|
| Products | Read products, variants, and images. Almost always on. |
| Inventory | Read stock levels per variant. Required to show "In stock / Out of stock" badges. |
| Categories | Read categories and collections. Required for category nav and landing pages. |
| Cart | Create and manage shopping carts. Required for any add-to-cart UI. |
| Checkout | Create checkout sessions. Required to send customers to the hosted checkout. |
| Customer Auth | Login, register, and manage customer accounts. Required for member areas and saved orders. |
| Orders | Create orders directly (requires extra permission). For custom flows that bypass checkout: POS, B2B order entry, etc. |
Default toggle states under Custom mirror Catalog Only (Products, Inventory, Categories on; the rest off). Flip the ones you need.
You can change permissions later. The new channel's settings page has a Permissions tab where every toggle from Custom is available again. Bumping a channel from Catalog Only to Full Store later is fine; the
vc_*ID stays the same, so the storefront doesn't need to be rewired.
Other switches on the Permissions tab
Beyond the presets, the Permissions tab holds a few switches that are not part of the Site Type choice and are off unless you turn them on:
| Switch | What it does |
|---|---|
| Create Orders | Lets the channel create real orders directly. It is the only permission on the page that changes stock and money; the rest are reads. |
| Sandbox Payments | Allows test orders without a real payment. Test orders do not count in your analytics. On a live channel it is better to use a separate test channel. |
| Track Guest Checkouts | Creates checkout sessions on the server so guest carts show up as abandoned checkouts. |
| Require Email Verification | Customers must verify their email to finish registering. |
| Require Birthday | New customers must give a birthday to finish signing up on this channel. Nobody who already registered is asked, and a storefront connected with a store id instead of a channel is not affected. |
4. Save and copy the Connection ID
Hit Create at the bottom-right of the modal, or press Ctrl + Enter from anywhere in the form.
A Channel Created! window opens with your Connection ID and a Copy button, then asks What would you like to do next? with three options: Build with AI (use Claude, Cursor or Lovable to build your store), Use CLI (a single command, copied for you) and Code Yourself (use the SDK directly). Go to Channel Settings opens the channel's settings. Nothing is lost if you close it: the Connection ID stays on the channel's General tab.
The new channel's settings open on the General tab, and you can reopen them anytime by clicking the channel's card on the Sales Channels page. There are five tabs, in two groups.
Under Channel: General (name, description, the channel logo, test/live mode, domains, links, and a read-only line showing how many products are published to this channel and which marketing apps are connected to it), Permissions, Inventory (how stock is reserved for this channel and what shoppers are told about stock) and Upsell & Cross-sell (four switches for storefront merchandising; see Upsell & Cross-sell tab below).
The footer of the settings window counts your edits ("2 unsaved changes", or "No changes") beside Save Changes. Nothing on any tab is saved until you press Save Changes, and switching back a switch you just flipped is not counted as a change.
The General tab is split into Identity (Channel Name, Description, Logo), Addresses (Channel Mode and Domains) and Links. Channel Name is shown in the channel list and in reports, never to shoppers. The Links group holds the templates below, and a line at the end says what is not here: measurement tags, Google site verification, product feeds and product sync all live in the app (Apps → Google). A Meta pixel has no place to be entered yet, because the Meta app is not available yet.
| Links field | What it takes |
|---|---|
| Product URL Template | Up to 512 characters. Tokens {slug}, {id}, {handle}, {domain}. Used to build product links for feeds (Google Merchant and others). A Preview shows the result. |
| Customer order page | Up to 512 characters. A path on your storefront for the button in order emails. Tokens {orderNumber}, {orderId}, {customerId}, {checkoutId}; {checkoutId} also works for guests. |
| Contact page, Privacy policy page, Terms of service page | Up to 512 characters each. Paths on your storefront used for the support button and the email footer. |
Email Link Templates read "Using defaults" while empty. If you leave them empty, the buttons that need them are hidden from the emails, rather than pointing somewhere wrong.
There is no Sync tab in channel settings. Syncing products out to a platform is done on that app's own page, not here. See Where to sync products to Google below.
Under Handle with care: Danger Zone, on its own. It sits under a separate heading, at the bottom, because everything in it is destructive. That separation is the only warning you get before you open it. It holds Delete Channel, which asks you to confirm ("This will permanently delete ... This action cannot be undone") and tells you how many requests the channel has served ("Deleting it immediately breaks every site using the connection ID"). Pausing a channel is not here: use the Enabled / Disabled switch on the channel's card on the Sales Channels page. A disabled channel stops answering, so every site using its Connection ID stops working until you switch it back on.
The channel card
Each channel is a card on the Sales Channels page showing its logo (or a square you click to add one), its name, a Test or Live badge, its primary domain (or "No domain connected"), a status ("Waiting for first request" until the first call arrives), N requests and Last active, the SDK version it uses (with "v... available" when a newer one exists), the Enabled / Disabled switch, and buttons Settings, Build with AI, Copy Connection ID and Delete. Clicking the card opens its settings. Delete opens the channel's settings window; the deletion itself is confirmed there, under Danger Zone.
Permissions tab

- Access level shows Catalog Only, Full Store or Custom and lets you jump to the first two. Custom is only selectable once your individual switches no longer match either preset.
- Read ("What this channel may fetch"): Products, Inventory, Categories. Anything switched off returns an error (403) to this channel, even when the product exists in the store.
- Shopper actions: Cart, Checkout, Customer Auth.
- Write ("Affects real data"): Create Orders, with a warning that it lets the channel create real orders that affect your inventory and finances.
- Testing: Sandbox Payments.
- Checkout and sign-up rules: Track Guest Checkouts, Require Email Verification, Require Birthday.
Inventory tab

- Reservation Strategy: Reserve on Payment (stock is held only once payment completes), Reserve on Checkout (when the customer starts checkout) or Reserve on Add to Cart (immediately). Reserving on add-to-cart protects the shopper but freezes stock for abandoned carts; reserving on payment sells more, at the cost of a rare sold-out at the last step.
- Reservation Timeout (minutes): 1 to 60. Shown for the checkout and add-to-cart strategies only.
- What the shopper sees: Show Countdown Timer (with an optional Custom Countdown Message, for example "Items reserved for {time}"; the timer appears only if your storefront reads the field), Low Stock Warning with a Low Stock Threshold from 1 to 100, and Back-in-Stock Alerts with People per unit from 0 to 50. People per unit is how many waiting shoppers are emailed for each unit that comes back, oldest request first (restock 3 units at 3 per unit and 9 people are told). 0 emails the whole waitlist at once, which sends most of the list to a page that says sold out again unless the race is the point.
Upsell and Cross-sell tab

Four switches, each tagged with where it shows: Frequently Bought Together (product page), Bundle Offers (cart), Cart Upgrade Banner (cart) and Checkout Order Bump (checkout). Turning all the cart ones on pushes the checkout button below the fold on mobile. Frequently Bought Together controls the automatic "Frequently bought together" group on the product page: with it off, Brainerce sends that channel none, and a shop built from the Brainerce starter also hides the block that shows your hand-picked Cross-Sells. There is no switch for the automatic "Products you may like" group. The bundle and bump offers themselves are created on their own pages.
Below the switches, the Automatic recommendations card shows how the automatic suggestions are doing: a Calculation block for your whole store (status, paid orders counted against the number needed, Compute now) and a Performance block for this channel (impressions, clicks, added to cart, purchases and attributed revenue over the last 7, 30 or 90 days). How it works, how to hide one suggestion and what the numbers mean: Related products. The free-shipping progress bar is not here: its threshold and switch are on the Shipping Zones page, next to the rates they have to match.
Add a logo to a sales channel
On the General tab, under Identity, the Logo field holds a picture for this channel. Click Add a logo, pick an image from your media library (or upload a new one), and press Save. Square images work best. Replace swaps the picture and Remove takes it off again.
What the channel logo does:
- It shows on the channel's card on the Sales Channels page, next to its name.
- It is handed to the storefront connected to this channel, so a storefront built on Brainerce can show it as its brand picture. A storefront that was not built to read it will not show it, and a change can take up to a minute to reach the storefront.
What the channel logo does not do:
- It does not appear in emails, invoices or receipts. Those keep using the store logo from Settings > Branding.
- It is not your storefront's favicon or browser tab icon, and it does not change the storefront's design by itself.
- The storefront bot keeps its own avatar, set in the bot settings.
- A channel with no logo falls back to the store logo from Settings > Branding wherever a storefront shows one.
If you delete the picture from your media library, the logo is removed from the channel as well.
On a computer the tabs run down the left. On a phone they become a row of pills across the top of the settings window that you swipe sideways: same five tabs, same order, no group headings.
On General, at the top you'll see:
- Connection ID starts with
vc_(e.g.vc_Fpi183aYc3WAqQnphxzWM). This is the one string the storefront needs. It identifies the channel and carries the permissions you picked above.
A Copy button next to the ID copies it to the clipboard. The ID stays visible on the page, so there's no "shown once" pressure here. You can come back to Sales Channels → your channel → General anytime to copy it again.
The header of the channel settings also shows the channel's Test or Live mode, a status, Total Requests and Last Active. A channel that is connected but that nothing has called yet reads "Waiting for first request", not a green "Connected": it turns to Connected once your storefront has made its first call. If it stays on "Waiting for first request" after you pasted the Connection ID, the storefront is not reaching Brainerce yet (see Connect with the CLI scaffolder).
What is left before you go live
While a channel is not ready, the header shows a count such as "3 of 5 ready", and the Channel Mode row on General lists To go live. The five items are:
- Connect your storefront: the channel is connected.
- Connect a payment provider: at least one provider is installed for the store. (This line is left out while Brainerce is still loading your providers.)
- Turn on Create Orders: the switch on the Permissions tab.
- Add a domain: at least one address in the Domains box.
- First request received: your storefront has called the channel at least once.
The list is a guide, not a lock: the only thing that stops you flipping Channel Mode to Live is a missing or invalid domain, not the other items. It moves as you type a domain or flip Create Orders, and disappears once every item is done.
Skip the copy-paste and use Build with AI. Click Build with AI, the violet button at the bottom of the tab list, below Danger Zone, to open the Build with AI window, with everything pre-baked for the next step. Two tabs, New store and Existing project, give you a one-line instruction with your Connection ID already in it, to paste into an AI coding agent. Under Other ways to connect there is a
npx create-brainerce-store@latest --connection-id vc_…command for a terminal (No agent, just the terminal) and the address of the admin MCP server (Admin MCP, manage this store, sign-in required). The connection docs (CLI, Lovable) walk through each route.

5. Test mode vs Live mode (and the domain)
New channels start in Test mode. The channel's General tab has a Channel Mode toggle with two options:
| Mode | Domain field | Who can call the channel? |
|---|---|---|
| Test | Optional. Leave it empty and localhost, previews, any URL are all accepted. | Any host can use the Connection ID while Domain is empty. Fill Domain in and a Test channel starts checking addresses like a Live one. Right for development, previews, AI builders. |
| Live | Required, and must be a public HTTPS domain. | Only the primary domain, its subdomains, and the extra addresses listed in the Domains box. Right for production. |
This is how Brainerce secures a published channel: in Live mode, the Connection ID alone isn't enough; the request also has to come from the registered domain. So even if the ID is visible in client code (which it is, by design), no one can stand up a clone on a different host and use your channel.
The workflow most teams follow:
- Create the channel, which stays in Test mode by default.
- Build, design, and preview the storefront on
localhostor the AI builder's preview URL (Lovable preview, Bolt sandbox, etc.). All of these work in Test mode without a domain, with one exception: "Sign in with Google" from a preview URL needs the preview address recorded on the channel, see Sign in with Google fails on a Test channel with no domain below. - Once you're ready to publish to the real world, register your production HTTPS domain on the channel and flip Channel Mode to Live. From that moment, only that domain, its subdomains, and any extra addresses you add in the Domains box (below) can use the channel.
Heads-up before flipping to Live. Make sure the production domain matches exactly (no trailing slash, no typos in subdomain). A mismatch will block every request from the storefront until corrected.
A Domain on a Test channel is a real lock, not a label. The "any host works" freedom described above belongs to a Test channel with an empty Domain box. The moment you record one, requests are checked the same way Live checks them, and the check counts the port: a Domain of
localhost:3000refuses a shop served onlocalhost:5173, and refuses a barelocalhostwith no port. That is also whynpx create-brainerce-storecan reportOrigin not allowed for TEST channelagainst a channel you know exists. Either clear the Domain box while you develop, or record the exact address your dev server prints.
Sign in with Google fails on a Test channel with no domain (redirectUrl is not allowed)
An empty Domain box on a Test channel opens the catalog, cart and checkout to any address. It does not open social sign-in. "Sign in with Google", "Sign in with Facebook" and "Sign in with GitHub" hand a customer's login token back to your storefront, and Brainerce only sends that token to an address you have recorded on the channel. A preview URL you never recorded is, to Brainerce, an unknown website.
What you see when this is the case:
- The storefront hides the Google button on its login and register pages. Nothing is broken in the storefront; the button will appear by itself once the address is recorded. Password sign-in works throughout.
- On an older storefront, or one that renders the button anyway, clicking it shows an error starting with "redirectUrl is not allowed for this sales channel". That message is written for you, not for your shoppers; the storefront should not be showing it to them.
- The Domains box in Sales Channels → your channel → General shows a warning while a sign-in provider is on and the box is empty.
The fix takes one paste. Open the channel, put the address your storefront runs on into the Domains box and save:
- On Test, the address can be anything you're actually building on:
https://preview--abc.lovable.app,http://localhost:3000, a Bolt sandbox. The first chip becomes the primary; if you'd rather keep the primary empty, add the preview as a second chip instead, since on a Test channel the extra chips cover sign-in too. localhostand127.0.0.1never need this. Any port on your own machine can complete a Google sign-in on a Test channel with nothing recorded.- A Lovable preview URL changes when you remix or publish the project. If the Google button disappears after that, the new address needs recording too.
On a Live channel the extra chips do not cover sign-in. Sign-in returns only through the primary domain. Test it from a preview address on a Test channel.
Two things this does not do: recording an address for sign-in is not the same as registering Brainerce's callback URL with Google, which only applies when you use your own Google credentials; and it does not put your store's name on Google's consent screen.
Keep building after you go Live (the Domains box)
Going Live used to mean you could no longer work from a preview URL or your own machine against that channel: the only options were swapping the production domain or flipping back to Test mode, and both take the shop down for everyone else.
You don't have to choose any more. Open Sales Channels → your channel → General and find the box labelled Domains. It is one field holding a list of addresses:
- Type an address and press Enter (or click Add) and it becomes a chip in the box.
- The first chip wears a ★ Primary badge. That is your channel's main domain: it builds your product links, and it also covers its own subdomains: register
shop.comandwww.shop.comandcheckout.shop.comwork too. - Every chip after the first is an extra address allowed to use this channel. Add the one you're building from: your Lovable or Bolt preview URL,
http://localhost:3000, a staging site. Up to five extras, on top of the primary. - Remove any chip with the × on it. Removing the primary chip clears the channel's domain, which a Live channel needs, so put a new one in before you save.
Paste the whole URL if that's what you copied. https://Preview--abc.lovable.app/products/shoes?ref=1 is trimmed down to https://preview--abc.lovable.app before it's saved, and the box shows you exactly what it's about to store before you press Add.
The extra addresses must match exactly. Unlike the primary chip, an extra address does not cover its subdomains, http is not the same as https, and the port counts, so http://localhost:5173 will not let http://localhost:3000 through. Add each address you actually use. Wildcards like https://*.lovable.app are not accepted.
If one of your saved chips turns red, it no longer passes the current rules and it will block every save on this channel, including unrelated settings, until you remove it. The message under the box names which one.
What the extra addresses do not do: social sign-in. They let an address read your catalog, use the cart and checkout, load the payment window and send analytics. On a Live channel they do not turn on "Sign in with Google / Facebook / GitHub". That always returns through your registered domain, and nothing else. This is on purpose: sign-in hands back a customer's login token, and that only ever goes to the domain you verified. If you need to test social sign-in from a preview address, do it on a Test channel, where the extra addresses cover it too.
6. Choose which products this channel sells
By default, products you create are not published to a new channel; you opt in product by product. Two ways:
- One product at a time. Open the product, scroll to Sales channels, toggle the new channel on.
- Bulk. From the products list, select multiple products → Bulk actions → Publish to channel → pick the new channel.
Until at least one product is published, the storefront loads with an empty catalogue and there is nothing anyone can put in a basket. Publishing is what puts a product on sale on a shop, so an unpublished product cannot be bought there even by direct link.
Where to sync products to Google
Channel settings has no Sync tab and no "Sync now" button. If you are looking for one, it is on the app's own page, not here.
Go to Apps, open Google, pick the sales channel at the top, and use Sync now there.
Google is the only app you can sync products to today. The Meta and TikTok apps are built but have not been released, so they are not in your app store and there is no Meta or TikTok page to press Sync now on. If you came here to push your catalogue to a Facebook shop or TikTok Shop, that is not available yet. Shopify and WooCommerce are not sync targets either, in any direction: they exist only inside the Migration Tool as one-time read-only imports, so nothing you change in Brainerce is ever pushed back to them. See Import from another platform. That button pushes to that one app, shows a spinner while the run is in progress, and tells you afterwards how many products landed and what the platform said about any that did not. Use it when a channel looks out of date and you want to force it to catch up rather than wait.
Two things a manual sync will not do for you:
- A channel in test mode is never pushed anywhere. Google rejects test domains, so a sync from a test channel is skipped rather than attempted. Switch the channel to Live on the General tab first.
- A product that is not published to the channel is not synced by it. Publishing is a per-product setting in the product form (Sales channels), and syncing only re-sends what is already published.
The General tab of channel settings shows you where a channel stands without leaving it: how many products are published to the channel, which apps are connected to it, and when each of them last synced. It is a read-out only. Every button that changes something lives in the app.
What's next?
You now have a vc_* Connection ID. Pick your connection path:
- You have a terminal (Cursor, Claude Code, Copilot, Codex CLI, Bolt, Replit) → Connect with the CLI scaffolder.
- You're using Lovable → Connect from Lovable.
What are sales channels
A sales channel is a single point-of-sale wired to your Brainerce catalog. One Brainerce store can power many storefronts across multiple brands, locales, and domains from one dashboard.
Starter template for an SDK storefront (the CLI scaffolder)
Open Build with AI on your sales channel, copy the npx one-liner, and paste it into Cursor, Claude Code, Copilot, Codex CLI, Bolt, or Replit. A Next.js storefront pre-wired to your channel is ready in under a minute.