Quickstart

Live in 15 minutes

Add the SDK, configure your key, make one checkout call — your existing App Store Connect and Play Console products sync automatically. The SDK ships for iOS, Android, and Flutter.

Time to live
15 min

Install, set your publishable key, make one checkout call.

Integration surface
1 call

A single SDK call routes direct web checkout or store billing for you.

Platforms
3 SDKs

iOS, Android, and Flutter — your store products sync automatically.

The steps

Four steps from install to live

No payment backend, no entitlement server, no catalog re-entry. The platform handles the parts you'd otherwise build.

Step 1

Add the SDK

One line in your package manager — Swift Package Manager, Gradle, or pub. No native build steps to wire up.

Step 2

Configure your key

Drop in your publishable key from the dashboard. That's the whole setup — the SDK fetches your catalog at runtime.

Step 3

Call the checkout method

One method on the buy button. The SDK routes each purchase automatically — direct web checkout where it's allowed, StoreKit or Play Billing as a compliant fallback. Same call on every platform, no branching in your code.

Step 4

Sync your store catalog

Your App Store Connect and Play Console products import automatically — no re-entering prices, IDs, or subscription groups.

The code

Configure, then checkout

Configure with your publishable key, then call checkout on the buy button. Same shape on iOS, Android, and Flutter.

import ZeroSettleKit
struct PaywallView: View {
@State var product: ZSProduct?
var body: some View {
Button("Upgrade to Pro") {
product = ZeroSettle.shared.product(for: "pro_monthly")
}
.checkoutSheet(item: $product) { result in
// done
}
}
.onAppear {
ZeroSettle.shared.configure(publishableKey: "zs_live_...")
}
}
import io.zerosettle.sdk
class PaywallActivity : ComponentActivity() {
override fun onCreate(state: Bundle?) {
ZeroSettle.configure("zs_live_...")
val product = ZeroSettle.product("pro_monthly")
setContent {
Button(onClick = { ZeroSettle.checkout(product) }) {
Text("Upgrade to Pro")
}
}
}
}
import 'package:zerosettle/zerosettle.dart';
class PaywallView extends StatelessWidget {
Widget build(BuildContext ctx) {
ZeroSettle.configure('zs_live_...');
final product = ZeroSettle.product('pro_monthly');
return ElevatedButton(
onPressed: () => ZeroSettle.checkout(product),
child: Text('Upgrade to Pro'),
);
}
}
Read the full integration guide →
What you don't build

Skip the infrastructure

The hard parts of mobile revenue are already built. You ship the buy button — the platform handles the rest.

No payment backend

No Stripe integration, no webhooks to host, no checkout server. The SDK call is the whole flow.

No entitlement server

One identity across StoreKit, Play Billing, and web. The platform keeps access in sync — no state to reconcile.

No tax engine

On the managed tier, ZeroSettle is the Merchant of Record — global tax calculation and remittance are handled for you.

No paywall A/B infra

Test prices, paywalls, and offers from the dashboard — stat-sig built in. No experimentation pipeline to stand up.

Start free

Add the SDK, sync your products, and go live in about 15 minutes. Free analytics and entitlements; optional direct billing on iOS and Android.

See pricing·How billing routing works