Currently, MarketplaceService:GetProductInfo() sometimes fails for avatar items that are hidden, moderated, or archived.
When called on an item that meets the criteria, it will throw this error:
MarketplaceService:getProductInfo() failed because HTTP 400 (Bad Request)
Because this change was not announced anywhere, and the documentation does not mention it, I am hoping this is a bug. GetProductInfo
is only ever supposed to fail if the asset ID does not exist.
This issue started happening recently and has broken some experiences that rely on this behavior. Specifically, if a script knows that an asset ID is valid, there’s no reason why GetProductInfo
should ever fail, except for occasional network issues, in which you would use pcall
to automatically retry until it succeeds. Because of this change, a script like this will now just retry forever.
Hidden, moderated, and archived avatar items
For extra context:
-
“Hidden” refers to avatar items that have been hidden from the Marketplace by Roblox. This is often done for newly-created official Roblox items before they are ready to be publicly released.
An example of a hidden item: 8777152268 -
“Moderated” refers to avatar items that have been deleted by Roblox moderation.
An example of a moderated item: 502405082 -
“Archived” refers to avatar items that have been archived by the creator.
An example of an archived item: 232512754
When calling GetProductInfo
on any of the 3 asset IDs listed above, it will always fail.
Oddly enough, GetProductInfo
doesn’t fail for all items that meet the criteria (but it does for most of them). For example, here is an archived item that GetProductInfo
does NOT fail on: 9646621371
Repro
-
In a script, call
MarketplaceService:GetProductInfo(assetId, Enum.InfoType.Asset)
with the asset ID of an avatar item that is hidden, moderated, or archived. Example asset IDs are available above. -
Observe the HTTP 400 error in the output.
Expected behavior
MarketplaceService:GetProductInfo()
should not fail for avatar items that are hidden, moderated, or archived. It should only fail if the asset ID does not exist.