Paywall  /  Products & pricing

Products & pricing

A product is the thing a buyer pays for — a lifetime licence, a subscription plan, an add-on. The Products tab is a three-pane editor: your product list on the left, the editor in the middle, and a live checkout preview on the right that updates as you type.

Create your first product

1

Click + Add

Give it a name and a short description (Markdown supported — it shows on the store card).
2

Pick the mode

One-time (pay once) or Subscription (recurring). This decides which pricing fields appear next — and it's the one choice you should get right up front.
3

Set the price

Choose a currency (USD, EUR, GBP, PLN, CAD, AUD) and the amount. Subscriptions can add an annual price (enables the monthly/annual toggle on the store) and a trial period in days.
4

Flip it to Active and publish

Inactive products are invisible to buyers. The Publish button in the top bar makes your changes live.
WhereDashboardApplicationsYour appPaywallProducts

Click + Add in the left list, fill the form, click Create product. The product opens in the middle editor with the live checkout preview on the right.

Order matters. Drag products to reorder — the list is your tier ladder (top = lowest tier). The SDK uses it to block accidental downgrades, and the same order decides where each card lands on your store page.

The free product — your free tier

Set a product's price to 0 and Onelo treats it as your free tier. It behaves differently from a paid product in three ways:

BehaviourWhat it means
No card neededBuyers claim it with one click — the button reads “Get started free” and there's no payment step.
It\'s the landing spotWith the “Enroll in free tier” outcome on (Customer portal), anyone whose subscription ends or who refunds their last purchase is moved here automatically — instead of being locked out.
Without one, there\'s no soft landingNo free product = a buyer who cancels or refunds ends up lapsed (paid features locked) until they buy again.

Turning the paywall on — “Plan required”

The master switch — the Access Gate — sits on the Store tab: “Plan required”. It is more than a sign-up gate: it is what enables the store at all, and it applies on sign-IN too — a returning customer whose plan lapsed meets the same gate. With it on, a second choice appears underneath: whether people may buy inside the app or only on your website.

StateWhat happens
ONThe store is live and the app is gated. On sign-in OR sign-up, any user with no active plan is routed to the store to buy first (they can pick a paid plan or claim a price-0 free product); users who already have an active plan go straight in. onelo.paywall.openStore() also works from your own buttons.
OFFNo gate — everyone who creates an account (or signs in) goes straight into the app. It's a free app with login: there's no store and nothing to buy. onelo.paywall.openStore() returns paywall_not_enabled and the hosted /buy page 404s until you turn this ON.
Turning it ON with no free product means paid-or-nothing — every new user must pay to enter. That's a valid model; just make sure it's the one you want. Add a price-0 product first if you want a freemium funnel.

Pricing options that sell

OptionWhat it doesWhere it shows
Annual priceSecond price for yearly billing (subscriptions)Monthly/annual toggle + “Save X%” pill on the store
Trial periodDays before the first charge (subscriptions). One trial per buyer per product — ever: a user (or email) who already redeemed a trial won't get another, even after cancelling.Checkout shows “then X/month after trial”
Access duration“Lifetime” or N days of access (one-time only)Access expires automatically; subscriptions follow their billing cycle
Scheduled saleDiscounted price with a start/end date (timezone-aware)Old price struck through on the store card; optional countdown timer shows at checkout
WhereDashboardApplicationsYour appPaywallProductsYour productPricing & DiscountsSchedule a discount

Turn the toggle on, enter the sale price and the active date range (timezone-aware), and optionally enable the countdown timer. The preview shows the struck-through old price right away.

The editor’s other sections

Each product expands into focused sections. You'll touch the first two often; the rest are set-and-forget:

SectionWhat you configure
OverviewStore-card content: badge text (“Popular”), button text, feature list (+ included / − excluded), footer note, accent color.
Pricing & DiscountsPrice, currency, billing interval, trials, scheduled discounts and promo codes.
Tax & CheckoutPer-product price mode — Gross (inclusive) vs Net (+ VAT) — the VAT rate (standard/reduced per your country), billing address / VAT-number collection, marketing consent. Tax fields are hidden entirely if you're VAT-exempt. The engine itself is chosen in Tax & Invoicing.
Refunds & LegalRefund window in days (or inherit the app default) and self-serve refund opt-in.

Gross vs Net — and what each buyer actually sees

In the Tax section of each product you choose how the price you typed should be understood:

ModeMeaningTypical for
Gross (inclusive)The price you typed is the final price. VAT is carved out inside it — every buyer pays the same number.Consumer apps (B2C) — clean, predictable prices like €9.99
Net (+ VAT)The price you typed is before tax. VAT gets added on top, based on where the buyer is.Business tools (B2B) — companies think in net prices
Inherit from appFollows your app-wide default (Gross unless you changed it).Most products — set it once, forget it
Your store adapts the displayed price to each visitor's country. EU and UK consumer law says shoppers must see the final price, tax included. So for Net products, Onelo detects where the visitor is browsing from and shows the price with their country's VAT already added — before they even reach checkout. A net price of €9.99 shows as €12.29 to a visitor in Poland (23% VAT), €11.89 in Germany (19%). Buyers outside the EU/UK can't purchase at all — Onelo sells only within your configured sales region (at widest: EU + UK), so checkout politely blocks them. No surprises at the payment step.
SituationWhat the store shows
Gross product, any visitorYour price, unchanged — same for everyone.
Net product, visitor in the EU/UKYour price + that country's VAT, already included.
Buyer outside the EU/UK (any product)Checkout is blocked — Onelo sells only within your configured sales region, at widest the EU + UK (“Sorry — this product is only available in the European Union and the United Kingdom.”). UK buyers additionally require YOUR UK VAT registration — without it they're blocked even on EU + UK reach. The store preview for such a visitor shows the price with your own country's VAT.
Your app sells to businesses onlyNet prices shown as-is — companies expect net.

The store uses the visitor's location for the preview; the final amount is confirmed at checkout from the billing country they enter. A business buyer who adds a valid VAT number sees the tax drop to 0% (reverse charge) right on the payment form.

Two rules to remember. (1) Net pricing isn't available if you're VAT-exempt — you don't charge VAT, so there's nothing to add; the editor will tell you to use Gross. (2) Don't mix Gross and Net across products — buyers comparing your plans would compare apples to oranges. The editor warns you if you try.

Discount codes

Each product can have its own discount codes. Buyers redeem them at checkout via a “Have a discount code?” link.

A code discounts the first payment only. On a subscription, the discount applies to the first invoice — renewals bill at the full base price. A code and a scheduled sale never stack: the buyer gets whichever single price is lower. (A scheduled sale works the other way around: a subscription bought at a sale price keeps that price on every renewal. If a code beats an active sale, the code wins the first invoice and renewals return to the full base price — not the sale price.)
WhereDashboardApplicationsYour appPaywallProductsYour productPricing & DiscountsDiscount codes

Click + Create code. Type a code or hit Random to generate one, pick Percent off or Fixed amount off, set the value — and optionally Max uses, an Expires at date, and One use per user (on by default).

SettingWhat it does
Percent / Fixed20% off, or a flat amount like €5.00 off.
Max usesTotal redemptions across all buyers. Empty = unlimited.
Expires atThe code stops working after this date. Empty = never.
One use per userEach signed-in buyer can redeem the code once (enforcement is keyed to the buyer's account).
Deactivate / DeletePause a code without losing its stats, or remove it entirely.

The codes table shows each code's usage (“12 / 100”), expiry and an Active/Inactive badge — so you always know what's still running.

Test it before you charge anyone

1

Use the live preview

The right pane is a real Stripe checkout for the selected product. Toggle Web / Mobile to check both layouts, or open it full-page with “Open in new tab ↗”.
2

Make a test purchase

With Stripe in test mode, pay with card 4242 4242 4242 4242 (any future date, any CVC). Then confirm access was granted and the receipt/invoice looks right.

Limits

LimitValue
Products per app (Free plan)3 — higher plans raise the cap
CurrenciesUSD · EUR · GBP · PLN · CAD · AUD
Refund window0–365 days per product, or inherit the app default

Next

Products & pricing — Paywall — Onelo Docs