Inconsistent behavior on the Develop API's developer product endpoints

As of late, Roblox has been continuing to deprecate legacy endpoints and shifting developers towards API endpoints like that of develop.roblox.com. Though many endpoints are functional, some like the Developer Product-related endpoints are limited and inconsistent in their behavior. As of right now, I can only locate two endpoints related to Developer Products: one to create and another to update.

Issues

‘Incorrect’ ID returned from create product endpoint

Per the endpoint to create a developer product, a product is created and the following response is returned:

image

However, when I take a look at the Roblox website, I find that the Developer Product that was just created doesn’t have the same ID listed. Its ID turns out to be 1087453705. The response model implies that the ID returned would be that of the developer product but it’s not.

Update endpoint overwrites existing data

Moving on to the update endpoint for developer products, there are more inconsistencies. For starters, if a user used the ID returned from the create developer product endpoint, it would error and tell you that the ID is either invalid or the product is managed by someone else. If you do pass the actual product ID, the endpoint executes and data is updated. What this fails to do, however, is update the developer product. Instead, it overwrites existing data. If you pass just a Name to the payload, the product’s description, icon, and price are cleared. The request payload model reflects that all fields are optional and that it implies it would update a single field. As it turns out, the fields aren’t necessarily optional.

One might argue this is a POST endpoint and not a PATCH endpoint. That is true but Roblox fails to provide a GET endpoint to get existing information about the developer product so it’s up to the user to copy and paste everything from the developer product’s page into their payload and update whatever they want to update. It would just be easier to go to the developer product page and just update the single field but this would make the endpoint obsolete.

Summary

8 Likes

In regards to the whole endpoint removals, I see no reason at all for removing the always-constant API of roblox.com/asset?id=, which has been in use as long as Roblox has had APIs. I wouldn’t even mind if they just redirected it to the new asset endpoint with the parameters attached, so long as it maintained backwards compatibility - there are simply too many resources on and off Roblox which rely on the legacy asset endpoint, and the removal of it has simply caused too much damage. Nobody was warned of this being removed.

I’m not sure what you’re trying to say here. Do note that trying that asset link with the aforementioned ID does not take you to a page where you can find the developer product.

The behaviour of these endpoints needs to be corrected to address these issues raised. The ones we’re currently being forced to use provide inadequate functionality for any external use; the success has to be inferred by parsing the HTML and the error handling is terrible.

I can’t make any sense of the returned product ID from the new create product endpoint, it’s always entirely wrong with no way (as far as I can tell) to deduce the actual product ID. I also see no reason why null fields should be overwritten when updating developer products.

2 Likes

As I currently develop unit tests for noblox.js, I’m now seeing that even the legacy API endpoint (https://www.roblox.com/places/developerproducts/update) uses the new obscure developer product ID. The Develop API docs page only shows two endpoints for manipulating developer products. Is there a way for users to determine the productId given an ID? There are two systems here to manage IDs at play here and neither of them can be identified properly.

1 Like

The most reliable practice is most likely just to use an undocumented endpoint: https://api.roblox.com/developerproducts/list?universeId={universeId}&page={page}. Iterate through every page until FinalPage is true, or it finds the matching developerProductId. The endpoint is currently used by Studio’s monetization tab in game settings and GetDeveloperProductsAsync.

2 Likes

This issue is still persisting and doesn’t seem to have garnered any view from roblox.

This is still a problem but now it’s even worse since they are sunsetting api.roblox.com which in this case was the only api we could use (https://api.roblox.com/developerproducts/list?universeId=2183011280&page=1)