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:
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
- POST /v1/universes/{universeId}/developerproducts returns id that isn’t productId
- POST /v1/universes/{universeId}/developerproducts/{productId}/update overwrites existing developer product data despite fields being noted as optional
- No GET endpoint offered for developer products limiting the endpoint above.