Sell services from your storefront
Turn on a public, branded product page that takes payment through Stripe and creates the client, portal and onboarding automatically after a purchase.
The storefront is a public product page on your own domain. A buyer picks a plan, pays through Stripe Checkout on your connected account, and Zyan creates the client, the portal and the entitlement, applies an onboarding pack and emails the invite — without you touching anything.
Before you start: three switches, all required
The storefront only answers when all of these are true:
- The platform-level storefront switch is on for your workspace. This is not self-served — it is enabled for you.
- Self-serve storefront is on under SettingsStorefront.
- A Stripe account is connected.
With any one of them off, the storefront URL returns a plain 404. Every refusal looks identical from the outside, so check all three before debugging anything else.
Buyer picks a plan
On your public storefront page
Stripe Checkout
Your connected account, your money
Client and portal created
No step from you
Entitlement attached
What they bought, on that portal
Invite emailed
Onboarding pack applied, discovery waiting
Get your plans ready first
Products on the storefront come from your Billing Catalog. A plan only appears on the page when it is active, priced above zero and fully synced to Stripe.
A plan that drifts out of sync silently disappears
There is no error on the public page. The product stops being listed. If a buyer says a plan vanished, check its Stripe sync state first.
Turn the storefront on
Create your plans in the Billing Catalog
Let them finish syncing to Stripe before you go any further.
Open the storefront settings
Go to SettingsStorefront. Five cards: Storefront, Products, Onboarding, Terms & messaging and Embed cards.
Turn on Self-serve storefront
Buyers can now purchase and onboard themselves at your storefront link.
Copy the Storefront URL
It uses your verified custom domain, or your workspace subdomain if you have not set one up.
Switch on the products you want to sell
On the Products card, enable each plan, then tick Storefront and optionally Embed, set an Order, and pick a per-product onboarding Pack if it needs its own.
Set the default onboarding pack
On the Onboarding card. It is applied to every portal created by a storefront purchase.
Write your terms and success message
On the Terms & messaging card.
Settings reference
| Setting | What it changes | Default |
|---|---|---|
| Self-serve storefront | Buyers purchase and onboard themselves at your storefront link. | Off |
| Embed cards | Lets your product cards be embedded on your own website. | Off |
| Storefront URL | Read-only. Your verified custom domain, or your workspace subdomain. | — |
| Per-product switch | Whether a catalog plan is sold at all. | Off |
| Storefront / Embed | Which surfaces the product appears on. | — |
| Order | The product's position on the page. | — |
| Pack | A per-product onboarding pack that overrides the default. | Storefront default |
| Default onboarding pack | Applied to portals created by storefront purchases. | — |
| Terms URL | Linked at checkout. Leave it blank to show the terms text instead. | — |
| Terms text | Shown at checkout when no terms URL is set. | — |
| Success message | Shown to the buyer after a successful purchase. | — |
A live storefront with no products is an empty page
Turning the switch on does not list anything by itself. Switch on at least one product before you share the link.
Where the pages live
| Page | Address |
|---|---|
| Product grid | <your portal domain>/client-portal/store |
| A single product | <your portal domain>/client-portal/store/<plan slug> |
| After checkout | <your portal domain>/client-portal/store/success |
Link to the grid from your marketing site, your ads or an email. Link to a single product page when you are selling one thing.
What happens after a purchase
The buyer pays through Stripe Checkout on your connected account, and the rest of the chain above runs without you. They set a password and land in their portal with the discovery questionnaire waiting.
The new client then appears in DeliveryClients like any other, portal already attached. Their Overview tab carries the onboarding timeline, so you can see how far into the pack they got before you follow up.
Embed the cards on your own site
If you would rather keep buyers on your own website, turn on Embed cards, mark the products Embed, and copy a snippet from the Embed cards card. There are two:
- All product cards — renders every product marked Embed.
- A single product's card — the same snippet scoped with a
data-planattribute on the div.
Checkout happens inside the card. The buyer is returned to your hosted success page afterwards. A For developers block on the same card offers optional visual controls, and a How it behaves block explains the runtime behaviour.
The Billing tab is hidden on iOS
Storefront and billing surfaces do not render inside the iOS admin shell. Do this setup on the web.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| The storefront URL returns 404 | The storefront switch is off, no Stripe account is connected, or the platform switch is not on for your workspace | Check all three. Every refusal looks the same from outside |
| The page loads but is empty | No products are switched on | Enable at least one product under Products |
| A plan is missing from the page | It is inactive, priced at zero, or not fully synced to Stripe | Fix it in the Billing Catalog and let it re-sync |
| A buyer got no onboarding | No default onboarding pack is set | Set one on the Onboarding card |
| The embed snippet renders nothing | Embed cards is off, or the product is not marked Embed | Turn both on, then re-copy the snippet |
| Checkout shows no terms | Neither Terms URL nor Terms text is filled in | Set one of them |