VoidhashDocs
DocumentationAPI reference
Dashboard
Get started
Introduction
Quickstart
Setup
Setup overview
Create a project
Products and perks
Paywall locations
CLI
Paywall components
Components
Develop a component
Editor panels
Component definition
Publishing
Installing and capabilities
Mobile SDKs
Swift
Kotlin
React Native
Store setup
Connect the App Store
Connect Google Play
API libraries
Node.js
PHP
Rust
Go
Resources
MCP server
Migrate in observer mode
Delete a person's data

Connect the App Store

Connect App Store Connect to Voidhash so it can validate purchases and receive subscription updates.

Connecting the App Store lets Voidhash validate StoreKit transactions on the server and receive subscription lifecycle updates from Apple. Do this once your app and its subscription products exist in App Store Connect.

Creating keys requires an Account Holder or Admin in App Store Connect. An App Manager can complete the other steps.

Before you connect

Confirm the following in App Store Connect:

  • The Paid Apps Agreement is active, and banking and tax details are complete.
  • The app's bundle identifier matches the one in Xcode.
  • At least one auto-renewable subscription exists.
  • You can create and download an In-App Purchase key.

Apple's In-App Purchase setup overview describes the account prerequisites in more detail.

Configure Voidhash

In Studio, open Settings → Payment providers → App Store. Work through the sections in order.

Add app details

Enter the bundle identifier from Xcode and the app's numeric Apple ID. The Apple ID is listed in App Store Connect under Apps → App Information.

  • Find the bundle ID
  • Find the App Apple ID

Add an In-App Purchase key

In App Store Connect, open Users and Access → Integrations → In-App Purchase and generate a key. Copy its Issuer ID and Key ID into Studio, then upload the .p8 file.

Apple lets you download the private key only once. Store it securely, and revoke it if it is ever exposed.

Follow the key guide.

Add App Store Connect identifiers

Open Users and Access → Integrations → App Store Connect API and copy the Team Key Issuer ID and Key ID that Studio asks for. The Vendor Number is in Payments and Financial Reports.

Find the App Store Connect values.

Configure server notifications

Copy the notification URL shown in Studio. In App Store Connect, set it as both the Production and the Sandbox App Store Server Notifications URL, and choose Version 2 for each.

Configure Apple Server Notifications.

Save and enable

Save each section and resolve any validation errors, then enable the provider. Voidhash can now validate StoreKit transactions and receive subscription lifecycle updates.

Connect products

Open each Voidhash product and add the matching App Store subscription product ID. Product IDs cannot be changed in App Store Connect, so copy them exactly.

To sell a promotional offer from a paywall, add it under Promotional offers with the offer ID your paywalls use and its identifier from App Store Connect. Voidhash signs it with the In-App Purchase key from this configuration. See Offer a discount.

Product metadata can take time to reach Apple's sandbox. If useProducts() returns null right after a change, wait and retry before you change your app code.

Non-renewing subscriptions

Apple does not record when a non-renewing subscription ends, so Voidhash takes its length from the product you map it to:

  • Subscription product with a billing duration. Each purchase grants access for that duration, starting when it was bought. A purchase made while earlier access is still running starts its own period; it does not extend the earlier one.
  • One-time or consumable product. The purchase is recorded like any purchase of that kind. A one-time product grants access that does not expire.

A refund or revocation from Apple ends the access, as it does for other products.

Optional settings

  • Small Business Program. Add the effective dates only if your account participates.
  • Apple Server Notification forwarding URL. Receive a copy of each verified Apple notification on a public HTTPS endpoint. See Forward Apple Server Notifications.
  • StoreKit development assets. Upload the subscription-offer key and the local testing certificate only when your Xcode test setup needs them.

Verify

  1. Build the app with the same bundle identifier.
  2. Sign in with a Sandbox Apple Account.
  3. Load the product and confirm the localized displayPrice appears.
  4. Complete a purchase and check for an active grant in useCurrentPerson().
  5. Restore purchases after reinstalling or resetting the test app.

See Make and restore purchases for the client flow on your platform.

Sandbox purchases in your published app

A purchase made with a Sandbox Apple Account, in TestFlight, or by Apple's App Review is free and appears in Studio's Sandbox environment. By default it also unlocks access in the build you publish: your app sends the same requests from TestFlight and from the App Store, so Voidhash cannot tell those builds apart, and App Review buys with a sandbox account in the build you submit. Google Play test purchases work the same way.

The catch is that a tester's sandbox purchase keeps unlocking that account in the store build, for as long as the purchase lasts. A free sandbox lifetime purchase unlocks it for good.

To stop this, turn off Unlock access in production apps under Settings → General → Sandbox purchases in Studio. Production apps and secret-key entitlement checks then count only real store purchases. The change applies at once, to sandbox purchases already made too.

App Review needs sandbox purchases

With the setting off, App Review cannot unlock what it buys, and Apple may reject your app or an update for it. Your TestFlight and Google Play testers lose access from test purchases too.

Sandbox purchases are still validated and recorded either way, and webhooks still deliver them, with environment set to sandbox. If your backend grants access from webhooks, check that field yourself.

PreviousErrorsNextConnect Google Play

On this page

Before you connectConfigure VoidhashAdd app detailsAdd an In-App Purchase keyAdd App Store Connect identifiersConfigure server notificationsSave and enableConnect productsNon-renewing subscriptionsOptional settingsVerifySandbox purchases in your published app