Purchases, customer data, and revenue on iOS, Android, Smart TV, and the web. One source of truth. One API. Built for engineers and agents.
App Store, Play Store, Stripe, and your own billing — reconciled into one queryable subscription graph. Exposed through APIs, webhooks, and SDKs the rest of your product can trust.
Implementation and maintenance of purchases across mobile, Smart TV, and the web — simplified. Go to market quicker and spend less time supporting platform updates.
Superwall simplifies purchase implementation and automates receipt validation for StoreKit 2, Google Play Billing, Smart TV, and web transactions.
One typed surface for entitlements, purchases, restores, and receipts — instead of one per platform. Same primitives, same shape, every device.
await superwall.purchase(product) Easy online purchases that work on mobile — no coding or hosting needed. Hosted checkout, Apple Pay, Google Pay, and Link — wired to the same entitlement graph as your app.
Our dedicated engineers handle the StoreKit, Play Billing, and Smart TV updates — so you focus on developing features that matter, not chasing receipt schema diffs.
One platform. Every store, every device, every receipt — reconciled into a single subscription record your whole stack can trust.
Use one. Use all eight. Each is versioned, typed, and addressable from any client.
GET /v1/users/abc123/subscription
→ {
status: 'active',
product: 'pro_annual',
store: 'app_store',
renews_at: '2027-05-14T00:00:00Z',
trial: false,
grace_period: false
} // pages/api/superwall.ts
const event = verify(req.body, SIGNING_SECRET);
if (event.type === 'subscription_started') {
await crm.upsert(event.data.user);
await analytics.track('Purchase', event.data);
} curl https://api.superwall.com/v1/users/abc123 \
-H 'Authorization: Bearer sk_live_…' \
-X PATCH -d '{"attributes":{"plan_tier":"vip"}}' integration: mixpanel
project_token: ${{secrets.MIXPANEL}}
region: US
sales_reporting: Proceeds
anonymous_user_behavior: dontSend let products = Superwall.shared.paywall("hard").products
ForEach(products) { p in
ProductCard(price: p.localizedPrice) {
try? await Superwall.shared.purchase(p)
}
} Generate a paywall: → annual_49.99 with 7-day free trial → dark mode, mint accent → "see all features" toggle → ship to 10% of US new users ✓ paywall_id: pw_ai_4af2c · live in 92s
mcp.connect('superwall')
→ create_paywall({name: 'annual_trial_2026'})
→ set_products(['annual_49.99_trial_7d'])
→ preview_paywall() // ✓
→ publish_to_audience('us_new_users', 0.10) GET /v1/paywall/hard?region=DE
→ {
price: '€49,99',
trial: '7 days',
experiment: 'exp_4af2c#B',
ttl: 60
}
// resolved in 31ms at edge-fra Every lifecycle moment is a typed, signed, replayable webhook. Every record is readable and writable over REST and GraphQL. Build comms, CRM backfills, dashboards, admin tools — without scraping ours.
import { verify } from "@superwall/webhooks";
export async function POST(req: Request) {
const raw = await req.text();
const event = verify(raw, {
secret: process.env.SUPERWALL_SIGNING_SECRET!,
signature: req.headers.get("x-superwall-signature"),
});
switch (event.type) {
case "subscription_started":
await crm.upsertUser(event.data.user);
break;
case "trial_converted":
await warehouse.insert("conversions", event.data);
break;
}
return new Response(null, { status: 200 });
} Server-side. Opt-in. GDPR-aware. Pipe events to analytics, comms, CRM, attribution, and your warehouse — without another SDK in your app.
Use Superwall for pricing, paywall config, A/B assignment, entitlements, and analytics. Render the UI in SwiftUI, Compose, React, RN, Flutter, or a custom canvas.
paywall_open / decline / purchase yourself // No UI from Superwall. Just the source of truth.
import SuperwallKit
struct PaywallScreen: View {
@StateObject var sw = Superwall.shared
var body: some View {
VStack(spacing: 16) {
if let products = sw.paywall("hard_paywall")?.products {
ForEach(products) { product in
ProductCard(
title: product.name,
price: product.localizedPrice,
cta: "Start free trial"
) {
try? await sw.purchase(product)
}
}
}
}
.onAppear { sw.track(".paywall_open") }
}
} An MCP server and an agent-shaped SDK. Typed tools for designing paywalls, running experiments, mutating catalogs, and shipping config. Claude, Cursor, and your agents take paywalls from prompt to production.
create_paywall(name: "annual_trial_2026")set_products([annual_49.99_trial_7d])set_theme(dark, "see_all" toggle on)preview_paywall() ✓create_experiment(traffic: 10%, geo: "US")publish_to_audience("new_users") ✓Paywall config, A/B assignment, geo pricing, and entitlement state — all resolved at the edge before your screen mounts. No wrong-price flash. No empty paywall. No spinner.
Every primitive — source of truth, webhooks, REST, integrations, headless, AI paywalls, the agent SDK, the MCP server — at zero cost. You pay only when a Superwall paywall earns you money.
Render a Superwall paywall, it converts, we take a small cut. That's the whole bill. No seats. No event fees. No API surcharges. No webhook tiers.
// or run npx create-superwall@latest