AstroAPI Documentation
Created by mochaaaa, revision 2 (2/9/2025)
Table of Contents
- API History
- Why?
- V1 API
- Level Lookups (
/api/v1/getLevel
)
- Level Lookups (
- LevelID Lookups (
/api/v1/getLevelID
)
- LevelID Lookups (
- User Lookups (
/api/v1/getUser
)
- User Lookups (
- User Lookups (
/api/v1/getUserID
)
- User Lookups (
- User Queries (
/api/v1/getUserQuery
)
- User Queries (
V2 API
- Leaderboard Lookups (
/api/v2/getLeaderBoards
)
- Leaderboard Lookups (
V3 (Websockets API)
- Chatbot Service (
/api/v3/chat
)
- Chatbot Service (
V4 API
- Clear Rate List (
/api/v4/getClearRateList
)
- Clear Rate List (
- Farming List (
/api/v4/getFarmList
)
- Farming List (
- User WR (
/api/v4/getWR
)
- User WR (
- User Last Played (
/api/v4/getRP
)
- User Last Played (
V5 API
- User Descriptions (
/api/v5/getCosmoDescription
)
- User Descriptions (
- User Awards (
/api/v5/getUserAwards
)
- User Awards (
API History
Back when AstroUp 1.1 was released in 2022, the AstroUp API was released to help developers integrate applications inside of the API. 1.4 saw the shutdown of this API due to Thorsen giving a Private API Endpoint for AstroUp to use.
After the shutdown of AstroUp's Discord Bot in 2023, AstroBot, a in-game bot for Astrogon, was made after findings of the chat protocol that Astrogon had, alongside it, the public release of V1-V4 API endpoints for AstroUp, given, with limited functionality.
In 2024, along with the development of Cosmo, AstroUp introduced changes to the V1, V3, and a new endpoint, the V5 API, which included things such as querying, enhanced bot support, and user-defined data.
Why?
AstroUp's API was made for both Users and Developers to make and integrate Astrogon's Stats into Applications, along with it, giving a readable and easy to understand format.
There was also a need to keep Astrogon's servers secure and safe, AstroUp's API accounts for this by using Guest Accounts and not interfering with any form of protocol/adding data, keeping interactions between users/developers safe.
V1 API
Level Lookups
URL: /api/v1/getLevel/<level>
Parameter | Description |
---|---|
level | A URLEncoded string containing the level name. |
Sample Output:
{
creator: "abcd",
title: "efg",
likes: 1,
practiceAttempts: 100,
attempts: 300,
clears: 50,
comments: 20,
worldRecordTime: "6.10",
worldRecordHolder: "xyz",
levelID: "abcd-efgh-ijkl",
description: "a filler description"
}
URL: /api/v1/getLevelID/<levelid>
Parameter | Description |
---|---|
levelid | A string containing a Level ID (xxxx-xxxx-xxxx) |
Sample Output:
{
creator: "abcd",
title: "efg",
likes: 1,
practiceAttempts: 100,
attempts: 300,
clears: 50,
comments: 20,
worldRecordTime: "6.10",
worldRecordHolder: "xyz",
levelID: "abcd-efgh-ijkl",
description: "a filler description"
}
User Lookups
URL(s): /api/v1/getUser/<user>
, /api/v1/getUserFromID/<userID>
Parameter | Description |
---|---|
user | A URLEncoded string containing a username. |
userID | A UserID representing an Astrogon user. |
Sample Output:
{
playerName: "username",
profilePicture: "pfp_url",
countryCode: "cc",
userUid: "uid"
stats: {
game: {
creativePoints: 1234,
creativeRanking: 123,
rankedPoints: 12,
rankedRanking: 1,
rankedWins: 12,
rankedLost: 123,
rankedLeague: "atomic",
quickGameWins: 1234,
quickGameLost: 12345,
totalAttempts: 1234,
worldRecords: 123,
lastPlayedAmount: 15,
lastPlayedList: [(...), (...), (...)]
},
creator: {
hasBeenCreatorOfTheWeek: false,
hasBeenLevelOfTheDay: false,
hasBeenTop10Levels: false
},
social: {
totalLevelLikes: 12,
totalReplayLikes: 1,
totalCommentsReceived: 12,
totalCommentsSent: 123,
totalUploadedLevels: 1234
},
misc: {
hasNeo: false,
isCheatBanned: false,
isSteamUser: false
}
}
}
User Query
URL(s): /api/v1/getUserQuery/<query>
Parameter | Description |
---|---|
query | A URLEncoded string. |
Sample Output:
[
{
user: "Jorivasmw3000",
pfp: "https://astroup.xyz/assets/invalidPFP.png",
uid: "gctyI21KO1h3OIr3bVYHAZi9lzx2"
},
{
user: "bohoja",
pfp: "https://avatars.steamstatic.com/c29763dbaaf74d95d4234953e794d392d6fd8d86_full.jpg",
uid: "76561199621871086"
},
{
user: "noelle",
pfp: "https://lh3.googleusercontent.com/a-/AOh14Gi0aVjCEPU6o2vZh2650J-nW8OYinBzEip5Z-dfzg=s96-c",
uid: "dtbDwRbHaGPNUESlVnBWusM4RVR2"
}
]
V2 API
Leaderboard Lookups
URL: /api/v2/getLeaderBoards/<leaderboard>
Parameter | Description |
---|---|
leaderboard | A String containing a Leaderboard Type. The Avalible types are: creative , solo , versus , atomic , molecular , planetary , galactic , and supernova . |
Sample Output (Non-Dimension Requests):
{
"status": "OK",
"data":[
{
"player": "4rC.4nU.m",
"countryCode": "de",
"points": 2377151,
"worldRecords": 2380,
"pfpURL": "someurl"
},
{
"player": "second player or smth",
"countryCode": "mx",
"points": 123123,
"worldRecords": 1795,
"pfpURL": "another url"
},
{
"player": "oh hes 3rd?",
"countryCode": "us",
"points": 111111,
"worldRecords": 511,
"pfpURL": null
}
]
}
Sample Output (Dimension Requests):
{
"status": "OK",
"data": [
{
"player": "lillie~",
"countryCode": "de",
"timeSeconds": 75.6,
"hasDied": true
},
{
"player": "bruh",
"countryCode": "uk",
"timeSeconds": 99.99,
"hasDied": true
},
{
"player": "omg api",
"countryCode": "fr",
"timeSeconds": 727.27,
"hasDied": true
}
]
}
V3 API
ChatBot WS Wrapper
URL: /api/v3/chatbot?token=<TOKEN>
Parameter | Description |
---|---|
TOKEN | A String Containing a Unique Bot Token. |
This API is not publicly avalible, and will most likely never be. This is only documented for the AstroBot Documentation.
V4 API
Clear Rate List
URL: /api/v4/getClearRateList
Parameter | Description |
---|---|
N/A | N/A |
Sample Output:
{
data: [
{
name: "Execution",
id: "2I1J-W7R4-762F",
clearRate: 0.008358408559010364, // clear rate percentage
attempts: 11964,
wins: 1,
creator: "haaaaaaaaris",
bestTime: 58.04997678 // time in seconds
},
{
name: "Destruction",
id: "21WZ-6873-32ML",
clearRate: 0.008358408559010364, // clear rate percentage
attempts: 53092,
wins: 6,
creator: "haaaaaaaaris",
bestTime: 57.98331014 // time in seconds
},
{
name: "huh??",
id: "12 letter ID",
clearRate: 0.2, // clear rate percentage
attempts: 11964,
wins: 1,
creator: "nyaaaa :3",
bestTime: 10000.00 // time in seconds
}
]
}
Points calculation are done as such (JS):
if (index == 0) {
points = 100;
}
if (index == 1) {
points = 95;
}
if (index == 2) {
points = 90;
}
if (index > 2 && index < 10) {
points = 80;
}
if (index > 9 && index < 25) {
points = 40;
}
if (index > 24 && index < 50) {
points = 20;
}
if (index > 49 && index < 100) {
points = 5;
}
if (index > 99 && index < 250) {
points = 1;
}
if (index > 249) {
points = 0;
}
Farming List
URL: /api/v4/getFarmList
Parameter | Description |
---|---|
N/A | N/A |
Sample Output:
{
data: [
{
name: "Laisse toi aller",
id: "MCDI-3HNV-EGZP",
clearRate: 94.11764705882352, // clear rate percentage
attempts: 17,
wins: 16,
creator: "STCX",
bestTime: 33.933319759999996 // time in seconds
},
{
name: "auto",
id: "J9QR-3M1W-55MW",
clearRate: 91.66666666666666, // clear rate percentage
attempts: 12,
wins: 11,
creator: "Егор#13643",
bestTime: 28.766655160000003 // time in seconds
},
{
name: "Destruction",
id: "21WZ-6873-32ML",
clearRate: 0.008358408559010364, // clear rate percentage
attempts: 53092,
wins: 6,
creator: "haaaaaaaaris",
bestTime: 57.98331014 // time in seconds
}
]
}
User World Record List
URL: /api/v4/getWR/<UID>
Parameter | Description |
---|---|
UID | Astrogon User ID. |
Sample Output:
{
status: "OK",
code: "OK",
data: [
{
title: "Noxious Shifter",
inGameID: "4Q7I-9EHC-B79G",
databaseID: "635c81e0bffe68dd1c41e9f2",
creator: "Achii",
bestTime: 18.21666666666667, // seconds
attempts: 143
},
{
title: "The Adventures:1",
inGameID: "57C3-MIIM-9RIH",
databaseID: "6336c5fff99a868dbb11d190",
creator: "게임맛초밥",
bestTime: 10.316666666666668, // seconds
attempts: 94
},
{
title: "the wall-spam",
inGameID: "4VY7-WUJZ-JKB7",
databaseID: "661784a31590c0ab06fbc6d7",
creator: "abfndttgdfb",
bestTime: 1.2, // seconds
attempts: 407
}
]
}
User Last Played List
URL: /api/v4/getRP
(POST/Body Parameters)
Parameter | Description |
---|---|
levels | Array of levels from a User's Lookup. (lastPlayedList) |
Sample Output:
{
status: "OK",
code: "OK",
data: [
{
title: "justroomescape",
inGameID: "7F9T-UV75-4XK8",
databaseID: "67113888caeeef8225364c7a",
creator: "thatsomeone",
bestTime: 11.816666666666668, // seconds
bestTimeWho: "Scion",
attempts: 618
},
{
title: "Damn",
inGameID: "8RQM-4VT3-V1A4",
databaseID: "671171a36d2b33e12f82cbe8",
creator: "2cion",
bestTime: 5.75, // seconds
bestTimeWho: "4rC.4nU.m",
attempts: 241
},
{
title: "imbored 1",
inGameID: "423D-XQTB-MDDX",
databaseID: "67164a7b6d2b33e12f82edf9",
creator: "꙰꙰ ꙰S꙰c꙰i꙰o꙰n꙰",
bestTime: 2.5833333333333335, // seconds
bestTimeWho: "4rC.4nU.m",
attempts: 310
}
]
}
V5 API
User Descriptions
URL: /api/v5/getCosmoDescription/<userID>
Parameter | Description |
---|---|
userID | Astrogon User ID. |
Sample Output (user: mochaaaa):
{
"status":"OK",
"code": "OK",
// max data size: 16 characters per description
"data": {
"desc1":"she/her", // first description field
"desc2":"meow :3" // second description field
}
}
Sample Output (Error/No Data):
{
"status":"ERR",
"code": "User Data not found!",
"data": null
}
Sample Output (Error/Disabled):
{
"status":"ERR",
"code": "User Data API Disabled!",
"data": null
}
User Badges
URL: /api/v5/getUserAwards/<userID>
Parameter | Description |
---|---|
userID | Astrogon User ID. |
Sample Output (user: mochaaaa):
{
"status":"OK",
"code": "OK",
"badges": [
{
"internalID": "1",
"badgeName": "AstroUp Developer",
"badgeAsset": "https://astroup.xyz/assets/badges/astroup.png",
"given": "2022-07-04T08:00:00-07:00" // ISO8601 Date
},
{
"internalID": "2",
"badgeName": "Cosmo Developer",
"badgeAsset": "https://astroup.xyz/assets/badges/cosmo.png",
"given": "2024-02-26T14:20:00-07:00" // ISO8601 Date
}
]
}
Sample Output (Error/No Badges):
{
"status":"ERR",
"code": "No Badges..",
"badges": null
}