Bundle Purchase for Developer Products/Gamepasses

I’ve had this idea for a while now:
Bundle purchases!

(I do admit my lua background is not the greatest, so this explanation may be a bit bumpy)

Regular developer products can be creates and sold an infinite amount of times, however these purchases are individual which can become annoying. With bundle purchasing, developers can include a sort of “package deal” by including an array of developer products and physically coding in a price (in robux) to sell said bundle at!

Coding sample:
This method will also require MarketPlaceService to function, and works along side :PromptProductPurchase() - in this case, I suggest the following function:
MarketPlaceService:CreateBundle(array,name(string),price(Int),ImageId(string)) where the array is the developer product IDs that reside in this function as well as any gamepasses that may be included, the price refers to a set amount (in robux) to sell the bundle at, the name being what shows up when prompted and the image refers to a roblox image ID used for the decal display image. The bundle must cost more than the gamepass, otherwise it will produce an error. This function will return an ID, which can be used in :PromptProductPurchase().

This can be used in the following method:

local MPS = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
local ProductIDs ={

 local BundleID = MPS:CreateBundle(ProductIDs,"Yard Sale!",500,"http://www.roblox.com/asset/?id=500750735")

local function promptPurchase()
local player = Players.LocalPlayer
MarketplaceService:PromptProductPurchase(player, BundleID)

This would benefit developers in such a way to upsale more of their products, and would save a lot of time put into developer products. For me personally, I would use this continuously in order to produce a more solid economy for my games, having daily bundles (Arguably you could just make a new developer product and just sell all the bundle items in that said product) would be much easier, and if gamepasses would be inclusive, then you could say… sell VIP with the addition of 150 coins for a limited time offer! (or something of the sort)

Thank you for reading and let me know what you think!!


Cool idea, although there’s a few problems.

The web interface for checking your purchases would need to be updated such that it’s clear they bought multiple products. This could be challenging from a web scaling standpoint for calculating sums of spent Robux.

It’s unlikely the API will ever support arbitrary price points. The bundle price would likely be forced to be the sum of the products.

And the nail in the coffin for this idea is the processing of such transactions - games are only coded up to have the one callback - ProcessReceipt - with a single return value per product. Such a change would require developers to write specific logic for attempting to process bundles as a whole and not just individual products. To illustrate the problem:

  1. Player buys bundle with products A, B and C.
  2. Game invokes ProcessReceipt callback for A and B, which succeed.
  3. Oh no! The ProcessReceipt callback failed for C.

What happens to the Robux? Does it go back to the user? Does it stay with the developer and the user never gets product C? Do we notify the game about the failure and ask developers to write code which rolls back products A and B? Is that even possible for most games, let alone all of them? You can see how this is a rabbit hole.


These are valid arguments that, I will admit, did not think about :sweat: I guess my rebuttal to this would be as follows:

Ofc, I’m not 100% sure how this site works for handling purchases so I could be COMPLETELY wrong , which I probably am, but could the bundle be seen as one whole unit instead of say 3 individual stand points encased in a purchase? Therefore, if it is one unit, it can be displayed such that it is displayed like other developer product/gampass purchases.

I thought about this as well, and noticed there wasn’t API support for price points. The whole goal of these bundles would be to present an opportunity to the consumer to save money on a package deal, so the sum of the products wouldn’t do it justice, although I do not see another way around this unless the API would be supported which to me - seems as though this may be the nail in the coffin so to speak!

For this issue, it may be resolved as any ordinary developer product - Usually when selling developer products, it is up to the developer to make sure any kinks are resolved before the release of the sale, so by doing test purchases, the developer SHOULD fix any issues with this fact. However, if this is sold as a one unit item, it begs the question “Well what if there’s a mix of gamepasses AND developer products?” . This is another issue - but when processing the receipt, would there be a way to pass over the array of IDs, then through a process of maybe:

for i,v in pairs(array) do
    local assetInfo = MarketplaceService:GetProductInfo(v, Enum.InfoType.Asset)
    if assetInfo.AssetTypeId == 34 then
        --Do something
        --Do something else for DP

Not sure if this answered that part of the argument, but in my opinion, just like a developer product has its odds of not working - it is how the developer deals with it that gives the final resultant.


FWIW, that callback is invoked again every so often and at least at every game join of that player afterwards (until X days have passed and only then the money is returned from escrow). So if it failed once because e.g. datastores are down, it will probably succeed later or on the next play session of the user. The failure mode would be similar for bundles of individual items vs one individual item.