The information on this page may no longer be accurate. To see the latest, go to our new and improved documentation. You can also learn more about the future of documentation.
Collapse Sidebar




After a player makes a purchase through a MarketplaceService/PromptProductPurchase|PromptProductPurchase() dialog, this callback is called multiple times until it returns Enum.ProductPurchaseDecision.PurchaseGranted. For example, the function is called again for a product when the player joins the game — or even after they have bought something else — unless you return Enum.ProductPurchaseDecision.PurchaseGranted. Do not return PurchaseGranted if the product could not be granted.

It’s important to carefully examine the information passed to the callback via the receipt info table and properly process the receipt. See the code sample below for a model of how to create a receipt handling callback.

Receipt Info Table

The receipt info table passed to this callback will contain the following data:

PurchaseIdstringA unique identifier for the specific purchase.
PlayerIdnumberThe ID of the player who made the purchase.
ProductIdnumberThe ID of the purchased product.
CurrencySpentnumberThe amount of currency spent in the purchase.
CurrencyTypeenum/CurrencyType|CurrencyTypeThe type of currency spent in the purchase; always Enum.CurrencyType.Robux.
PlaceIdWherePurchasednumberThe ID of the place where the product was purchased (not necessarily the same as the current place's ID).


Name Type Default Description

The receiptInfo is a table with the following keys:

  • PlayerId (number): The user ID of the player that made a purchase
  • PlaceIdWherePurchased (number): The place ID in which a purchase was made
  • PurchaseId (string): A unique identifier for a purchase that ought to be used to prevent granting a product multiple times
  • ProductId (number): The ID number of the purchased product
  • CurrencyType (Enum.CurrencyType): Deprecated. The type of currency used in the transaction.
  • CurrencySpent (number): The amount of currency spent in the transaction.

Expected return type:

Return Type Summary

An enum representing in what manner the developer product receipt was processed:

  • PurchaseGranted indicates that the game successfully granted the player the benefit the developer product is meant to provide, such as a currency boost, gameplay bonus, item, etc. This indicates to Roblox that the sale was performed successfully. Do not return PurchaseGranted if the product could not be granted.
  • NotProcessedYet indicates the developer product’s benefit could not be granted, such as a product the player is not eligible to purchase, is no longer relevant to the current game state, etc.

Code Samples

ProcessReceipt Callback

This code sample illustrates a MarketplaceService/ProcessReceipt|ProcessReceipt callback function for a game to handle purchasing of two Articles/Developer Products In Game Purchases|developer products (more can be added as needed). It properly checks for and records purchases using a GlobalDataStore called “PurchaseHistory.”

Most importantly, it properly returns Enum.ProductPurchaseDecision.PurchaseGranted when the transaction is successfully completed or if it’s detected that the purchase has already been granted using the “PurchaseHistory” data store.