May 4, 2026
In-World Purchases (IWP) let Highrise World creators sell access, items, boosts, and other benefits to players for Gold. Setting up in-world purchases in Highrise requires two things: creating a product in the Creator Portal and implementing the Payments API in your Studio project to handle the transaction server-side. The process involves prompting the player, validating the purchase on the server, granting the reward through Inventory or Storage, and acknowledging the transaction. Always test with a non-owner account, since the World owner cannot complete their own IWP purchase flow.
An In-World Purchase, often shortened to IWP, is a paid product inside a Highrise World. Creators use IWPs to sell access, items, features, boosts, or other in-world benefits in exchange for Gold.
If you are building a World using Highrise Studio and want to monetize it, IWP is the system you need. But it is not a single button you drop into your scene. It is a pipeline with three parts: a product record in Creator Portal, a secure Payments API flow in your Lua scripts, and a persistent fulfillment system that actually delivers what the player paid for.
This guide covers every step of setting up in-world purchases in Highrise, from planning your product to testing the purchase flow in the app.
An In-World Purchase is a monetization product that lives inside a Highrise World. Players spend Gold to buy it, and the creator delivers whatever benefit was promised, whether that is a VIP pass, a bundle of tokens, event entry, or a cosmetic item.
IWP is different from other ways money moves through Highrise:
The official IWP documentation defines these products as a way for World Creators to monetize by offering exclusive items, access to special areas, or other benefits in exchange for Gold.
Think of IWP as a three-part system. Every working purchase flow needs all three parts.
Part 1: Product setup. You create the IWP product in the Creator Portal. This gives you a product ID, which is the unique string your code uses to reference that specific product.
Part 2: Secure purchase handling. Your Studio script prompts the player to buy (client-side), but the actual purchase validation, reward granting, and acknowledgment all happen on the server. The Payments API documentation makes clear that server-side methods like GetProduct and AcknowledgePurchase are only available on the server, while PromptPurchase runs on the client.
Part 3: Reward fulfillment. After the server confirms the purchase, it grants the reward and persists it through the Inventory API (for items, tokens, or virtual goods) or the Storage API (for progress flags, access unlocks, or VIP status). Without persistence, players lose what they paid for when the session ends.
Here is the flow in plain terms:
Player taps Buy
→ Client calls PromptPurchase(productId)
→ Highrise purchase prompt opens
→ Server PurchaseHandler receives the purchase
→ Server checks product_id
→ Server grants the reward
→ Server calls AcknowledgePurchase
→ Player sees success and gets the benefit
If any step is missing, the purchase either fails silently or, worse, charges the player without delivering anything.
Before you write a single line of Lua, decide exactly what you are selling and why a player would want it. Good IWP products are clear about what the buyer receives. Vague labels like “premium upgrade” with no explanation will frustrate players.
A few categories that work well:
If your product gives a random reward, you must disclose the odds before the player spends Gold. Highrise’s Terms of Service require creators to disclose the odds of receiving each type of random Virtual Item before the transaction. Apple and Google Play enforce the same rule for any mechanism that provides randomized virtual items from a purchase.
You do not start by writing Lua. You start by creating the IWP product record. Your script later calls that product by its product ID.
The official workflow is:
The product must exist and be listed for sale before the Payments API will work with it in a published World. The Accepting Gold documentation confirms this prerequisite.
The product ID is the bridge between Creator Portal and your code. It is a unique string, and it must match exactly. A typo means the purchase prompt will not appear or the server will not recognize the product.
Good naming conventions for product IDs:
vip_pass, tokens_100, speed_boost_1hThe Payments guide shows example IDs like token_100, token_500, premium_coins, and premium_bundle.
On the client side, call PromptPurchase(productId) when the player taps your buy button. This opens the Highrise purchase prompt where the player confirms or cancels.
One critical warning: the PromptPurchase callback can be a false positive. The Payments documentation explicitly states that this callback should not be trusted as proof of payment. Use it for UI feedback (like showing a “processing” message), but do not grant any rewards based on it.
This is where the real work happens. Set up a PurchaseHandler on the server that receives incoming purchases. When it fires:
purchase.product_id to identify what was bought.The Payments API reference confirms that the handler, fulfillment, and acknowledgment must all run server-side. This protects against client-side manipulation and ensures the transaction is trustworthy.
Granting the reward means more than setting a local variable. The example code in the Payments guide explicitly warns that storing tokens locally is only for example purposes and recommends using Storage or Inventory for persistence.
Which system should you use?
| What the player bought | Best system | Why |
|---|---|---|
| Consumable currency, tokens, items, bundles | Inventory API | Designed for player items, currency, and transaction-based operations |
| Progress, access flags, VIP unlock, quest state | Storage API | Designed for persistent data that survives sessions and restarts |
| Gold prizes or player rewards | World Wallet | Holds and transfers Gold from a world balance to users |
After the reward is granted, call AcknowledgePurchase to tell Highrise the transaction is complete. If something went wrong (unknown product, failed inventory write), reject it instead. Always grant the reward before acknowledging, not after.
Log the transaction on the server: player ID, product ID, reward granted, and acknowledgment result. This log becomes essential when a player says “I paid but got nothing.”
Here is the part that trips up almost every new creator: the World owner cannot purchase their own IWPs. The Payments guide states this directly. You need a second account to test the full purchase flow.
Additional testing notes:
goldfish and eel in Studio before uploading your World.If you need to download Highrise on another device for testing, grab it on iOS, Android, or through Steam.
Use this before publishing your World:
PromptPurchase client-sidePurchaseHandler registeredpurchase.product_idThe Payments API needs the product to exist in Creator Portal before the purchase prompt will work. If you build the buy button first and test it, nothing will happen, and you will waste time debugging code that is actually fine.
The PromptPurchase callback can return a false positive. The official docs warn against using it as the final purchase decision. Always validate on the server through PurchaseHandler.
If your server handles the purchase and grants the reward but never calls AcknowledgePurchase, the transaction stays in limbo. The Payments API docs require acknowledgment after fulfillment.
A local variable resets when the session ends. If a player buys 100 tokens and you store them in a local table, those tokens vanish on disconnect. Use Inventory or Storage.
This one catches nearly everyone. The owner cannot complete the IWP purchase flow in their own World. Use a different account.
Highrise Terms, Apple App Store guidelines, and Google Play policies all require odds disclosure before any randomized virtual item purchase. Skip this, and you risk both platform enforcement and player distrust.
These terms overlap, and the official docs spread them across different pages. Here is how they relate:
| Term | What it means | When you use it |
|---|---|---|
| IWP | A product sold inside a Highrise World for Gold | When defining what players can buy |
| Payments API | The Studio API that prompts, handles, and acknowledges purchases | When writing the purchase flow in Lua |
| Product ID | A unique string referencing the IWP | When connecting Creator Portal to your script |
| Inventory API | Server-side system for tracking player items and currency | When the purchase gives a player a virtual good or consumable |
| Storage API | Persistent data storage for progress and flags | When the purchase unlocks access or saves a state |
| World Wallet | World-level Gold balance for receiving or awarding Gold | When your World needs to fund prizes or reward players |
| Earned Gold | The Gold creators accumulate from IWP revenue and engagement payouts | When tracking your earnings |
| Creator Exchange | The cash-out system for eligible Earned Gold | When converting earnings to real money |
The best in-world purchases in Highrise are products where the value is obvious before the player spends Gold. Browse active Highrise Worlds to see what kinds of experiences are already live.
Access products work well because exclusivity has clear value: a VIP lounge, a premium quest line, a private event, or a backstage area.
Consumables like tokens, boosts, and extra attempts are easy for players to understand and easy for creators to fulfill through the Inventory API.
Permanent unlocks (badges, cosmetic world objects, lifetime area access) can command higher prices because they persist. Use Storage to remember the unlock.
Social support products like a “support the creator” button or a recognition wall give players a way to contribute without expecting a competitive advantage. These tend to feel good rather than exploitative.
Prize-loop products tie into the World Wallet. Players buy into a competition, the Gold goes to the World Wallet, and the winner receives a payout. These require clear rules and careful scripting, but they can drive repeat engagement.
Practitioners on Reddit’s r/HighRiseMobileApp frequently discuss how hard it is to earn Gold as a free-to-play user. Players treat Gold as scarce and emotionally loaded. Price your products carefully, and make the benefit unmistakable. If players feel a purchase is vague, overpriced, or unfair, they may avoid your World entirely.
Player trust is a design problem, not just a marketing one. When setting up in-world purchases in Highrise, the purchase experience itself matters as much as the product.
Show what the player gets before they buy. A name, description, and image should make the reward completely clear. Do not rely on a cryptic product name and hope curiosity drives sales.
Make the cost obvious. The Highrise purchase prompt shows the Gold price, but your own UI leading up to it should also display the cost. Players should never feel surprised by a charge.
Avoid accidental purchases. The FTC has taken enforcement action against game purchase designs that make inadvertent purchases too easy or obscure real-money cost through confusing currency chains. Even though IWP uses Gold inside Highrise rather than direct real-money charges, the UX principle still applies: confirmation steps should be clear, and buy buttons should not be placed where accidental taps are likely.
Disclose odds for random rewards. If your IWP triggers a randomized outcome (a mystery box, a random cosmetic, a loot-style mechanic), you must show the probability of each outcome before the transaction. This is required by Highrise’s Terms of Service, Apple, and Google Play.
Use only official payment flows. Community discussions on Reddit mention scams, third-party Gold, and off-platform payment disputes. Highrise Terms do not recognize third-party services for selling, transferring, or otherwise using Gold outside allowed services. Route all transactions through the Payments API.
Public documentation currently shows conflicting numbers about what percentage of IWP revenue creators keep. Some official pages state 70%, while the Payments guide and Support Center reference 90%. Until Highrise confirms a single canonical figure, check the current Creator Portal terms before pricing your World’s products. IWP earnings are credited as Earned Gold according to Highrise’s current creator-economy rules.
Check these first:
PromptPurchase from the correct client-side script context?goldfish or eel.If everything looks correct and the prompt still fails, check Highrise system status for any service issues.
This usually means one of:
PurchaseHandler is registered on the server.purchase.product_id correctly.Expected behavior. The Payments guide confirms the World owner cannot purchase their own IWPs. Use another account.
Are you still using test product IDs (goldfish, eel)? Those work in Studio before upload. Once the World is published, switch to your actual product IDs from Creator Portal. Also remember that the Unity Editor does not deduct Gold, so you need to test the real flow in the Highrise app.
Add server-side logging that captures: player ID, product ID, reward granted, acknowledgment result, and Inventory or Storage write result. Without logs, you are guessing. The Payments docs recommend server-side logging and client notification only after the server verifies the purchase.
An IWP (In-World Purchase) is a paid product inside a Highrise World. Creators use it to sell access, items, features, or other benefits for Gold. It is configured in the Creator Portal and delivered through the Payments API in Highrise Studio.
Yes. The Payments API requires a product to exist in Creator Portal with a valid product ID. Your script references that ID, so the product must be created first.
Not with the World owner account. The official Payments guide says the World owner cannot complete the purchase flow for their own IWPs. Use a second account to test in the app.
Yes. Use the test product IDs goldfish and eel in Studio before upload. Once the World is published and IWP products exist in Creator Portal, switch to your actual product IDs.
Use the Inventory API for player items, consumables, currency, and virtual goods. Use the Storage API for persistent progress, access flags, preferences, or world state that needs to survive across sessions.
Yes. If a purchase leads to a randomized outcome, you must disclose the probability of each possible reward before the player spends Gold. This is required by Highrise’s Terms of Service and by Apple and Google Play store policies.
Current public documentation is inconsistent on the exact percentage. Some official pages reference 70%, while others reference 90%. Check the current terms in Creator Portal before making pricing decisions. IWP earnings are credited as Earned Gold, which eligible creators can cash out through the Creator Exchange.
IWP is the product a player buys. World Wallet is a Gold balance that belongs to the World itself, which can receive a portion of IWP earnings and award Gold to players. They work together but serve different functions. You set up the in-world purchase to collect Gold, and you can use World Wallet to redistribute it as prizes or rewards.
Setting up in-world purchases in Highrise is not just about dropping a buy button into your World. It is about building a reliable pipeline: create the product, script a secure payment flow, fulfill the reward persistently, and protect player trust at every step. Get the fundamentals right, and IWP becomes a real monetization channel for your World.
Ready to build? Download Highrise and start creating, or explore the Highrise community to see what other creators are building. If you have ideas for items or concepts beyond Worlds, check out Highrise Ideas and Highrise Concepts for other ways to contribute to the creator ecosystem.
© 2026 Pocket Worlds. All rights reserved.
Company