API to get list of developer products purchased in game

With Developer Products, it’s up to the developers to keep track of each transaction. This has always been inconvenient for situations such as data loss (due to the developer or Roblox’s fault, as seen today) or when a player wants to reset their data in a game but not lose purchases.

The reality is - these errors do happen from time to time and we don’t have the tools to verify or remedy them. This is harmful to our users because their money goes into the void, which breaks their trust to spend again in our game (or the entire site).

I propose something along the lines of this API:

MarketplaceService:GetProductPurchases(player, productId)
this returns a table of all transaction IDs for that developer product made by that user.

This will allow developers to fix mistakes and rebuild trust with their users. It’s also convenient for situations such as performing a data wipe but restoring purchases.


Still hasn’t been any response from Roblox for a highly requested and needed feature

I think this would be a great feature. If developers could easily index a user’s transaction history through a Roblox service, they would be able to create more effective customer support systems.

Transaction history for the sale of Developer Products and Game Passes is logged on the website, so hypothetically you could scrape that data and compile a full historical record. More importantly, it means that Roblox has already done a good job of keeping that data around.

Of course, that would be very hacky. Scraping the site and parsing the HTML to get these data points is something that very few developers would attempt, largely because of two obstacles:

  • roblox.com blocks HttpService :GetAsync() requests from its own server. A proxy would have to be used instead.
  • Once you have the HTML, you’d need to write a program that parses it properly, and saves it. Larger games would need to scrape thousands of pages of transaction history, and this process could take a very long time to complete.

Developers who haven’t kept a transaction history for each user will inevitably find out the hard way that without accurate records, it’s incredibly difficult to rectify mistakes. An automatic reimbursement system would need to know how many Robux each user has spent in order to apply broad corrections to game economies that have been destabilized by exploits, glitches, or developmental oversights. Situations like these are strong use cases for a function like what you’ve suggested in your original post, :GetProductPurchases(player, productId).

If I could expand on your suggestion, I would offer the idea of another function, :GetUserTransactionHistory(userId) which could return something like a Pages object, ordered chronologically.