Dev Product has a null product ID, completely breaks the dev products page for our game

When going to the Monetization → Developer Products page for our game, the page says that I haven’t created any dev products yet. Refreshing the page, clearing browser cache, and going to the next page does not fix anything:

Since all I was trying to do was get the asset ID of the developer product I’m using, I ran the following code snippet in the command line while editing the production game:

local products = game.MarketplaceService:GetDeveloperProductsAsync()
repeat
    for _, entry in products:GetCurrentPage() do
        print(entry.ProductId, entry.displayName)
    end
    if products.IsFinished then
        break
    end
    products:AdvanceToNextPageAsync()
until false

This printed out a list of developer products. The last product in the list has a nil ProductID field.
image

It looks like a number of other fields are also missing from the payload returned by the GetDeveloperProductsAsync API.

Clicking on the “Next page” button on the website while intercepting XHR requests in the developer console shows an error 204 (No content) returned from the following URL:

https://apis.roblox.com/developer-products/v1/developer-products/49406153

The ID in this URL corresponds with the dev product ID for that “Purple/Golden Saddle” product I tried to create. This seems to break the entire dev product page, making it impossible for me to browse or edit the dev products for this game.

Compare this to the “Aquatic Saddlepad” which returns a 200 (Success) code and a payload:
https://apis.roblox.com/developer-products/v1/developer-products/49406147

{
    "id": 1781699560,
    "productTypeId": 4,
    "isPublicDomain": false,
    "isForSale": true,
    "priceInRobux": 99,
    "premiumPriceInRobux": null,
    "robloxProductId": null,
    "targetId": 49406147,
    "assetTypeId": null,
    "creatorId": 3556308349,
    "assetGenres": 1,
    "assetCategories": 0,
    "affiliateFeePercentage": null,
    "isNew": true,
    "created": "2024-03-20T20:54:46.6954978Z",
    "updated": "2024-03-20T20:54:47.992786Z"
}

Page URL: https://create.roblox.com/dashboard/creations/experiences/4595016786/monetization/developer-products

Edit: I should note, I also saw this error when I created this broken dev product in the first place, even though this is the first time I had created a product named “Purple/Golden Saddle”

1 Like

Thanks for the report! We’ll follow up when we have an update for you.

1 Like

Maybe an obscure thing but if anyone needs it, this is code I’ve been running to generate a CSV for putting dev products on sale if one of your products got corrupted:

local SALE = 0.25
print("Link, Original Price, Sale Price, Name")
local products = game.MarketplaceService:GetDeveloperProductsAsync()
repeat
    for _, entry in products:GetCurrentPage() do
        local salePrice = entry.PriceInRobux
        if not salePrice then
            continue
        end
        if math.floor(salePrice + 1) ~= math.floor(salePrice) then
            salePrice += 1
        end
        salePrice *= (1-SALE)
        salePrice = math.floor(salePrice)
        if string.sub(tostring(salePrice - 1), -1) == "9" then
            salePrice -= 1
        end
        print(`https://create.roblox.com/dashboard/creations/experiences/`
            .. `{game.GameId}/developer-products/{entry.ProductId}}/configure, `
            .. `{entry.PriceInRobux}, {salePrice}, {entry.displayName}`)
    end
    if products.IsFinished then
        break
    end
    products:AdvanceToNextPageAsync()
until false