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?
| Change | Reaches devices |
|---|---|
A purchase, restore or identify on the device | At once: the SDK refreshes the person afterwards. |
| A purchase on another platform, renewal or refund | On the next refresh: a cached person is stale after 5 minutes. |
| A perk added to or removed from a product | Usually within minutes. |
| A paywall deploy or placement change | Within about an hour. See Build and deploy. |
| A feature flag change | Within 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
Something wrong or missing on this page? Tell us by email or on Discord.