You can search Roblox's assets outside Studio by accessing the Creator Store API. Use the Creator Store API to query Studio assets, such as meshes, models, and audio, and the Marketplace API to query avatar assets on the Marketplace.
Each API requires a URL and custom search parameters for that specific catalog. If both URL and parameters are valid, the API returns a JSON format with the results of your search.
Creator Store API
You can query items from the Creator Store catalog using the following URL: https://apis.roblox.com/toolbox-service/v1/marketplace/{categoryId}[params]
You can replace [categoryId] and [params] with the appropriate query parameters to customize your search.
Valid category IDs are:
- Audio = 3
- Model = 10
- Decal = 13
- Animation = 24
- Plugin = 38
- MeshPart = 40
- Video = 62
- FontFamily = 73
- Music = 300
Query Parameters
You can specify search parameters by appending a series of parameters and values to the URL, each separated by a &.
Use the following parameters to query the Creator Store:
Parameter | Type | Options and Values |
---|---|---|
categoryId (path) | int | 3 = Audio 10 = Model 13 = Decal 24 = Animation 38 = Plugin 40 = MeshPart 62 = Video 73 = FontFamily 300 = Music |
sortOrder | int | 1 = Asc 2 = Desc |
limit | int | Number of results to return, maximum 100. |
cursor | string | Pagination cursor |
pageNumber | int | Page number to request for |
keyword | string | Search keyword |
assetSubTypes | array[string] | Ad, MaterialPack, Package |
excludeAssetSubTypes | array[string] | Ad, MaterialPack, Package |
creatorType | int | 1 = User 2 = Group |
creatorTargetId | int64 | User or Group Id to search for |
minDuration | int64 | Minimum value of the duration range for audio assets in seconds |
maxDuration | int64 | Maximum value of the duration range for audio assets in seconds |
sortDirection | int | 0 = None 1 = Ascending 2 = Descending |
artist | string | The name of the artist |
album | string | The album you are looking for |
audioTypes | array[int] | 0 = Music 1 = SoundEffect |
uiSortIntent | int | What sort order to rank the results by 1 = Relevance 6 = Trending 7 = AllTime 8 = Top 9 = Duration 10 = DateCreated 11 = DateModified 12 = Creator 13 = Name |
includeOnlyVerifiedCreators | bool | A flag to include only results from verified creators. Verified creators are those that are ID or phone verified. |
minPriceInCents | int64 | Minimum cost in cents (only applicable to plugins) |
maxPriceInCents | int64 | Maximum cost in cents (only applicable to plugins) |
For more details regarding toolbox-service, please refer to the updated documentation below.
This is a sample response from the endpoint:
{
"totalResults": int,
"filteredKeyword": string,
"spellCheckerResult": {
"correctionState": int,
"correctedQuery": string,
"userQuery": string
},
"queryFacets": {
"appliedFacets": Array[string],
"availableFacets": Array[string]
},
"imageSearchStatus": int,
"previousPageCursor": string,
"nextPageCursor": string,
"data": [
{
"id": int,
"name": string,
"searchResultSource": string
}
]
}
To get back the asset metadata, you can go over the data array and extract the IDs with the GetItemDetails endpoint on toolbox-service like this:
GET https://apis.roblox.com/toolbox-service/v1/items/details?assetIds={assetId1}%2C{assetId2}
Response Fields
This is the response you should expect to get back from that endpoint:
{
"data": [
{
"asset": {
"audioDetails": {
"audioType": Array[int],
"artist": string,
"title": string,
"musicAlbum": string,
"musicGenre": string,
"soundEffectCategory": string,
"soundEffectSubcategory": string,
"tags": Array[string]
},
"id": int64,
"name": string,
"typeId": int,
"assetSubTypes": Array[string],
"assetGenres": Array[string],
"ageGuidelines":{
"ageGuideline: int,
"blood": {
"realism": int,
"level": int
},
"violence": {
"intensity": int
},
"profanity": {
"presence": int
},
"alcohol": {
"presence": int
},
"romance": {
"type": int
}
},
"isEndorsed": bool,
"description": string,
"duration": int,
"hasScripts": bool?,
"createdUtc": string($date-time),
"updatedUtc": string($date-time),
"creatingUniverseId": int64?,
"isAssetHashApproved": bool,
"visibilityStatus": int?,
"socialLinks": [{
"linkType": int,
"url": string,
"title": string
}]
},
"creator": {
"id": int64,
"name": string,
"type": int,
"isVerifiedCreator": bool,
"latestGroupUpdaterUserId": int64?,
"latestGroupUpdaterUserName": string
},
"voting": {
"showVotes": bool,
"upVotes": int64,
"downVotes": int64,
"canVote": bool,
"userVote": bool?,
"hasVoted": bool,
"voteCount": int64,
"upVotePercent": int
},
"product": {
"productId": int64,
"price": int64?,
"isForSaleOrIsPublicDomain": bool
},
"fiatProduct": {
"purchasePrice": {
"currencyCode": string,
"quantity": {
"significand": int64,
"exponent": int
}
},
"published": bool,
"purchasable": bool
}
}
]
}
Marketplace API
You can query avatar items from the Marketplace using the following URL: https://catalog.roblox.com/v1/search/items/details?[params]
You can replace [params] with the appropriate query parameters to customize your search.
Query Parameters
You can specify search parameters by appending a series of parameters and values to the URL, each separated by a &.
Use the following parameters to query the Marketplace:
Parameter | Type | Options and Values |
---|---|---|
Category | byte | 0 = Featured 1 = All 2 = Collectibles 3 = Clothing 4 = BodyParts 5 = Gear 11 = Accessories 12 = AvatarAnimations 13 = CommunityCreations |
CreatorType | byte | 1 = User 2 = Group |
CreatorName | string | Search by creator name. If Enum.CreatorType is not provided, search is for users only. |
CreatorTargetId | long | The user or group ID depending on the CreatorType provided. |
Cursor | string | Each search response contains a nextPageCursor if there is a next page and previousPageCursor if there is a previous page. Pass either of these values in the Cursor parameter of your next query to get the next or previous page of results. The cursor is valid if the other query parameters remain the same. |
Genres | byte | Specifies the genre for the search. The recommended approach to filtering on genres is to match the URL of a catalog page. 1 = TownAndCity 2 = Medieval 3 = SciFi 4 = Fighting 5 = Horror 6 = Naval 7 = Adventure 8 = Sports 9 = Comedy 10 = Western 11 = Military 13 = Building 14 = FPS 15 = RPG |
Keyword | string | Standard keyword search. |
Limit | int | Number of results to return. Values are currently limited to 10, 28, and 30. |
MaxPrice | int | The maximum price in Robux of items in the query. |
MinPrice | int | The minimum price in Robux of items in the query. |
SortAggregation | byte | 1 = PastDay 3 = PastWeek 4 = PastMonth 5 = AllTime |
SortType | byte | 0 = Relevance (Default) 1 = Favorited 2 = Sales 3 = Updated 4 = PriceAsc 5 = PriceDesc |
Subcategory | byte | 0 = Featured 1 = All 2 = Collectibles 3 = Clothing 4 = BodyParts 5 = Gear 9 = Hats 10 = Faces 12 = Shirts 13 = TShirts 14 = Pants 15 = Heads 19 = Accessories 20 = HairAccessories 21 = FaceAccessories 22 = NeckAccessories 23 = ShoulderAccessories 24 = FrontAccessories 25 = BackAccessories 26 = WaistAccessories 27 = AvatarAnimations 37 = Bundles 38 = AnimationBundles 39 = EmoteAnimations 40 = CommunityCreations 41 = Melee 42 = Ranged 43 = Explosive 44 = PowerUp 45 = Navigation 46 = Musical 47 = Social 48 = Building 49 = Transport 54 = HeadAccessories 55 = ClassicTShirts 56 = ClassicShirts 57 = ClassicPants 58 = TShirtAccessories 59 = ShirtAccessories 60 = PantsAccessories 61 = JacketAccessories 62 = SweaterAccessories 63 = ShortsAccessories 64 = ShoesBundles 65 = DressSkirtAccessories 66 = DynamicHeads |
The following URL will search for the first 10 "Gear" items in "Accessories" sorted by all-time ("SortAggregation") and relevance ("SortType") created by Roblox ("CreatorTargetId"):
https://catalog.roblox.com/v1/search/items/details?Category=11&Subcategory=5&CreatorTargetId=1&SortType=0&SortAggregation=5&Limit=10
Response Fields
API responses return in a JSON format. The response provides asset details in the data key using the following fields:
Field | Description |
---|---|
assetType | One of the following asset type values (only returned if the item is an asset). 2 = T-Shirt 8 = Hat 11 = Shirt 12 = Pants 17 = Head 18 = Face 19 = Gear 25 = Arms 26 = Legs 27 = Torso 28 = RightArm 29 = LeftArm 30 = LeftLeg 31 = RightLeg 41 = HairAccessory 42 = FaceAccessory 43 = NeckAccessory 44 = ShoulderAccessory 45 = FrontAccessory 46 = BackAccessory 47 = WaistAccessory 48 = ClimbAnimation 49 = DeathAnimation 50 = FallAnimation 51 = IdleAnimation 52 = JumpAnimation 53 = RunAnimation 54 = SwimAnimation 55 = WalkAnimation 56 = PoseAnimation 61 = EmoteAnimation |
bundleType | The bundle type ID (only returned if the item is a bundle). Possible values are BodyParts and AvatarAnimations. |
creatorName | The creator's name. |
creatorTargetId | The creator's ID. |
creatorType | The item's creator type. |
description | The item description. |
favoriteCount | The favorite count of an item. |
genres | List of the item's genres. Possible values include All, Tutorial, Scary, TownAndCity, War, Funny, Fantasy, Adventure, SciFi, Pirate, FPS, RPG, Sports, Ninja, and WildWest. |
id | The ID of the item. |
itemRestrictions | List of the item's restrictions. Possible values include ThirteenPlus, LimitedUnique, Limited, and Rthro. |
itemStatus | List of the item's status flags. Possible values include New, Sale, XboxExclusive, AmazonExclusive, GooglePlayExclusive, IosExclusive, and SaleTimer. |
itemType | The item type. Possible values are Asset or Bundle. |
lowestPrice | The lowest reseller price of the item (only returned if the item is resellable). |
name | The item name. |
price | The listing price of the item (current price may differ if the item is resellable). |
priceStatus | The price status of an item that is not on sale. Possible values are Free, OffSale, or NoResellers. |
purchaseCount | The purchase count of an item. |
unitsAvailableForConsumption | The unit available for consumption of a limited unique item. |
The following is an example of expected return output for a single item:
{
"keyword": null,
"previousPageCursor": null,
"nextPageCursor": "2_1_c541d05046b5c1c78a5d386b5e302243",
"data": [
{
"id":527373900,
"itemType":
"Asset",
"assetType":42,
"name":"Restless Souls Bandana",
"description":"This bandana won't help you blend in with ghosts, but at least you'll be stylish.",
"productId":41270974,
"genres":[
"Scary",
"Adventure"
],
"itemStatus":[],
"itemRestrictions":[],
"creatorType":"User",
"creatorTargetId":1,
"creatorName":"Roblox",
"price":300,
"favoriteCount":15943,
"offSaleDeadline":null
}
]
}