The Catalog API provides access to the Roblox marketplace, allowing you to search items, fetch bundle information, and manage favorites.
Importing endpoints
Import the endpoints you need from the catalog module:
import { getBundlesBundleidDetails, getCategories, postCatalogItemsDetails } from 'rozod/endpoints/catalogv1';
import { fetchApi } from 'rozod';
Get bundle details
Fetch detailed information about a bundle.
const bundle = await fetchApi(getBundlesBundleidDetails, {
bundleId: 123,
});
if (!isAnyErrorResponse(bundle)) {
console.log(`${bundle.name} - ${bundle.description}`);
console.log(`Type: ${bundle.bundleType}`);
console.log(`Price: ${bundle.product.priceInRobux} Robux`);
bundle.items.forEach((item) => {
console.log(`- ${item.name} (${item.type})`);
});
}
Get multiple bundle details
Fetch information for multiple bundles at once.
import { getBundlesDetails } from 'rozod/endpoints/catalogv1';
const bundles = await fetchApi(getBundlesDetails, {
bundleIds: [123, 456, 789],
});
if (!isAnyErrorResponse(bundles)) {
bundles.forEach((bundle) => {
console.log(`${bundle.name}: ${bundle.product.priceInRobux} Robux`);
});
}
You can request up to 120 bundles at once using getBundlesDetails.
Get catalog items
Retrieve detailed information about catalog items and bundles.
const items = await fetchApi(postCatalogItemsDetails, {
body: {
items: [
{ itemType: 1, id: 1028595 }, // Asset
{ itemType: 2, id: 192 }, // Bundle
],
},
});
if (!isAnyErrorResponse(items)) {
items.data.forEach((item) => {
console.log(`${item.name} - ${item.price} Robux`);
console.log(`Creator: ${item.creatorName}`);
console.log(`Favorites: ${item.favoriteCount}`);
});
}
Browse catalog categories
Get all available catalog categories.
const categories = await fetchApi(getCategories, undefined);
if (!isAnyErrorResponse(categories)) {
categories.forEach((category) => {
console.log(`${category.name} (ID: ${category.categoryId})`);
category.subcategories.forEach((sub) => {
console.log(` - ${sub.name}`);
});
});
}
Favorites
Get favorite count for asset
import { getFavoritesAssetsAssetidCount } from 'rozod/endpoints/catalogv1';
const count = await fetchApi(getFavoritesAssetsAssetidCount, {
assetId: 1028595,
});
if (!isAnyErrorResponse(count)) {
console.log(`Favorites: ${count}`);
}
Favorite an asset
import { postFavoritesUsersUseridAssetsAssetidFavorite } from 'rozod/endpoints/catalogv1';
const result = await fetchApi(postFavoritesUsersUseridAssetsAssetidFavorite, {
userId: 1234567890,
assetId: 1028595,
});
if (!isAnyErrorResponse(result)) {
console.log('Asset favorited');
}
Unfavorite an asset
import { deleteFavoritesUsersUseridAssetsAssetidFavorite } from 'rozod/endpoints/catalogv1';
const result = await fetchApi(deleteFavoritesUsersUseridAssetsAssetidFavorite, {
userId: 1234567890,
assetId: 1028595,
});
if (!isAnyErrorResponse(result)) {
console.log('Asset unfavorited');
}
You can only favorite/unfavorite items for the authenticated user. The userId must match your authenticated account.
Get user favorites
Retrieve a user’s favorited items by asset type.
import { getFavoritesUsersUseridFavoritesAssettypeidAssets } from 'rozod/endpoints/catalogv1';
const favorites = await fetchApi(getFavoritesUsersUseridFavoritesAssettypeidAssets, {
userId: 1234567890,
assetTypeId: 8, // Hat
limit: 25,
sortOrder: 'Desc',
});
if (!isAnyErrorResponse(favorites)) {
favorites.data.forEach((item) => {
console.log(`${item.name} by ${item.creatorName}`);
});
}
Get bundle recommendations
Get recommended bundles based on a bundle ID.
import { getBundlesBundleidRecommendations } from 'rozod/endpoints/catalogv1';
const recommendations = await fetchApi(getBundlesBundleidRecommendations, {
bundleId: 123,
numItems: 10,
});
if (!isAnyErrorResponse(recommendations)) {
recommendations.data.forEach((bundle) => {
console.log(`${bundle.name} - ${bundle.product.priceInRobux} Robux`);
});
}
Get bundles for asset
Find which bundles contain a specific asset.
import { getAssetsAssetidBundles } from 'rozod/endpoints/catalogv1';
const bundles = await fetchApi(getAssetsAssetidBundles, {
assetId: 1028595,
limit: 10,
});
if (!isAnyErrorResponse(bundles)) {
bundles.data.forEach((bundle) => {
console.log(`${bundle.name} includes this asset`);
});
}
Get owned bundles
Retrieve bundles owned by a user.
import { getUsersUseridBundles } from 'rozod/endpoints/catalogv1';
const ownedBundles = await fetchApi(getUsersUseridBundles, {
userId: 1234567890,
limit: 25,
sortOrder: 2, // 1 = Asc, 2 = Desc
});
if (!isAnyErrorResponse(ownedBundles)) {
ownedBundles.data.forEach((bundle) => {
console.log(`${bundle.name} (${bundle.bundleType})`);
});
}
Bundle favorites
Get favorite bundles
import { getFavoritesUsersUseridFavoritesSubtypeidBundles } from 'rozod/endpoints/catalogv1';
const favBundles = await fetchApi(getFavoritesUsersUseridFavoritesSubtypeidBundles, {
userId: 1234567890,
subtypeId: 1, // Bundle type filter
itemsPerPage: 24,
});
if (!isAnyErrorResponse(favBundles)) {
favBundles.favorites.forEach((bundle) => {
console.log(`${bundle.name}`);
});
}
Favorite a bundle
import { postFavoritesUsersUseridBundlesBundleidFavorite } from 'rozod/endpoints/catalogv1';
const result = await fetchApi(postFavoritesUsersUseridBundlesBundleidFavorite, {
userId: 1234567890,
bundleId: 123,
});
if (!isAnyErrorResponse(result)) {
console.log('Bundle favorited');
}
Common patterns
Batch item lookups
Use postCatalogItemsDetails to efficiently fetch multiple items:
const items = await fetchApi(postCatalogItemsDetails, {
body: {
items: [
{ itemType: 1, id: 123 },
{ itemType: 1, id: 456 },
{ itemType: 2, id: 789 },
],
},
});
Check if item is on sale
const items = await fetchApi(postCatalogItemsDetails, {
body: { items: [{ itemType: 1, id: 1028595 }] },
});
if (!isAnyErrorResponse(items) && items.data.length > 0) {
const item = items.data[0];
console.log(`On sale: ${!item.isOffSale}`);
console.log(`Price: ${item.price} Robux`);
}
Get Limited/Limited U items
Check collectible status and availability:
const items = await fetchApi(postCatalogItemsDetails, {
body: { items: [{ itemType: 1, id: 1028595 }] },
});
if (!isAnyErrorResponse(items) && items.data.length > 0) {
const item = items.data[0];
if (item.collectibleItemId) {
console.log('This is a Limited/Limited U item');
console.log(`Total quantity: ${item.totalQuantity}`);
console.log(`Available: ${item.unitsAvailableForConsumption}`);
console.log(`Lowest price: ${item.lowestPrice} Robux`);
}
}
Available endpoints
All endpoints are exported from rozod/endpoints/catalogv1:
getBundlesBundleidDetails - Get bundle details
getBundlesDetails - Get multiple bundles
postCatalogItemsDetails - Get item details
getCategories - Get catalog categories
getFavoritesAssetsAssetidCount - Get favorite count
postFavoritesUsersUseridAssetsAssetidFavorite - Favorite asset
deleteFavoritesUsersUseridAssetsAssetidFavorite - Unfavorite asset
getFavoritesUsersUseridFavoritesAssettypeidAssets - Get user favorites
getBundlesBundleidRecommendations - Get bundle recommendations
getUsersUseridBundles - Get owned bundles
- And more…
For the complete list, refer to the TypeScript types in your IDE.