VoidhashDocs
DevelopersHelp centerGuidesAPI reference
Dashboard
Get started
Introduction
Quickstart
How Voidhash works
Glossary
Versions and releases
Concepts
Teams, projects and environments
API keys
Products and perks
Offers
Subscription lifecycle
People and identity
Events
Features
Paywalls in your app
Feature flags and A/B tests
Paywall components
Push notifications
Ad attribution in your app
Client SDKs
React Native
Swift
Kotlin
Web
Your backend
Node.js
PHP
Go
Rust
Other languages
Payment sources
Forward store notifications
Developer tools
CLI
MCP server
Query analytics with VoidQL

Offers

Sell a product at a discount through App Store promotional offers and Google Play developer offers.

An offer is a discounted way to buy a product, such as 50% off the first year. It isn't a separate product: the person gets the same subscription and perks and pays a different price.

Set up an offer

  1. Create the offer in each store: a promotional offer on the subscription in App Store Connect, or a developer offer on the base plan in Google Play.
  2. List it on the product's App Store or Google Play mapping under an offer ID your paywalls and app use, such as win-back, beside the store's own offer identifier. Use the same offer ID on both stores. See Manage your catalog for where this lives in Studio.

Voidhash signs App Store promotional offers with the In-App Purchase key from your App Store settings. A Google Play offer needs the mapping's Base plan ID.

Buy an offer

Your app buys a product with an offer ID. The SDK looks up the store's offer in the product's mapping. On the App Store, Voidhash signs the offer; on Google Play, the SDK uses the base plan's offer token. The store charges the offer price and Voidhash grants the perks. If the offer can't be applied, the purchase fails with OFFER_UNAVAILABLE.Your appSDKApp StoreGoogle PlayOffer priceOFFER_UNAVAILABLEbuy with win-backfinds offer in mappingVoidhash signs offerbase plan offer tokenperks grantednever the regular price

The SDK buys exactly the offer, or fails (dashed).

Buying an offer either buys exactly that offer or fails with OFFER_UNAVAILABLE; it never falls back to the regular price. It fails when the store doesn't offer it to this person, for example because they aren't eligible, or when the product's mapping on that store lists no such offer. A paywall that sells an offer no mapping lists fails to build. To buy an offer from code, pass its offer ID to the SDK's purchase call; see Purchases for Swift, Kotlin or React Native.

Next steps

  • Products and perks
  • Win back subscribers
  • Map store products

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

PreviousProducts and perksNextSubscription lifecycle

On this page

Set up an offerBuy an offerNext steps