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

FAQ

Short answers to common questions about pricing, access, stores, testing and hosting.

Short answers to the questions teams ask most while integrating Voidhash. Each answer links to the page that explains it in full.

Sign-up

Why does Studio say "You're on the list"?

Voidhash Cloud lets new teams in batches. Your account and team are set up, and Studio opens once your team gets access; we email you when it does. To ask about access, write to us on Discord. Self-hosted installs have no waitlist, but early-access features such as paywalls, A/B tests, feature flags, automations and push notifications can't be turned on there; see Self-hosting.

Pricing

How is Voidhash priced?

Plans include monthly allowances for tracked revenue, events and page views, with usage past them charged or paused depending on the plan. See Plans and billing and voidhash.com/pricing.

Does Voidhash collect my customers' payments?

No. The App Store, Google Play, Stripe and your payment sources charge your customers and pay you directly. Voidhash reads the purchases they report. Tracked revenue is a usage meter for your plan, not a share taken from payments.

Do purchases stop if I hit a limit or my payment fails?

No. Purchases, receipt validation, entitlements, restores, store notifications and webhooks keep working whatever your plan, spend cap or payment state. See Spend cap.

Access and identity

Does a purchase on iOS unlock Android and the web?

Yes, once the same person is signed in on each. Call identify with the same user ID on every platform; perks belong to the person, not to the store account. Anonymous people on different devices stay separate. See Link accounts across platforms.

Can I grant someone access by hand?

No. Studio, the API, the CLI and the MCP server can't grant or revoke a perk directly. Instead:

  • Have your backend report the purchase through a payment source, for example for a deal you sold outside the stores.
  • Give a store offer code (App Store) or promo code (Google Play); redeeming one is a real store purchase.
  • Send a Stripe Checkout Session with a 100% discount; a session made free by a discount still grants its products.
  • Attach the perk to a product the person already owns. This changes access for everyone who owns it.

Why does this person have access, or not?

Ask an agent through the MCP server (the tool is explain_person_access), or run voidhash person why user_123 premium in the CLI. Either walks from perk to product, store product, purchase and entitlement, and names the first broken link. See People and identity.

Should I check access in the app or on my server?

Both, for different things. The SDK decides what the app shows; your server must check anything a person can request directly, such as an API route or download. Check from your server with Node.js, PHP, Go, Rust or over HTTP.

Changes and offline behavior

How fast do changes reach devices?

ChangeReaches devices
A purchase, restore or identify on the deviceAt once: the SDK refreshes the person afterwards.
A purchase on another platform, renewal or refundOn the next refresh: a cached person is stale after 5 minutes.
A perk added to or removed from a productUsually within minutes.
A paywall deploy or placement changeWithin about an hour. See Build and deploy.
A feature flag changeWithin about 5 minutes on mobile.

To ask Voidhash immediately, read the person with forceFetch; see Check access for Swift, and the Kotlin and React Native pages.

What happens when the device is offline?

The SDK answers from the last person it cached, marked stale, and keeps it for 2 days before marking it expired; it still serves it after that. Events, attribute updates and purchases are queued and sent when Voidhash is reachable. With nothing cached, the answer is "unknown", not "no access".

What if Voidhash can't be reached during a purchase?

The store still charges and the SDK keeps the receipt. The purchase returns deferred, and the SDK sends the receipt in the background and finishes the transaction once Voidhash accepts it. See Purchases.

Stores and purchases

Which stores and payment providers are supported?

The App Store, Google Play and Stripe, plus any other billing system through a payment source. See Payment providers (Help center).

Do I have to use Voidhash paywalls?

No. Load products with getProducts() and buy with purchase() from your own screens. Paywalls are in early access; see Paywalls in your app.

Can I keep my current billing SDK?

Yes. Run Voidhash in observer mode: it records the purchases your other SDK makes without starting or finishing any. Then migrate when you're ready.

Does Family Sharing work?

Yes. A family member's shared App Store purchase is recorded without revenue, so it isn't counted twice. When the purchaser stops sharing, Apple revokes it, access ends, and webhooks send subscription.expired with expirationReason: "revoked".

How are refunds handled?

The store or Stripe processes the refund and Voidhash records it. Whether access ends depends on the store: an App Store refund of the current period ends it, while Google Play and Stripe subscription refunds don't. See Handle refunds.

Can people cancel or get a refund from my app?

Cancellation happens in the store: present Apple's sheet with showManageSubscriptions() (Swift) or iosShowManageSubscriptions() (React Native). Apple and Google handle refund requests themselves. For payment sources, Studio's person page has Cancel and Refund.

Testing

What's the difference between sandbox and test?

sandbox holds free purchases in a store's own sandbox: TestFlight, App Review and Google Play test tracks. test holds purchases from your own builds and servers: simulated purchases, Stripe test mode and payment sources on a test key. See Environments.

Why do TestFlight purchases unlock my production app?

By default, store sandbox purchases unlock production apps so App Review can open what it buys. Turn it off with PATCH /api/v1/projects/{projectId}/settings, the MCP tool update_project_settings, or the CLI; Studio doesn't show this setting. See Project settings.

Can I use Expo Go?

No. The React Native SDK ships native code that Expo Go can't load. Use a development build. See Expo Go isn't supported.

Data and hosting

Do I need one project per platform?

No. Use one project per app, and connect its App Store, Google Play and Stripe accounts to it, so one person's purchases and events come together. See Teams, projects and environments.

Does the SDK work without analytics consent?

Yes. While consent is denied or pending, the SDK collects no events, screens or attributes, but purchases, access checks, identify, flags and paywalls keep working. See Events.

How do I delete a person's data?

Use Delete person data on their profile, the API or the CLI. Purchases and revenue stay recorded without personal data. See Delete personal data.

Can I self-host Voidhash?

Yes, with the Community edition, but it is in alpha and not yet supported for production. Billing, Insights and early-access features aren't included. See Self-hosting.

Next steps

  • Troubleshooting
  • Error codes
  • Go-live checklist

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

PreviousAPI error codesNextWin back subscribers

On this page

Sign-upWhy does Studio say "You're on the list"?PricingHow is Voidhash priced?Does Voidhash collect my customers' payments?Do purchases stop if I hit a limit or my payment fails?Access and identityDoes a purchase on iOS unlock Android and the web?Can I grant someone access by hand?Why does this person have access, or not?Should I check access in the app or on my server?Changes and offline behaviorHow fast do changes reach devices?What happens when the device is offline?What if Voidhash can't be reached during a purchase?Stores and purchasesWhich stores and payment providers are supported?Do I have to use Voidhash paywalls?Can I keep my current billing SDK?Does Family Sharing work?How are refunds handled?Can people cancel or get a refund from my app?TestingWhat's the difference between sandbox and test?Why do TestFlight purchases unlock my production app?Can I use Expo Go?Data and hostingDo I need one project per platform?Does the SDK work without analytics consent?How do I delete a person's data?Can I self-host Voidhash?Next steps