Go-live checklist
Check every part of your integration before you release it to real customers.
Work through this list before you ship your first release with Voidhash. Each item links to the page that explains it.
Project and keys
- Release builds use the production publishable key (
vh_pk_...), not a test key (vh_pk_test_...). See API keys. - No secret key (
vh_sk_...) is in an app, a website bundle or a public repository. Secret keys belong on your servers only. - Each secret key your backend uses has only the access it needs.
- You know which environment each build records into: production, sandbox (TestFlight, Play test tracks) or test.
Stores and products
- Each store you sell through is connected and enabled: App Store, Google Play, Stripe (Help center) or a payment source.
- App Store server notifications point at Voidhash for production and sandbox, and a test notification arrived. See Apple server notifications (Help center).
- Google Play real-time developer notifications reach Voidhash, and Send Test Message in Play Console succeeded. See Real-time developer notifications (Help center).
- Stripe's event destination is set up for live mode, not only test mode.
- Every product is mapped to its store product on every store you sell it through, including the offers your paywalls sell. See Products and perks.
- Each product grants the right perks.
- You decided whether store sandbox purchases unlock access in production apps. It is on by default, and App Review buys in the sandbox, so turning it off stops a reviewer's purchase from unlocking anything. Change it with the API, the CLI or the MCP server; see Project settings.
Paywalls
Skip this section if your team doesn't use Voidhash paywalls.
- Every paywall your app shows has a deployed build. See Build and deploy.
- Each location your app presents has a paywall assigned. See Paywall locations.
- Your app has a fallback for important entry points when no paywall can be shown.
SDK
- The SDK is configured once, at app launch. See Install an SDK.
- Your app calls
identifywith your user ID after sign-in andsignOut()on sign-out, which records$sign_outon every SDK. See People and identity. - Your app checks perks, not product IDs, to unlock features.
- A way to restore purchases is reachable in your app. App Review expects one for subscriptions and non-consumables.
- If another billing SDK still owns purchases, Voidhash runs in observer mode and only one SDK finishes transactions.
Your backend
- Your backend checks access with a secret key instead of trusting the client, with a server library or over HTTP.
- Your webhook endpoint is subscribed to the events you handle, in the environment you need, and a test delivery succeeded.
- Your endpoint verifies the signature of every request.
- Your handlers are idempotent: a retried delivery must not grant or charge twice.
Privacy
- If you need consent before collecting analytics, your app passes the person's choice to the SDK. See Swift, Kotlin, React Native or Web.
- Your App Store privacy details include the data the SDK collects. The Swift SDK ships a privacy manifest; see Swift SDK.
- You have a process for deletion requests. See Delete personal data.
Analytics
- Events from a test build show up in Activity → Analytics events.
- Analytics → Data health shows no rejected events or failing webhooks. See Check your data.
- Your reporting currency is set in team settings. See Analytics.
Team
- Everyone who needs Studio is invited with the least role they need. See Members and roles.
- If your company uses an identity provider, SSO is set up. See SSO and directory sync.
Final test pass
Make real sandbox purchases on every platform you ship, with the build you're about to release. See Test purchases (Help center).
- A purchase unlocks the perk in the app and appears on the person in People.
- Restoring on a fresh install brings the perk back.
- A renewal, a cancellation and an expiry change access as expected.
- A refund changes access as expected: a refunded one-time purchase loses its perks, but only an App Store refund of the current period ends a subscription; Google Play and Stripe refunds don't. See Refunds.
- Your backend receives the matching webhooks and its access check agrees with the app.
Next steps
- Test purchases (Help center)
- Troubleshooting
- Check your data
Something wrong or missing on this page? Tell us by email or on Discord.