iOS
Swift, StoreKit 2 and native paywalls for iPhone and iPad.
Native purchases. Verified access. Swift and Kotlin SDKs, web packages, and a REST API for your backend.
Swift · Kotlin · TypeScript · REST
import CashSDK
// Configure once. Build something great.
CashSDK.configure(publishableKey: "csk_pk_your_key")
// Start a purchase with your store product ID.
let result = try await CashSDK.shared.purchase(
"app.example.pro.yearly"
)
// Server-verified access, ready to use.
if CashSDK.shared.entitlements.isActive("pro") {
unlockPro()
}
Native clients. Your own billing.
Native where it counts, cross-platform where it helps, REST for everything else.
Type-safe
Offerings, packages, and entitlements are fully typed, so your editor (and your coding agent) knows the shape of every response. No stringly-typed product IDs, no guessing which fields exist. Mistakes are compile errors, not production refunds.
Swift, StoreKit 2 and native paywalls for iPhone and iPad.
StoreKit purchases on macOS and Mac Catalyst, with shared customer access.
Kotlin, Play Billing and server verification for your Android app.
TypeScript and React clients with authenticated customer sessions from your backend.
A native Swift commerce client for direct distribution, with system browser checkout.
Manifest V3 pages and service workers, with checkout attempts preserved across restarts.
Keep your checkout and read customer access from your backend. No client SDK required.
One purchase model
The same entitlement logic, from native iOS to the web: one purchase model behind idiomatic SDKs.
StoreKit 2 native with async/await. The same package runs on iOS and macOS, Mac Catalyst included.
Play Billing v9 wrapper with coroutines.
On the roadmap: one bridge over both native billing stacks.
Browser, React and Node.js packages, and the REST API. Identical entitlement model.
Integrate
Add one dependency with your package manager of choice.
Initialize once on launch with your public API key.
Load the current paywall and pricing from the server.
Call purchase and read the returned entitlement state.
✓Load sandbox configurationdone✓Open the sample purchase flowdone✓Receive verified accessdoneif CashSDK.shared.entitlements.isActive("pro") {
unlockPro()
}Built for the coding agent doing the wiring.
Lightweight
product: "pro.yearly"A familiar checkout, in your app.Explore the platform
Everything the purchase flow touches: the paywall it renders, the receipts it validates, the events it emits.
Choose your platform, connect billing and verify the purchase flow with your customers’ identities.