How to retrieve avatar items items (in a single request!)

I need detailed information about a user’s inventory items.

Specifically:

  1. Each item’s creator (to verify ownership)
  2. The item’s price or sale value (to properly evaluate donations and reselling)

Roproxy Sucks

I have tried using Roproxy but it is extremely poorly made and does not give the creator of the item nor the price. It only retrieves basic information like its name.

I know its possible

Considering games exist like Pls Donate I know its possible to retrieve detailed information about their items but it has been extremely difficult to find a solution.

How do I do it

I know roblox has endpoints to retrieve items which Pls Donate likely uses, but I have no clue how to get the price and creator.

Could anyone share advice, code snippets, or references to help me access the full inventory data including creator and price information?

Thanks!

1 Like

I think you’re just looking at the wrong API. All roproxy does is makes it so you can get past Roblox’s safeguard of not letting Roblox experiences use their API. You can use https://apis.roproxy.com/assets/v1/assets/{assetID} (find documentation here!) to find the creator, and use game:GetService("MarketplaceService"):GetProductInfo() with the product ID and product type (Enum.InfoType) to get the information on the Asset, which also returns PriceInRobux! Any clothing is Enum.InfoType.Asset, and the rest are explainable. Need any more help, just reply! :smiley:

4 Likes

Hey Thanks For Your Support. To clarify, I need:

  1. Price
  2. Creator (not owner)

Your current request is https://apis.roproxy.com/assets/v1/assets/{assetID} but thats an invalid request. Putting it into google shows it doesn’t work at all even for individual ones

These are some other requests that I found that retrieve all the users items, but they don’t give enough details (only the assetId and name but NOT creator or price)

https://inventory.roproxy.com/v2/users/{userId}/inventory/{AssetId}?limit=100
:white_check_mark:AssetId
:white_check_mark:Name
:x: Price
:x: Creator (gives owner)


https://inventory.roproxy.com/v2/users/{userId}/inventory?assetTypes={AssetName}&limit=100&sortOrder=Asc
:white_check_mark:AssetId
:white_check_mark:Name
:x: Price
:x: Creator


Do you think I will have to do a call like this but then do a productInfo to get each’s data? I’m worried this will bloat my usage a ton since I have to check each item in their inventory even if they arent the creator

2 Likes

What type of items are you trying to retrieve (eg. avatar items, gamepasses…)? And are you trying to retrieve items from any player or just the local player?

3 Likes

I’m just trying to get it from the local player (to get donation links) and I need to get their

local assetTypes = {
[“TShirt”] = 2,
[“Shirt”] = 11,
[“Pants”] = 12,
[“Hat”] = 8,
[“HairAccessory”] = 41,
[“FaceAccessory”] = 42,
[“FrontAccessory”] = 45,
[“BackAccessory”] = 46
}

so that they can sell these items to other players

2 Likes

try https://inventory.roproxy.com/v2/users/{userid}/inventory/{assettype}! I tested it and it returned values, but I did not check if it returns what you are looking for.

2 Likes

Thanks for the link but I already tried that one here

image

It uses this “owner” BS rather than creator. owner is literally always the local player because they technically “own” a copy of it and no price

1 Like

You’ll want to get the Price and Creator using MarketplaceService:GetProductInfo(ASSET_ID). AFAIK there is no way of getting that information using web requests.


1 Like

I can’t do that because it is incredibly inefficient. It would be insanely slow and my requests would get filled up instantly.

Thats because I don’t know who the creator of each item is so I would literally have to go through every item in their inventory, use GetProductInfo just to see if they made it or not, and then repeat.

Some users have hundreds of items purchased by other players and roblox would rate limit the hell out of me

1 Like

I believe what Ransomwave said is the only way to achieve what you are looking for.

1 Like

AvatarEditorService:GetBatchItemDetails

3 Likes

Nevermind, there is a way of doinng exactly what you’re asking with just a request.

With the following request, you will get all of a player’s on-sale items, their IDs and their prices.

https://catalog.roproxy.com/v1/search/items/details?Limit=30&CreatorName=Ransomwavee

This request is the equivalent of filtering by user on the catalog like this:

You can also filter by category (shirts, pants, hats…), but you’ll need to know the category’s specific ID, which I don’t think is what you want anyways.

Note that this only returns items in the catalog, not gamepasses or dev products.

1 Like

It just says this when I put it in google

1 Like

This user has no on-sale items. That is why it is returning null for you.

2 Likes

Why not just use MarketPlaceService:GetProductInfo on the asset id to retrieve the Price and Creator?

1 Like

How are you finding these APIs? I’m trying to use https://api.roblox.com//docs but it says the website’s down

1 Like

because its what noobs use who love lag and errors (Roblox Limits you to 600 Requests per minute with it which is 10 per second which isn’t enough for users with thousands of inventory itmes they purchased)

https://catalog.roproxy.com/v1/search/items/details?Limit=30&CreatorName=Ransomwavee

This works 10000x times better

1 Like

That’s not a professional response.
The system your implementing may not have any other approach to create it. Roblox only limits us to asset ids and then we have to use market place service so get other information.

Anywho, this may help you:

It’s a list of inventory API end-points that Roblox provides.

1 Like

Donation Style Games | How to retrieve a user’s items for multiplayer donation

The issue with current mainstream methods


  1. :-1: https://inventory.roproxy.com/v2/users/{userId}/inventory/{AssetId}?limit=100
    :white_check_mark:AssetId
    :white_check_mark:Name
    :x: Price
    :x: Creator (gives owner)

  1. :-1: https://inventory.roproxy.com/v2/users/{userId}/inventory?assetTypes={AssetName}&limit=100&sortOrder=Asc
    :white_check_mark:AssetId
    :white_check_mark:Name
    :x: Price
    :x: Creator

Because neither of the current popular solutions return the price nor the creator, donation games may utilize extremely inefficient methods. For instance a common use is:

  1. Retrieve the initial items via either of the top 2 calls
  2. Use :GetProductInfo on the every item in the user’s entire inventory to get its creator + price.

This is bad because there are many user’s who own significant assets. Like if you did this process on the Roblox account it would need to do :GetProductInfo for thousands of items. And it doesn’t batch them based on ownership nor does it even tell you who the creator is, so if you need to filter out items created by them (for games like pls donate) you have to do 2 requests for every item in their entire inventory! :-1:


→ Current Best :star: Server-Side Solution

Recently, @Ransomwavee was able to find a single request that is the :star:elite tier of requests.

https://inventory.roproxy.com/v2/users/%d/inventory/{username-here}?limit=30

It seems to return all their avatar items (NOT gamepasses) that are only owned by the player AND retrieves their robux.

I have recently implemented this in the following:

module.getInventoryItems = function(username)
	local allItems = {}
	local cursor   = nil
--	local baseUrlToGetCreator = ("https://inventory.roproxy.com/v2/users/%d/inventory/%s?limit=100")
	--	:format(plrId, assetTypeId) -- Takes ID not String name

	local baseUrlToGetPrice = ("https://catalog.roproxy.com/v1/search/items/details?Limit=30&CreatorName=%s")
		:format(username) -- Takes String name not Id

	while true do
		-- append cursor if paginating
		local url = baseUrlToGetPrice
		if cursor then
			url = url .. "&cursor=" .. HttpService:UrlEncode(cursor)
		end

		local success, response = pcall(function()
			return HttpService:GetAsync(url, true)
		end)

		if not success then
			warn("Failed to fetch items for userId", username, "assetType", response)
			break
		end

		local data = HttpService:JSONDecode(response)
		if data and data.data then
			for _, item in ipairs(data.data) do
				table.insert(allItems, item)
			end
		else
			warn("Inventory v2 response missing .data for", username)
			break
		end

		if not data.nextPageCursor or data.nextPageCursor == "" then
			break
		end
		cursor = data.nextPageCursor
	end
	-- filter to items created by the user and listed for sale


	return allItems
end

so that when i call a user like Roblox with

local allItems = module.getInventoryItems("Roblox")

it gives:

Which as you can see from the image up to 999 items they’re selling that
:white_check_mark: Include price
:white_check_mark: Are being sold by the selected player
:white_check_mark: A lot of other info too like UnitsAvailable (for limiteds) and favorites
:x: Limited to only 30 items per batch
:x: Max 999 items per user
:x: Does not show group assets or off-sale


So its able to give a lot of information, but the main limitation is that it really only works if ur doing something like a donation game where u only want to see their items currently being sold and you don’t need hyper precision. This is still much more superior than every other solution because:

  • Other solutions require you specifying AssetId. This is less efficient because you need to do requests for each one, meaning wasted requests on empty areas.
  • They do not provide the full picture, like only giving assetId and not creator, meaning you need to manually check if each one is owned by the player

→ Less Secure but Viable Way :neutral_face: Client Side

If its crutial for you to have a precise number of assets without capping it, I also recommend another approach:

However, I’m not entirely educated on this system, you can see @DrKittyWaffles contributions. I believe the main thing here is that:
:white_check_mark: Includes price + creatpr
:white_check_mark: Gives both their owned items and for-sale items
:white_check_mark: Likely gives additional information
:white_check_mark: Better control (you specify specific assets to retrieve)
:x: Requires 2 seperate calls (Get Inventory then get data)
:x: Runs on the client only (less secure)
:x: A lot more requests (for every new player you need to request all the other player’s data again)

The main concern with this method is security: If it can only run on the client, its prone to user’s tampering with data. This is fine if its for insecure uses (like trying on avatar item previews), but for donation games this option is not viable. The only other secure way would be to have each player request the items of every other players (as this would mimic the server architect). But that’s incredibly inefficient and quickly balloons as each new player is exponential.

3 Likes

I don’t think you have to re-explain that to me.

I read your edit after I replied due to a communication delay. And if ransomware solved your issue, then why not mark their reply as the solution?

And, I mistook “inventory” as the user’s inventory with items such as animations, meshes, etc. That’s why I provided you with the inventory API endpoint. Apologies for the confusion.

1 Like