We have a UGC item in-experience that is for free. When the player is prompted to redeem it, they select the redemption button, and are provided with this error:
The item is set with the correct PlaceID for the Dev API and third party sales are on. The users check their inventory in case the item was awarded anyway despite the error and it was not awarded. We also reprod this with different items.Experience is listed as a Sale Location within the configure dashboard, but does not appear on webpage as one despite the other sale locations being listed.
Expected behavior
The item should be redeemable like any other in-experience free UGC.
Could you please from whether PurchasePrompt is invoked from service script instead of the client script?
The limited item purchase has to be invoked from the server script.
Can you break down why this is? When reading the docs, it seems like using the client is fine? Can you walk me through the thought process so I can best relay this to the engineers for future implementations MarketplaceService | Documentation - Roblox Creator Hub
Hi @Anareloux, basically when you configure an item to be ExperiencesByPlaceId (API Only), it’s essentially saying that the item can only be purchased from within the specified experiences, after those experiences have granted the permission to the user.
Therefore, when you invoke PromptPurchase from a server script, we will attach a signature token to the purchase to indicate that the permission has been granted (for the specific user while they’re still in this specific game). However, if you invoke PromptPurchase inside a client script, we would not be able to attach such token, since client scripts are subject to exploitations and cannot be trusted (e.g. malicious users could possibly inject arbitrary LUA scripts to be executed on client side)