[Action Needed] Sunsetting api.roblox.com

[Update] May 8, 2023


Hi developers,

In order to increase the reliability of our platform and improve scalability, we are migrating endpoints away from the monolithic api.roblox.com web API.

Beginning on July 15, 2022, we will start removing individual API endpoints from api.roblox.com. All endpoints are scheduled to be removed by the end of the year.

We recommend switching to newer endpoints on the apis.roblox.com or individual APIs (avatar.roblox.com, games.roblox.com, etc).

Please update any tools, browser plugins, or third-party sites that rely on api.roblox.com over to the newer endpoints listed below.

If you are having any issues with the new endpoints, reply to this post and we will be happy to provide answers.


FAQs

What is the exact date each API endpoint will be removed?

  • Individual endpoints will be removed one-by-one at some point between now and the end of the year. We don’t have an exact date for each one.

I am not a web developer, how can I tell if this impacts me?

  • This change only impacts developers who are making requests from third-party servers, browser plugins, or tools to api.roblox.com.
  • If you only develop inside of the Roblox game engine, you don’t need to make any changes.
  • Currently HttpService does not allow direct requests to *.roblox.com. Some developers use proxy web servers to get around this limitation. If you use one of these proxy servers, you may be affected.

The new recommended endpoint doesn’t solve my use case, what can I do?

  • Please reply to this post and we will do our best to assist you.

The new recommended endpoint is rate limiting me with a 429 Status Code (Too Many Requests)

  • Different endpoints may have different rate limits applied. Reply with information about your use case and how frequently you are hitting the endpoint, and we will try to help you.

Is there a better way to notify people who are still using API endpoints?

  • As part of the Open Cloud initiative, we are allowing consumers to identify themselves using API keys. In the future, this will allow us to notify impacted developers before we sunset any API endpoints.

What is apis.roblox.com and how is it different from api.roblox.com?

  • apis.roblox.com is Roblox’s API Gateway and is responsible for routing traffic to services containing our API endpoints. Long-term we plan to move most of our endpoints to apis.roblox.com.
  • api.roblox.com is a single monolithic site that handles traffic directly. The lack of routing has lead to an increasing number of scalability and reliability issues over time.

How can I view the documentation for endpoints on apis.roblox.com?

  • As part of the Open Cloud initiative, we plan to create a unified documentation system for our web API endpoints. For now, you can visit Open Cloud to view some of the endpoints.

Endpoints

This section is a list of all the public api.roblox.com endpoints, and the replacement endpoints that we recommend switching over to. The new endpoints have different request and response formats, so we recommend reading the documentation.

Users

GET /users/account-info

→ https://users.roblox.com/docs#!/Users/get_v1_users_authenticated for user info

→ https://accountsettings.roblox.com/docs#!/Email/get_v1_email for email info

→ https://economy.roblox.com/docs#!/Currency/get_v1_user_currency for Robux balance

→ https://locale.roblox.com/docs#!/Locale/get_v1_locales_user_locale for locale info

GET /users/{userId}

→ https://users.roblox.com/docs#!/Users/get_v1_users_userId for user info

→ https://thumbnails.roblox.com/docs#!/Avatar/get_v1_users_avatar for thumbnail

GET /users/get-by-username

→ https://users.roblox.com/docs#!/Users/post_v1_usernames_users

Blocking

GET /userblock/getblockedusers

→ https://accountsettings.roblox.com/docs#!/BlockUser/get_v1_users_get_blocked_users

POST /userblock/block

→ https://accountsettings.roblox.com/docs#!/BlockUser/post_v1_users_userId_block

POST /userblock/unblock

→ https://accountsettings.roblox.com/docs#!/BlockUser/post_v1_users_userId_unblock

Marketplace

GET /marketplace/productinfo

→ https://economy.roblox.com/v2/developer-products/{assetID}/info

GET /marketplace/game-pass-product-info

→ https://apis.roblox.com/game-passes/v1/game-passes/{passId}/product-info

GET /marketplace/productdetails

→ https://economy.roblox.com/v2/developer-products/{productId}/details

GET /developerproducts/list

→ https://develop.roblox.com/docs#!/DeveloperProducts/get_v1_universes_universeId_developerproducts

GET /currency/balance

→ https://economy.roblox.com/docs#!/Currency/get_v1_user_currency

GET /my/balance

→ https://economy.roblox.com/docs#!/Currency/get_v1_user_currency

Universes

GET /universes/get-info

→ https://games.roblox.com/docs#!/Games/get_v1_games

GET /universes/get-universe-containing-place

→ ~~https://games.roblox.com/docs#!/Games/get_v1_games_multiget_place_details~~
→ https://apis.roblox.com/universes/v1/places/{placeId}/universe

POST /universes/create

→ POST https://apis.roblox.com/universes/v1/universes/create

Details

  • Creates a new universe with a base place built from a template.
  • Query string parameters:
    • (Optional) groupId: If specified, the created universe will belong to the specified group. This assumes there are correct permissions to act for the specified group.
  • JSON Body:
    • (Required) templatePlaceIdToUse: The place id of the template place to be used as the root place of the created universe.

GET /universes/{universeId}/listcloudeditors

→ https://develop.roblox.com/docs#!/TeamCreate/get_v1_universes_universeId_teamcreate_memberships

GET /universes/get-universe-places

→ https://develop.roblox.com/docs#!/Universes/get_v1_universes_universeId_places

Assets

GET /ownership/hasasset

→ https://inventory.roblox.com/docs#!/Inventory/get_v1_users_userId_items_itemType_itemTargetId_is_owned

GET /users/{userId}/canmanage/{assetId}

→ https://develop.roblox.com/docs#!/User/get_v1_user_userId_canmanage_assetId

GET /assets/{id}/versions

→ https://develop.roblox.com/docs#!/Assets/get_v2_assets_id_versions

GET /v2/assets/{id}/versions

→ https://develop.roblox.com/docs#!/Assets/get_v2_assets_id_versions

Miscellaneous

GET /users/{userId}/onlinestatus - (EOL 1/31/23)

→ https://presence.roblox.com/docs#!/Presence/post_v1_presence_users

→ Use https://presence.roblox.com/v1/presence/last-online for getting the last online date. See the docs page for more details.

GET /users/{userId}/friends - (EOL 11/17)

→ https://friends.roblox.com/docs#!/Friends/get_v1_users_userId_friends

GET /groups/{groupId}

→ https://groups.roblox.com/docs#!/Groups/get_v1_groups_groupId

GET /incoming-items/counts

→ https://friends.roblox.com/docs#!/Friends/get_v1_user_friend_requests_count for friend request count

→ https://privatemessages.roblox.com/docs#!/Messages/get_v1_messages_unread_count for unread message count

GET /user/get-vote-count

162 Likes

This topic was automatically opened after 15 minutes.

If you’re sunsetting /users/{userId}/onlinestatus you’re going to need to fix the presence API’s last online date currently it returns 10+ years for people last online a few hours ago

Related bug reports:

58 Likes

Is there a general timeframe as to when the unreplaced endpoints will get their replacements? There are some pretty important ones in there (e.g. ProductInfo). There are also a lot of endpoints not mentioned in the OP. Will those get replacements?

13 Likes

If it improves the reliability that much to sunset such a major thing, it better stop Roblox going down every damn few days. I’d take that trade off.

Can you provide at least some form of basic timetable? Even a per-month basis will be enough.

Is this wording meant to be like this? apis.roblox.com == apis.roblox.com. I don’t see why you’d move endpoints there if you’re sunsetting it.

I just hope that this will finally be the necessary action to many of Roblox’s server reliability issues. That’d be a great trade off. If so, next stop is to finally stop server DDoS attacks.

10 Likes

Glad to see another legacy remnant of the site being sunsetted if it benefits Roblox in the long run. :pray:

As the others have mentioned though, some transparency/an estimated timeframe (if possible) for when the replacements of said decomissioned API endpoints will be ready would be nice so people relying on these endpoints know what to expect.

5 Likes

The new endpoint listed isn’t actually publicly documented yet, but regardless the endpoint still doesn’t return the productId necessary to update or fetch more data on a developer product. (see LegacyApi vs DevelopApi )

DevelopApi response:

[{"id":12973870,"name":"A","Description":null,"shopId":3564373403,"iconImageAssetId":null}]

id here is developerProductId

LegacyApi response:

{"DeveloperProducts":[{"ProductId":1265158464,"DeveloperProductId":12973870,"Name":"A","Description":null,"IconImageAssetId":null,"displayName":"A","displayDescription":null,"displayIcon":null,"PriceInRobux":null}],"FinalPage":true,"PageSize":50}
10 Likes

For APIs such as POST /universes/create, will they be removed before the new endpoint is added?

It would make sense that they wait, and give appropriate time to switch over, but I wanted to make sure.


On another note, is there a reason there’s so many subdomains for Roblox’s API? If it internally routes to apis.roblox.com, why do we have so much subdomains such as games, users, presense, etc.? Why can’t those just be apis.roblox.com/games, apis.roblox.com/users, apis.roblox.com/presense?

3 Likes

I think what they mean is that they where planning to move all the endpoints to “apis.roblox.com” but due to the issues they have just decided to not move everything over. Unless I miss read the post.

3 Likes

Sad to see the api.roblox.com go but if it was causing issues I guess this update will be good.

I really wanna see more api’s put on the open cloud cuz it is a pain in the ass using cookies and with the recent update where cookies will get invalidated on a different region is also annoying.

3 Likes

api and apis are separate.

1 Like

How would you be able to remove an IP if you don’t know what you’re removing then? :face_with_raised_eyebrow:

3 Likes

They could blur them and add a button to unblur them if you wanna view the IP

I think he or she is implicating the idea that there should be a streamer mode or something?

1 Like

I hope they aren’t sunsetting the onlinestatus.
I use it a lot on discord :confused:
And the presence API is just broken, it’s been broken for years…

2 Likes

it should only show part of the ip, realistically you wouldnt have that many to begin with

also does it email you if a change is made to the api key/a new one is added?

They don’t internally route to ApiGateway. *.roblox.com API services (excluding apis, ecsv2), known as BEDEV1 services, use internal *.api.roblox.com endpoints. apis.roblox.com, ecsv2.roblox.com on the other hand, route to BEDEV2 services, part of a newer micro-service architecture. This blog post also has a brief mention of BEDEV2.

1 Like

Why are HttpService requests to *.roblox.com blocked anyways?

1 Like

Good riddance, I remember when api.roblox.com was introduced it was so cool. Glad you guys are actively expanding this!

It would be very unfortunate if this end point was not ready by July 15th. I still use it in my catalog scraper (which is responsible for updating the available catalog in Robloxian High School), and having no alternative will mean it will be non-functional.

4 Likes

So they don’t get DDoS’d by their own servers.