Fictura
Web checkout

How web checkout works

The full journey — from a tap on your paywall to a premium user back in your app — and what Fictura does at each step.

Apple takes roughly 30% of every in-app subscription. A payment made on the web with Stripe costs roughly 3%. Web checkout routes eligible users — by default, US iPhone users — from your paywall to a web payment page, then straight back into your app. Everyone else sees the App Store sheet exactly as before.

Your app never decides any of this. It receives either a checkout URL or nothing on its regular config fetch, so eligibility rules, the checkout destination, and the off switch all live on the dashboard — and changes reach installed apps on their next launch, with no App Store release.

The journey

A user taps subscribe on your paywall.

The SDK checks the config it fetched at launch. If web checkout is on for this user, it opens the checkout URL. If not, your store purchase runs exactly as it always has.

The system browser opens — never a webview.

Card entry for digital goods inside a webview your app controls is the one version of link-out Apple still rejects. The SDK hands the URL to the operating system, your app loses control of the page, and that is precisely the property that makes it compliant.

Fictura's hand-off attaches who is buying.

The URL carries the user's identity. Fictura's hand-off endpoint (/c/<slug>) opens a Stripe Checkout Session on your Stripe account with that identity written into the session's metadata — and into the subscription's metadata, so renewals from month two onward stay attributable.

The user pays on Stripe's hosted page.

The money settles in your Stripe account. Your prices, your customer record, your payout, your refund button. Fictura is never in the money path.

Stripe sends them back — and Fictura sends them home.

The buyer lands on Fictura's return page for a moment, then bounces into your app through your deep link, flagged ?checkout=success. Within seconds the account is premium, without a restart.

Two modes

ModeWho builds the checkoutBest for
Hosted (default)Nobody. Fictura opens a Stripe Checkout Session on your account.Founders who don't have a web checkout — which is most.
LinkYou. Fictura redirects to a page you already run, appending the user id and return deep link.Founders with an existing web app whose checkout does things ours doesn't.

Eligibility is decided server-side

Targeting — country and platform — runs on Fictura's servers on every config fetch. The defaults are deliberate: iOS only (Android link-out saves ~4 points under Play billing, not ~27) and US only (where Apple's external-purchase-link rules are clear). Targeting fails closed: a device whose country can't be determined gets the App Store sheet. The safe side of that error is always Apple.

The off switch is real

Flip the tool off and every device returns to the App Store sheet within one config refresh. Devices still holding an old checkout URL hit a friendly page telling them to head back to the app; nobody is stranded mid-purchase.

What Fictura never does

  • Touch the money. Sessions are created with your key, on your account. No platform fee, no funds in transit.
  • Grant access from a browser redirect. Reaching the success page records web_checkout_returned — it proves a redirect happened, not that money moved. Entitlement comes from the billing webhook, and only from there.
  • Decide what "premium" unlocks. That stays in your app and your backend.

You become the merchant of record

Payments on the web are yours in the fullest sense: sales tax on them becomes your responsibility, not Apple's. Stripe Tax handles most of the mechanics. Turning web checkout off returns everyone to the App Store sheet within one config refresh.

On this page