Skip to content

uploadGJLevelList.php ​

Uploads a created list to the servers.

Parameters ​

ParameterExplanation
gameVersion *A number representing the game's version. The current value is 22 for 2.2
accountID *The player's account ID (not to be confused with user ID). Used for authorization
gjp2 *The player's account password, encoded with GJP2. Used for authorization
listID *The ID of the list if updating to a newer version, otherwise 0
listName *The name of the list, in plain text
listDesc *The description of the list, in URL-safe base64
listLevels *All level IDs included in the list, separated by ,
difficulty *The list's difficulty face. -1 is N/A, and then it's 0-10 where 0 is Auto and 10 is Extreme Demon
listVersion *Always 0
original *The ID of the original list if the list was copied, otherwise 0
unlisted *Set to 2 if the list should be unlisted, and to 1 if the list should be unlisted and only viewable by friends
seed *See the upload list chk
seed2 *5 randomly generated characters from [A-Za-z0-9]
secret *Common Secret: Wmfd2893gb7
binaryVersion aA number representing the game's small version. The current value is 51 for 2.209 on PC and mobile
udid aThe player's UDID (Unique Device Identifier). Used to identify unregistered users
uuid aThe player's user ID. See the previous format here
dvs aA number representing the OS platform the player is using. Corresponds to the Cocos2d CC_TARGET_PLATFORM macro: 1 for iOS, 2 for Android, 3 for Windows, 8 for macOS

Response ​

Returns the ID of the uploaded list, or -1 if the request was rejected. Oddly, this endpoint returns a wide variety of error codes for errors that traditionally return a generic error code, but the game displays the generic error message for all of them (while also displaying the error code if it is not -1).

Example ​

Python ​

py
import requests
import random
from string import ascii_letters, digits  # so we don't have to type [A-Za-z0-9] by hand

possible_letters = ascii_letters + digits
seed = ("").join(random.choices(possible_letters, k=5))

data = {
    "gameVersion": 22,
    "accountID": 173831, # This is DevExit's account ID
    "gjp2": "*******", # This would be DevExit's password encoded with GJP2 encryption
    "listLevels": "128,132,133,134,136", # These are the IDs of the levels in the list
    "listID": 0,
    "listName": "First Levels", # This is the list name
    "listDesc": "QSB0ZXN0IGxpc3QgZm9yIHRoZSBHRCBEb2NzIQ==", # "A test list for the GD Docs!"
    "listVersion": 0,
    "original": 0,
    "difficulty": 3, # This indicates a Hard difficulty face
    "unlisted": 2, # This list is unlisted, but does exist!
    "levelString": levelString, # The level string for the level described above
    "seed": seed,
    "seed2": '', # TODO,
    "secret": "Wmfd2893gb7"
}

headers = {
	"User-Agent": ""
}

url = "https://www.boomlings.com/database/uploadGJLevelList.php"

req = requests.post(url=url, data=data, headers=headers)
print(req.text)

Response

plain
297650