VoidhashDocs
DevelopersHelp centerGuidesAPI reference
Dashboard
Guides
Launch
Go-live checklist
Make your first App Store purchase
Make your first Google Play purchase
Troubleshoot
Troubleshooting
Recover from incidents
SDK error codes
Purchase error codes
API error codes
FAQ
Recipes
Win back subscribers
Handle plan changes
Unlock the app after a web purchase
Link accounts across platforms
Handle refunds
Register devices for push
Migrate
Migrate to Voidhash
Migrate from RevenueCat
Migrate from Adapty
Migrate from Superwall
Run in observer mode
Privacy and hosting
Delete personal data
Self-hosting
Operate a self-hosted server

Migrate from Adapty

Map Adapty concepts and SDK calls to Voidhash, and move your app over without losing subscribers.

This page maps Adapty's concepts and SDK calls to their Voidhash equivalents, then lists the steps specific to moving from Adapty. The overall plan, a parallel run followed by a switch behind a flag, is in Migrate to Voidhash.

Concepts

AdaptyVoidhashNotes
AppProjectOne per app, across platforms.
Access levelPerkChecked by slug, such as premium.
ProductProduct mapped to store productsOne Voidhash product can map to the App Store, Google Play and Stripe.
PlacementPaywall locationA stable slug in your app, such as onboarding.
PaywallPaywallDesigned and deployed in Studio.
Audience—A location shows one paywall to everyone; see No targeting rules.
A/B testA/B testTests paywalls at a location.
ProfilePersonShown on People; returned by getCurrentPerson().
Customer user IDDistinct IDYour user ID, passed to identify.
Custom attributesPerson attributesSet with setPersonAttributes.
Promotional offersOffersMapped per store under one offer ID.
Webhooks and integrationsWebhook deliverySigned; see Webhook events.
Observer modeObserver modereadOnly in Voidhash.

SDK calls

Adapty names below are the Swift ones; the other Adapty SDKs use close equivalents.

AdaptySwiftKotlinReact Native
Adapty.activate(_:)Voidhash.configure(publishableKey:options:)Voidhash.configure(context, publishableKey, options)createVoidhashClient(publishableKey)
Adapty.identify(_:)identify(externalUserId:)identify(externalUserId)client.identify(userId)
Adapty.logout()signOut()signOut()client.signOut()
Adapty.getProfile()getCurrentPerson()getCurrentPerson()client.getCurrentPerson()
accessLevels["premium"]?.isActiveperson?.hasActivePerk("premium")person?.hasActivePerk("premium")client.hasPerk("premium") or useHasPerk
Adapty.getPaywall(placementId:) and its productspresentFlow(placement: "onboarding"), or getProducts() for your own screenpresentFlow(activity, "onboarding") or getProducts()client.presentFlow("onboarding") or useProducts()
Adapty.makePurchase(product:)purchase(product:)purchase(activity, product)client.purchase(product)
Adapty.restorePurchases()restorePurchases()restorePurchases()client.restorePurchases()
Adapty.updateProfile(params:)setPersonAttributes(_:)setPersonAttributes(...)client.setPersonAttributes(...)

presentFlow returns a failed result when nothing is assigned to the location, so keep a fallback screen for important entry points.

Steps specific to Adapty

Rebuild the catalog

For each access level, create a perk. For each product, create a Voidhash product, map it to the same store products and attach its perks. Import products on the Products page lists the store products that aren't mapped yet. See Products and perks.

Recreate placements and paywalls

Create a location for each placement, with the same slug if you can, so app code changes little. Paywalls don't import: rebuild them in the designer, deploy, and assign each to its location. Paywalls are in early access; until they're on for your team, sell from your own screens with getProducts() and purchase.

Keep Adapty in charge, and observe

Ship the Voidhash SDK with readOnly on, next to Adapty, which keeps finishing transactions. After each purchase Adapty completes, call reportTransaction with the App Store transaction ID or Google Play purchase token. See Observer mode.

Use the same user IDs

Call identify with the same customer user ID you pass to Adapty. Anonymous Adapty profiles don't carry over; anonymous buyers appear in Voidhash once their app reports their purchases.

Share store notifications

Point App Store Server Notifications at Voidhash and set Voidhash's forwarding URL to the URL Adapty gave you. On Google Play, add Voidhash's subscription to your existing Pub/Sub topic. See Store notifications.

Compare, then switch

Log Voidhash webhooks next to Adapty's, compare access for a sample of people, then move purchase UI and transaction ownership to Voidhash behind one flag with setReadOnly(false). Remove Adapty once the flag is at 100%.

Exactly one SDK must finish or acknowledge each transaction. Decide which from one flag, read before either SDK starts a purchase, and never let both, or neither, own purchases.

Next steps

  • Migrate to Voidhash: the phased plan and timeline.
  • Run in observer mode
  • Paywall locations

Something wrong or missing on this page? Tell us by email or on Discord.

PreviousMigrate from RevenueCatNextMigrate from Superwall

On this page

ConceptsSDK callsSteps specific to AdaptyRebuild the catalogRecreate placements and paywallsKeep Adapty in charge, and observeUse the same user IDsShare store notificationsCompare, then switchNext steps