Skip to content

AntiBoomz/BTRoblox

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Available in the Chrome Web Store   Get the add-on from the Firefox Add-ons store

BTRoblox

BTRoblox, or Better Roblox, is an extension that aims to enhance Roblox website's look and functionality by adding a plethora of new features and modifying the layout of some existing pages.

Links

API Docs

Domain Description
accountinformation.roblox.com All endpoints for accessing/modifying account information
accountsettings.roblox.com All endpoints for account/user settings.
adconfiguration.roblox.com Roblox Ad Configuration related endpoints.
ads.roblox.com Ads configuration endpoints.
assetdelivery.roblox.com Serves asset content.
auth.roblox.com All endpoints that tamper with authentication sessions.
avatar.roblox.com Endpoints relating to the customization of player avatars.
badges.roblox.com Endpoints for badges and badge awards management.
billing.roblox.com Real money transactions and interaction.
catalog.roblox.com Catalog items browsing and searching. Content and user based catalog items recommendations.
chat.roblox.com All chat and party related endpoints.
chatmoderation.roblox.com
clientsettings.roblox.com Used by various Roblox clients to retrieve configuration information.
clientsettingscdn.roblox.com Used by various Roblox clients to retrieve configuration information.
contacts.roblox.com Contacts and userTag management.
contentstore.roblox.com ApiSite to front the TemporaryStore for files before uploading to S3
develop.roblox.com Game development configuration endpoints.
economy.roblox.com Endpoints related to transactions and currency.
economycreatorstats.roblox.com Roblox.EconomyCreatorStats.Api endpoints.
engagementpayouts.roblox.com For engagement-based payout information
followings.roblox.com Establishes follow relationship between subscriber entities (users, groups, etc) and source entities (games, groups, assets, etc.)
friends.roblox.com Friends and followers management.
gameinternationalization.roblox.com Manages internationalization of games such as translating in game content.
gamejoin.roblox.com All endpoints around launching a game.
gamepersistence.roblox.com Endpoints for the in-game datastore system for storing data for games.
games.roblox.com All endpoints for game discovery, and details.
groups.roblox.com Groups management.
groupsmoderation.roblox.com Group Moderation
inventory.roblox.com All endpoints for viewing (but not granting) ownership of items.
itemconfiguration.roblox.com Configure Items (bundles and avatar assets).
locale.roblox.com User locale management.
localizationtables.roblox.com Handles managing of localization tables.
metrics.roblox.com Record metrics across Roblox.
notifications.roblox.com All notification stream endpoints.
premiumfeatures.roblox.com This API is for premium features and anything pertaining to account add ons
presence.roblox.com All endpoints for managing presence.
privatemessages.roblox.com All messages page endpoints.
publish.roblox.com All endpoints handling file uploads.
thumbnails.roblox.com Endpoints for requesting thumbnails.
thumbnailsresizer.roblox.com Validate and resize thumbnails to requested dimensions
trades.roblox.com Endpoints for trading collectible items.
translationroles.roblox.com Manages translation roles of developers in game localization.
twostepverification.roblox.com Platform interface for the two step verification system.
users.roblox.com For direct Roblox user information.
voice.roblox.com APIs for Voice calls.

Undocumented APIs

roblox://

Join a roblox place

  • roblox://experiences/start?id=1818
  • roblox://placeId=1818/
    • supported params: placeId (or just id), gameInstanceId, accessCode, linkCode, launchData, reservedServerAccessCode, joinAttemptId, joinAttemptOrigin, callId and browserTrackerId. (credit to bloxstrap for this information)

roblox-studio://

Open place in studio

  • roblox-studio:1+launchmode:edit+task:EditPlace+placeId:1818+universeId:13058

apis.roblox.com/player-hydration-service

apis.roblox.com/content-aliases-api

Configure aliases

apis.roblox.com/creator-marketplace-purchasing-service

Purchase asset (note: url uses product id, not asset id)

apis.roblox.com/game-passes

Get gamepass product info

Get gamepass details

Get universeId from place

apis.roblox.com/asset-permissions-api

Check if user (or group) has edit access

POST https://apis.roblox.com/asset-permissions-api/v1/assets/check-permissions
content-type: application/json

{
    "requests": [
        {
            "subject": {
                "subjectType": "User" | "Group",
                "subjectId": "{userId}" | "{groupId}"
            },
            "action": "Edit",
            "assetId": {assetId}
        }
    ]
}

200 OK
content-type: application/json

{
    "results": [
        { "value": { "status": "NoPermission" | "HasPermission" } }
    ]
}

apis.roblox.com/explore-api

Game sorts

apis.roblox.com/search-api

Game search

apis.roblox.com/platform-chat-api

Platform chat

apis.roblox.com/showcases-api

Get player's showcased assets

develop.roblox.com

Get saved versions of an asset

Get published versions of an asset

Multi-get asset details

Archive asset

economy.roblox.com

Get asset details

gamepersistence.roblox.com

DataStore methods

  • These examples use this place with placeId of 1076067099 and universeId of 446315170

ListDataStoresAsync("T", 1, "cursor")

GetDataStore("Test"):GetAsync("hi")

  • GET https://gamepersistence.roblox.com/v2/persistence/446315170/datastores/objects/object?datastore=Test&objectKey=global%2Fhi
    Roblox-Place-Id: 1076067099
    
    // If key exists
    200 OK
    content-type: application/octet-stream
    content-md5: VQNh2cu4sdBAMRrdwrY35w==
    etag: "08DCC2CA74D3E243.0000000007.08DCC2CBF140D0DC.01"
    roblox-object-version-id: 08DCC2CA74D3E243.0000000007.08DCC2CBF140D0DC.01
    roblox-object-created-time: 2024-08-22T16:49:57.8993219Z
    roblox-object-version-created-time: 2024-08-22T17:00:36.1474268Z
    roblox-object-attributes: {"key1":"value1","key2":"value2"}
    roblox-object-userids: [1,2,3]
    
    "ho"
    
    // If key doesn't exist
    404 Not Found
    content-type: application/json
    
    {"errors":[{"code":11,"message":"The requested key does not exist.","retryable":false}]}
    

GetDataStore("Test"):GetVersionAsync("hi", "08DCC2CA74D3E243.0000000007.08DCC2CBF140D0DC.01")

  • GET https://gamepersistence.roblox.com/v2/persistence/446315170/datastores/objects/object?datastore=Test&objectKey=global%2Fhi&version=08DCC2CA74D3E243.0000000007.08DCC2CBF140D0DC.01
    Roblox-Place-Id: 1076067099
    
    // If version exists
    200 OK
    content-type: application/octet-stream
    content-md5: VQNh2cu4sdBAMRrdwrY35w==
    etag: "08DCC2CA74D3E243.0000000007.08DCC2CBF140D0DC.01"
    roblox-object-version-id: 08DCC2CA74D3E243.0000000007.08DCC2CBF140D0DC.01
    roblox-object-created-time: 2024-08-22T16:49:57.8993219Z
    roblox-object-version-created-time: 2024-08-22T17:00:36.1474268Z
    roblox-object-attributes: {"key1":"value1","key2":"value2"}
    roblox-object-userids: [1,2,3]
    
    "ho"
    
    // If version doesn't exist but key does
    204 No Content
    content-type: application/octet-stream
    content-md5: VQNh2cu4sdBAMRrdwrY35w==
    etag: "08DCC2CA74D3E243.0000000007.08DCC2CBF140D0DC.01"
    roblox-object-version-id: 08DCC2CA74D3E243.0000000007.08DCC2CBF140D0DC.01
    roblox-object-created-time: 2024-08-22T16:49:57.8993219Z
    roblox-object-version-created-time: 2024-08-22T17:00:36.1474268Z
    roblox-object-attributes: {"key1":"value1","key2":"value2"}
    roblox-object-userids: [1,2,3]
    
    <no data>
    
    // If key doesn't exist
    404 Not Found
    content-type: application/json
    
    {"errors":[{"code":11,"message":"The requested key does not exist.","retryable":false}]}
    

GetDataStore("Test"):SetAsync("hi", "ho", {1, 2, 3}, DataStoreSetOptions({ key1 = "value1", key2 = "value2" }))

GetDataStore("Test"):UpdateAsync("hi", function() return "ho", {1, 2, 3}, DataStoreSetOptions({ key1 = "value1", key2 = "value2" }) end)

  • Implemented using GetAsync and SetAsync with If-Match header
    // First it gets current data
    GET https://gamepersistence.roblox.com/v2/persistence/446315170/datastores/objects/object?datastore=Test&objectKey=global%2Fhi
    Roblox-Place-Id: 1076067099
    
    200 OK
    content-type: application/octet-stream
    content-md5: VQNh2cu4sdBAMRrdwrY35w==
    etag: "08DCC2CA74D3E243.0000000007.08DCC2CBF140D0DC.01"
    roblox-object-version-id: 08DCC2CA74D3E243.0000000007.08DCC2CBF140D0DC.01
    roblox-object-created-time: 2024-08-22T16:49:57.8993219Z
    roblox-object-version-created-time: 2024-08-22T17:00:36.1474268Z
    roblox-object-attributes: {"key1":"value1","key2":"value2"}
    roblox-object-userids: [1,2,3]
    
    "ho"
    
    // Then it tries to set it to new value (note If-Match header which matches etag returned by GetAsync)
    POST https://gamepersistence.roblox.com/v2/persistence/446315170/datastores/objects/object?datastore=Test&objectKey=global%2Fhi
    Content-Type: application/octet-stream
    If-Match: "08DCC2CA74D3E243.0000000007.08DCC2CBF140D0DC.01"
    Content-MD5: uax0tCReVutN8x1hJ+LNDQ==
    Roblox-Place-Id: 1076067099
    Roblox-Object-Userids: [1,2,3]
    Roblox-Object-Attributes: {"key1":"value1","key2":"value2"}
    
    "hy"
    
    // If it succeeds
    200 OK
    content-type: application/json
    
    {"version":"08DCC2CE8B549D47.0000000003.08DCC2CEED7D4991.01","deleted":false,"contentLength":4,"createdTime":"2024-08-22T17:21:58.3230353Z","objectCreatedTime":"2024-08-22T17:19:13.6397639Z"}
    
    // If it fails (data does not match If-Match), return new data and repeat setasync
    412 Precondition Failed
    content-type: application/octet-stream
    content-md5: uax0tCReVutN8x1hJ+LNDQ==
    etag: "08DCC2CA74D3E243.0000000007.08DCC2CBF140D0DC.01"
    roblox-object-version-id: 08DCC2CA74D3E243.0000000007.08DCC2CBF140D0DC.01
    roblox-object-created-time: 2024-08-22T16:49:57.8993219Z
    roblox-object-version-created-time: 2024-08-22T17:00:36.1474268Z
    roblox-object-attributes: {"key1":"value1","key2":"value2"}
    roblox-object-userids: [1,2,3]
    
    "hy"
    

GetDataStore("Test"):RemoveAsync("hi")

  • DELETE https://gamepersistence.roblox.com/v2/persistence/446315170/datastores/objects/object?datastore=Test&objectKey=global%2Fhi
    Content-Type: application/octet-stream
    Roblox-Place-Id: 1076067099
    
    <no body>
    
    // If key exists
    200 OK
    content-type: application/octet-stream
    content-md5: VQNh2cu4sdBAMRrdwrY35w==
    etag: "08DCC2CA74D3E243.0000000007.08DCC2CBF140D0DC.01"
    roblox-object-version-id: 08DCC2CA74D3E243.0000000007.08DCC2CBF140D0DC.01
    roblox-object-created-time: 2024-08-22T16:49:57.8993219Z
    roblox-object-version-created-time: 2024-08-22T17:00:36.1474268Z
    roblox-object-attributes: {"key1":"value1","key2":"value2"}
    roblox-object-userids: [1,2,3]
    
    "ho"
    
    // If key doesn't exist
    404 Not Found
    content-type: application/json
    
    {"errors":[{"code":11,"message":"The requested key does not exist.","retryable":false}]}
    

GetDataStore("Test"):RemoveVersionAsync("hi", "08DCC2CA74D3E243.0000000007.08DCC2CBF140D0DC.01")

  • DELETE https://gamepersistence.roblox.com/v2/persistence/446315170/datastores/objects/object?datastore=Test&objectKey=global%2Fhi&version=08DCC2CA74D3E243.0000000007.08DCC2CBF140D0DC.01
    Content-Type: application/octet-stream
    Roblox-Place-Id: 1076067099
    
    <no body>
    
    // If version exists
    200 OK
    content-type: application/octet-stream
    content-md5: VQNh2cu4sdBAMRrdwrY35w==
    etag: "08DCC2CA74D3E243.0000000007.08DCC2CBF140D0DC.01"
    roblox-object-version-id: 08DCC2CA74D3E243.0000000007.08DCC2CBF140D0DC.01
    roblox-object-created-time: 2024-08-22T16:49:57.8993219Z
    roblox-object-version-created-time: 2024-08-22T17:00:36.1474268Z
    roblox-object-attributes: {"key1":"value1","key2":"value2"}
    roblox-object-userids: [1,2,3]
    
    "ho"
    
    // If version doesn't exist
    404 Not Found
    content-type: application/json
    
    {"errors":[{"code":12,"message":"The requested object version does not exist.","retryable":false}]}
    

GetDataStore("Test"):IncrementAsync("hi", 1, {1, 2, 3}, DataStoreSetOptions({ key1 = "value1", key2 = "value2" }))

  • POST https://gamepersistence.roblox.com/v2/persistence/446315170/datastores/objects/object/increment?datastore=Test&objectKey=global%2Fhi&incrementBy=1
    Content-Type: application/octet-stream
    Roblox-Place-Id: 1076067099
    Roblox-Object-Userids: [1,2,3]
    Roblox-Object-Attributes: {"key1":"value1","key2":"value2"}
    
    <no body>
    
    // If it succeeds
    200 OK
    content-type: application/octet-stream
    content-md5: xMpCOKC5I4INzFCab3WEmw==
    etag: "08DCC2D1D7C3A452.0000000001.08DCC2D1D7C3A452.01"
    roblox-object-version-id: 08DCC2D1D7C3A452.0000000001.08DCC2D1D7C3A452.01
    roblox-object-created-time: 2024-08-22T17:42:50.3644242Z
    roblox-object-version-created-time: 2024-08-22T17:42:50.3644242Z
    roblox-object-attributes: {"key1":"value1","key2":"value2"}
    roblox-object-userids: [1,2,3]
    
    1
    
    // If existing data is not numeric
    400 Bad Request
    content-type: application/json
    
    {"errors":[{"code":24,"message":"Key value is not numeric.","retryable":false}]}
    

GetDataStore("Test"):ListKeysAsync("hi", 1, "cursor", true)

GetDataStore("Test"):ListVersionsAsync("hi", Enum.SortDirection.Ascending, 1, 1724340243000, 1)

GetOrderedDataStore("Test"):GetAsync("hi")

GetOrderedDataStore("Test"):SetAsync("hi", 123)

GetOrderedDataStore("Test"):RemoveAsync("hi")

GetOrderedDataStore("Test"):IncrementAsync("hi", 1)

GetOrderedDataStore("Test"):GetSortedAsync(true, 1, 1, 100)

www.roblox.com

Get info about currently logged in user

Get place details

Get place settings (requires edit access)

Get collections of an user

Get games on an user's profile

Get favorites of an user

Delete asset from inventory