Roblox API Sites
Github Repo:
Site | Description |
---|---|
accountsettings.roblox.com | All endpoints for account/user settings |
ads.roblox.com | Ads configuration endpoints |
api.roblox.com | Miscellaneous 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 |
clientsettings.roblox.com | Used by various Roblox clients to retrieve configuration information |
develop.roblox.com | Game development configuration endpoints |
followings.roblox.com | Establishes follow relationship between subscriber entities (users, groups, etc) and source entities (games, groups, assets, etc.) |
friends.roblox.com | Friends, followers, and contacts management |
gameinternationalization.roblox.com | Manages internationalization of games such as translating in game content. |
gamejoin.roblox.com | All endpoints around launching a game |
games.roblox.com | All endpoints for game discovery, and details |
gamepersistence.roblox.com | Endpoints for the in-game datastore system for storing data for games |
groups.roblox.com | Groups and clans management |
inventory.roblox.com | All endpoints for viewing (but not granting) ownership of items |
locale.roblox.com | User locale management |
notifications.roblox.com | All notification stream endpoints |
points.roblox.com | The web Api for the in-game PointsService |
presence.roblox.com | All endpoints for managing presence |
publish.roblox.com | All endpoints handling file uploads |
textfilter.roblox.com | High volume text filtering |
thumbnails.roblox.com | Endpoints for requesting thumbnails |
Deprecated APIs
Search APIs
http://www.roblox.com/games/list-json?sortFilter=1&MaxRows=5
Search for an audio asset with the search term “pendulum fasten”
https://search.roblox.com/catalog/json?Category=9&Keyword=pendulum%20fasten
Place APIs
Get a place’s game instances
startIndex must be a multiple of 10
Thumbnail APIs
Asset Thumbnails
-
https://www.roblox.com/Thumbs/RawAsset.ashx?assetId=1818&imageFormat=png&width=60&height=62
- Returns either
PENDING
or the URL. Also acceptsassetVersionId
- Returns either
-
https://www.roblox.com/headshot-thumbnail/json?userId=1&width=180&height=180
- Returns
{"Url":"http://t4.rbxcdn.com/61b0fbd421e702bcd04781ce867abef1","Final":true}
- Returns
-
https://assetgame.roblox.com/Thumbs/Asset.ashx?width=110&height=110&assetId=1818
- Redirects to the URL. Also accepts
userAssetId
- Redirects to the URL. Also accepts
-
- Returns
{"d":{"final":true,"url":"http://t2.rbxcdn.com/e55dc80c4015e7dd5f4373dc85d50195"}}
- Returns
-
https://www.roblox.com/Thumbs/Pixelated.ashx?id=1818&x=250&y=250&format=png&tfid=114
- Returns the image, but with the Content-Type: text/html so it won’t render in browser
-
https://assetgame.roblox.com/Game/Tools/ThumbnailAsset.ashx?aid=1818&fmt=png&wd=420&ht=420
-
https://assetgame.roblox.com/Game/Tools/ThumbnailAsset.ashx?assetVersionId=1&fmt=png&wd=420&ht=420
- Redirects to the URL
-
https://www.roblox.com/place-thumbnails?params=[{placeId:1818}]
[{ id: 1818, name: "Crossroads", url: "/Crossroads-place?id=1818", thumbnailFinal: true, thumbnailUrl: "http://t6.rbxcdn.com/5ae19af22b91ff36949a296d20b67aea", bcOverlayUrl: null, megaOverlayUrl: null, personalServerOverlayUrl: null }]
-
https://www.roblox.com/item-thumbnails?params=[{assetId:1818}]
[{ id: 1818, name: "Crossroads", url: "/Crossroads-place?id=1818", thumbnailFinal true, thumbnailUrl: "http://t3.rbxcdn.com/1e2476473494bfb202592501a5f86655", bcOverlayUrl: null, limitedOverlayUrl: null, deadlineOverlayUrl: null, limitedAltText: null, newOverlayUrl: null, imageSize: "large", saleOverlayUrl: null, iosOverlayUrl: null, transparentBackground: false }]
You can specify the small image size (110x110) with params=[{assetId:1818,imageSize:small}]. Otherwise it will default to
large
(420x420)Both of these APIs support JSONP, so this code can be embedded in any web page:
$.getJSON('https://www.roblox.com/item-thumbnails?params=[{assetId:1818}]&jsoncallback=?', function(json) { alert(json[0].name); });
-
https://assetgame.roblox.com/asset-thumbnail/json?assetId=1818&width=160&height=100&format=jpeg
{ "Url": "https://t2.rbxcdn.com/622729f930283b57f6172be41b8fe2fa", "Final": true }
Outfit Thumbnails
-
https://www.roblox.com/outfit-thumbnail/json?userOutfitId=2&width=352&height=352&format=png
{ "Url": "https://t7.rbxcdn.com/56abbdd66ad9847c7d801fa57dd7a249", "Final": true }
-
http://www.roblox.com/Outfits/Fetch?displayedUserId=261&pageNum=1
Avatar Thumbnails
-
https://assetgame.roblox.com/Thumbs/Avatar.ashx?username=Shedletsky
- Redirects to the URL. Also accepts
userId
, and all other parameters can be omitted. IfuserId
andusername
are both omitted, will return a ?
- Redirects to the URL. Also accepts
-
https://www.roblox.com/avatar-thumbnails?params=[{userId:261}]
- Returns JSON
[{ "id": 261, "name": "Shedletsky", "url": "https://www.roblox.com/users/261/profile", "thumbnailFinal": true, "thumbnailUrl": "https://t2.rbxcdn.com/897dc32162c65b38f6565ea9ef4ef02d", "bcOverlayUrl": "https://images.rbxcdn.com/57ede1145c87db28cf51e2355909ee49.png", "substitutionType": 0 }]
Valid Thumbnail Sizes
48x48 | 60x62 | 75x75 | 100x100 | 110x110 | 160x100 | 250x250 | 352x352 | 420x230 | 420x420 | |
---|---|---|---|---|---|---|---|---|---|---|
/Game/Tools/ThumbnailAsset.ashx | x | x | x | x | ||||||
/Thumbs/Pixelated.ashx | x | |||||||||
/Asset-Thumbnail/Json | x | x | x | x | x | x | x | x | x | x |
/Outfit-Thumbnail/Json | x | x | x | x | x | x | x | x | x | x |
/Thumbs/Asset.ashx | x | x | x | x | x | x | x | x | x | x |
/Thumbs/Avatar.ashx | x | x | x | x | x | x | x | x | x | x |
/Thumbs/RawAsset.ashx | x | x | x | x | x | x | x | x | x | x |
Group APIs
Get a group’s games
Get a group’s emblem asset id
Get a thumbnail for a group
Check a user’s role in a group
Get a group’s ranks
Get a user’s primary group
Friend APIs
Check if two users are friends
-
<Value Type="boolean">true</Value>
Get information about a developer product
-
https://api.roblox.com/Marketplace/ProductDetails?productId=18026036
{ "AssetId": 0, "ProductId": 18026036, "Name": "85 Candies Pack", "Description": null, "AssetTypeId": 0, "Creator": { "Id": 0, "Name": null }, "IconImageAssetId": 0, "Created": "2013-10-16T00:37:38.517Z", "Updated": "2013-10-16T00:37:38.517Z", "PriceInRobux": 50, "PriceInTickets": 625, "Sales": 0, "IsNew": false, "IsForSale": true, "IsPublicDomain": false, "IsLimited": false, "IsLimitedUnique": false, "Remaining": null, "MinimumMembershipLevel": 0, "ContentRatingTypeId": 0 }
User APIs
Get username from ID
-
https://api.roblox.com/users/261
{ "Id": 261, "Username": "Shedletsky" }
Get ID from username
-
https://api.roblox.com/users/get-by-username?username=ROBLOX
{ "Id": 1, "Username": "ROBLOX" }
Get a list of places created by a user
-
https://www.roblox.com/users/profile/playergames-json?userId=261
{ "Title": "Games", "Games": [{ "CreatorID": 0, "CreatorName": "Shedletsky", "CreatorAbsoluteUrl": "https://www.roblox.com/users/261/profile", "Plays": 65437, "Price": 0, "ProductID": 0, "IsOwned": false, "IsVotingEnabled": true, "TotalUpVotes": 79, "TotalDownVotes": 34, "TotalBought": 0, "UniverseID": 150387, "HasErrorOcurred": false, "Favorites": 1728, "Description": "In a dystopian future, Robloxia is overrun by killbots.", "GameDetailReferralUrl": "http://www.roblox.com/games/48891/Timmy-and-the-Killbots", "Thumbnail": { "Final": true, "Url": "http://t7.rbxcdn.com/db35c88f3bfe3e45898cf9a65b370dd9", "RetryUrl": null }, "UseDataSrc": false, "Name": "Timmy and the Killbots", "PlaceID": 48891, "PlayerCount": 0, "ImageId": 0 }] }
Check if a username has been taken
-
http://www.roblox.com/UserCheck/DoesUsernameExist?username=Shedletsky
{ "success" :true }
Asset APIs
Get parts of a package
####Check if a user owns an asset
#####Get information about an asset
-
http://api.roblox.com/Marketplace/ProductInfo?assetId=1818
{ "AssetId": 1818, "ProductId": 1305046, "Name": "Crossroads", "Description": "The classic ROBLOX level is back!", "AssetTypeId": 9, "Creator": { "Id": 1, "Name": "ROBLOX" }, "IconImageAssetId": 0, "Created": "2007-05-01T01:07:04.78Z", "Updated": "2013-07-01T16:40:24.527Z", "PriceInRobux": null, "PriceInTickets": null, "Sales": 0, "IsNew": false, "IsForSale": false, "IsPublicDomain": false, "IsLimited": false, "IsLimitedUnique": false, "Remaining": null, "MinimumMembershipLevel": 0, "ContentRatingTypeId": 0 }
Get an asset’s latest VersionId
Get serial number of a collectible asset
-
https://www.roblox.com/Trade/InventoryHandler.ashx?userId=%d&assetTypeId=%d&ItemsPerPage=25&page=%d"
{ "sl_translate":"message", "success":true, "msg":"Inventory retreived!", "data":{ "agentID":90115385, "totalNumber":3, "InventoryItems":[{ "Name":"Noob Attack: Artemis Annhilation", "ImageLink":"https://t2.rbxcdn.com/b8807e8da2b996cff306a3da3c5b2f7c", "ItemLink":"https://www.roblox.com/Noob-Attack-Artemis-Annhilation-item?id=553718984", "SerialNumber":"1742", "SerialNumberTotal":"5000", "AveragePrice":"312", "OriginalPrice":"75", "UserAssetID":"646564564", "MembershipLevel":null }] } }
Download various versions of an asset
- https://assetgame.roblox.com/Asset/?id=1818
- https://assetgame.roblox.com/Asset/?id=1818&version=1
- https://assetgame.roblox.com/Asset/?versionId=1
- https://assetgame.roblox.com/Asset/?hash=b3c6b23ff18f48557b823ef5b72a0508
Upload an asset
POST /Data/Upload.ashx?assetid=1818 HTTP/1.1
Host: data.roblox.com
Cookie: .ROBLOSECURITY=*
Content-Type: application/xml; charset=utf-8
Content-Length: 17
<roblox></roblox>
Returns an assetVersionId
Log in
POST https://www.roblox.com/NewLogin HTTP/1.1
Host: www.roblox.com
Content-Length: 29
Content-Type: application/json
{"username":"Shedletsky","password":"hunter2"}
- User-Agent: ROBLOX iOS
Useful Hacks
Get the assetId of an assetVersionId:
$ curl -i http://www.roblox.com/--item?avid=1
HTTP/1.1 302 Found
Location: /ArrowCursor-png-item?id=1000000
Get the creator of an assetId, or see how many assetVersions it has
####Current User APIs
Login APIs
POST https://www.roblox.com/MobileAPI/Signup HTTP/1.1
Host: www.roblox.com
Content-Type: application/json
Content-Length: 72
{"username":"Shedletsky","password":"hunter2","gender":"Male","dateOfBirth":"6/18/87"}
HTTP/1.1 200 OK
Set-Cookie: .ROBLOSECURITY=*
Content-Length: 210
Content-Type: application/json
{"Status":"OK","UserInfo":{"UserID":261,"UserName":"Shedletsky","RobuxBalance":0,"TicketsBalance":0,"ThumbnailUrl":"http://t3.rbxcdn.com/1768c4f3c0d7c30d978c9dce68aa786c","IsAnyBuildersClubMember":false}}
POST https://www.roblox.com/MobileAPI/Login HTTP/1.1
Host: www.roblox.com
Content-Length: 29
Content-Type: application/json
{"username":"","password":""}
POST https://www.roblox.com/Services/Secure/LoginService.asmx/ValidateLogin HTTP/1.1
Host: www.roblox.com
Content-Length: 85
Content-Type: application/json
{"userName":"","password":"","isCaptchaOn":false,"challenge":"","captchaResponse":""}
This page clears the browser’s cookies. It doesn’t invalidate the session:
POST https://www.roblox.com/MobileAPI/Logout HTTP/1.1
Host: www.roblox.com
Cookie: .ROBLOSECURITY=*
Content-Length: 0
The equivalent on the website is https://www.roblox.com/Item.aspx?avid=1
There’s another parameter, serverPlaceId, which will deny the request if the owner of that place doesn’t own it and it’s not owned by roblox.
####Main Site
-
/Game/BuildActionPermissionCheck.ashx?assetId=1818&userId=261&isSolo=true
-
http://assetgame.roblox.com/Game/GetUserBuildToolSet.ashx?assetId=1818&userId=261&isSolo=true
-
/UserCheck/CheckIfInvalidUsernameForSignup?username=Shedletsky
POST http://www.roblox.com/Services/GroupService.asmx/GetRoleSetsForGroup HTTP/1.1
Content-Type: application/json
{ "groupId": 1 }
thumbnail-sizes.js:
var request = require('request');
var async = require('async');
var sizes = [
{ width: 1, height: 1 }, // intentionally invalid
{ width: 48, height: 48 },
{width: 60, height: 62 },
{ width: 75, height: 75 },
{ width: 100, height: 100 },
{ width: 110, height: 110 },
{ width: 160, height: 100 },
{ width: 250, height: 250 },
{ width: 352, height: 352 },
{ width: 420, height: 230 },
{ width: 420, height: 420 }
];
var apis = [{
name: "/Game/Tools/ThumbnailAsset.ashx",
url: "http://www.roblox.com/Game/Tools/ThumbnailAsset.ashx?aid=1818&fmt=png",
width_param: "wd",
height_param: "ht"
}, {
name: "/Thumbs/Pixelated.ashx",
url: "http://www.roblox.com/Thumbs/Pixelated.ashx?id=1818&format=Png&tfid=114",
width_param: "x",
height_param: "y"
}, {
name: "/Asset-Thumbnail/Json",
url: "http://www.roblox.com/Asset-Thumbnail/Json?assetId=1818&format=jpeg",
width_param: "width",
height_param: "height"
}, {
name: "/Outfit-Thumbnail/Json",
url: "http://www.roblox.com/Outfit-Thumbnail/Json?userOutfitId=2&format=png",
width_param: "width",
height_param: "height"
}, {
name: "/Thumbs/Asset.ashx",
url: "http://www.roblox.com/Thumbs/Asset.ashx?AssetID=1818",
width_param: "width",
height_param: "height"
}, {
name: "/Thumbs/RawAsset.ashx",
url: "http://www.roblox.com/Thumbs/Asset.ashx?assetId=1818&imageFormat=png",
width_param: "width",
height_param: "height"
}, {
name: "Avatar.ashx",
url: "http://www.roblox.com/Thumbs/Avatar.ashx?username=Shedletsky&format=png",
width_param: "x",
height_param: "y"
}];
var q = async.queue(function (task, callback) {
var qs = {};
qs[task.width_param] = task.width;
qs[task.height_param] = task.height;
var width = task.width;
var height = task.height;
request.get(task.url, { qs: qs }, function(err, res) {
if (res.statusCode == 200) {
console.log(task.name, width + 'x' + height);
}
callback();
});
}, 2);
apis.forEach(function(api) {
sizes.forEach(function(size) {
var task = {};
task.name = api.name;
task.url = api.url;
task.width = size.width;
task.height = size.height;
task.width_param = api.width_param;
task.height_param = api.height_param;
q.push(task);
});
});