User objects

Each pointercrate user is represented by a User object.

If the display name is not null, it will replace a user’s username wherever their name is displayed.

There is only one form of user objects:

Field Type Description
id int The user’s ID
name string The user’s name
permissions bitmask The user’s access permissions
display_name string The user’s display name. This can be null.
youtube_channel string The user’s linked youtube channel. This can be null

Example object

{
  "display_name": "stadust",
  "id": 2,
  "name": "stardust1971",
  "permissions": 0,
  "youtube_channel": null
}

Named ID

Object representing some generic name-id pair.

Field Type Description
id integer The ID associated with the object
name string? The name associated with the object

Example object

{
    "id": 5,
    "name": "cat"
}

Nationality objects

Object representing some nation

Field Type Description
nation string The nation’s name
country_code string The nation’s ISO country code. Always exactly 2 characters long
subdivision Subdivision? An optional entry specifying a state within the country

Subdivision objects

Object representing some state with in a nation

Field Type Description
name string The states’s name
iso_code string The nation’s ISO country code. Not always 2 characters long (e.g. for Australia’s subdivisions it’s three)

Example object

{
  "nation": "United States",
  "country_code": "US",
  "subdivision": {
    "iso_code": "OH",
    "name": "Ohio"
  }
}

Record objects

Each record on the list is represented by a Record object. The following invariants hold true for all player objects

  • The progress value lies within demon.requirement and 100
  • Every video value is unique
  • Every combination of demon, player and status values is unique
  • Every video value is in one of the formats listed here, or null

The object only contains the submitter information if the requestee has ListModerator permissions. The object only contains the notes if the requester has ListHelper permissions. Requests without ListHelper permissions can only retrieve approved records.

Minimal Form

The minimal (formerly called embedded form) form of record objects is returned if a record object is part of another object.

Field Type Description
id integer The record’s id
progress integer The progress achieved by the record holder
status RecordStatus The record’s status.
video URL? The record’s video.

Depending on the context the object is returned in, one (or both) of the following fields will be present:

Field Type Description
player Player The record holder
demon Demon The demon the record was made on

Listed Form

The listed form (formerly called short form) of record objects is returned by GET /records/.

Field Type Description
id integer The record’s id
progress integer The progress achieved by the record holder
status RecordStatus The record’s status.
video URL? The record’s video.
player Player The record holder
demon Demon The demon the record was made on

Full Form

The full (formerly called long form) form of record objects is returned by GET /records/{record_id}.

Field Type Description
id integer The record’s id
progress integer The progress achieved by the record’s holder
video URL? The record’s video.
status RecordStatus The record’s status.
player Player The record holder
demon Demon The demon the record was made on
submitter Submitter? The person that submitted the record, as an submitter object

Enum RecordStatus

Value Description
approved The record has been approved and is displayed on the list
rejected The record has been rejected
submitted The record has been submitted and is awaiting review
under consideration The record is awaiting more thorough review

Example objects

Minimal form

Here with an embedded demon object:

{
  "id": 1,
  "progress": 100,
  "demon": {
    "name": "Cadrega City",
    "position": 1
  },
  "status": "approved",
  "player": "Aquatias"
}

Full form

Here without an embedded submitter object

{
  "demon": {
    "name": "Cadrega City",
    "position": 34
  },
  "id": 2,
  "player": {
    "banned": false,
    "id": 5,
    "name": "AeonAir"
  },
  "progress": 100,
  "status": "approved",
  "submitter": null,
  "video": null,
  "notes":[]
}

Record notes

Users with ListHelper and up permissions can comment on records by leaving record notes. Submitters of records can also add initial notes to records. Each record can have an arbitrary amount of notes, and each note keeps track of who created and subsequently edited it.

Field Type Description
id int The internal ID of this note
author string? The author’s username (see User). Is null if the note was left by the submitter
content string The comment left
is_public boolean If the note should be shown to the record owner
editors List[string] The usernames of everyone who edited this note, in order of edits
transferred boolean Value indicating whether this note was originally left on a different record, but later transferred to the current one due to internal record merging

Example objects

{
  "author":"stadust",
  "content":"This is a new record note :o",
  "editors":["stadust"],
  "id":3,
  "transferred":false
}

Demon objects

Each demon on the list is represented by a Demon object. The following assumptions can be made about these:

  • The requirement value lies between 0 and 100.
  • There are no holes in the positioning and the position value is greater than 0
  • Every video value, if provided, is in one of the formats listed here, or null

Note that although on the website the record requirement for demons on the extended list is always displayed as 100%, Demon objects still save their requirement from when they were on the main list.

Minimal Form

When embedded into other objects (for example, as part of a Record), only the following minimal representation of each demon is provided:

Field Type Description
name string The name of the demon
position integer? The position of the demon. Is null for unplaced demons
id integer The demons internal ID (has nothing to do with its level ID on the geometry dash servers)

Listed Form

When retrieving demons via GET /demons/, only the following partial representation of each demon is provided:

Field Type Description
name string The name of the demon
position integer? The position of the demon. Is null for unplaced demons
id integer The demons internal ID (has nothing to do with its level ID on the geometry dash servers)
publisher Player The player that published this demon
verifier Player The player that verified this demon
video URL? The verification video
thumbnail string URL to the thumbnail for the Demon’s verification video
level_id integer? The level ID of this demon on the Geometry Dash servers.

Full Form

The listed record objects do not contain the current demon embedded into the demon field.

Field Type Description
name string The name of the demon
position integer? The position of the demon
id integer The demons internal ID (has nothing to do with its level ID on the geometry dash servers)
requirement integer The minimum percentage a record on this demon has to be, to be accepted
video URL? The verification video.
thumbnail string URL to the thumbnail for the Demon’s verification video
level_id integer? The level ID of this demon on the Geometry Dash servers.
verifier Player The demon’s verifier
publisher Player The demon’s publisher
creators List[Player] The demon’s creators

Example objects

Minimal form

{
  "name": "Cadrega City",
  "position": 34,
  "id": 1
}

Listed form

{
  "name": "Cadrega City",
  "position": 34,
  "id": 1,
  "publisher": {
    "name": "Pennutoh",
    "id": 123,
    "banned": false
  },
  "verifier": {
    "banned": false,
    "id": 3,
    "name": "Sunix"
  },
  "thumbnail": "https://i.ytimg.com/vi/cHEGAqOgddA/mqdefault.jpg",
  "video": "https://www.youtube.com/watch?v=cHEGAqOgddA"
}

Long form

{
  "creators": [
    {
      "banned": false,
      "id": 2,
      "name": "Pennutoh"
    }
  ],
  "name": "Cadrega City",
  "position": 34,
  "id": 1,
  "publisher": {
    "banned": false,
    "id": 2,
    "name": "Pennutoh"
  },
  "requirement": 54,
  "verifier": {
    "banned": false,
    "id": 3,
    "name": "Sunix"
  },
  "thumbnail": "https://i.ytimg.com/vi/cHEGAqOgddA/mqdefault.jpg",
  "video": "https://www.youtube.com/watch?v=cHEGAqOgddA"
}

Player objects

Each player on the list is represented by a Player object. The following invariant holds true for any player object:

  • If the player is banned, they do not have any approved or submitted records on the list

Note that it is not possible to retrieve a player’s demonlist score via the API. You can calculate it yourself based on the records list

Minimal Form

When part of the representation of another object, a player has the following fields:

Field Type Description
id integer The player’s id
name string The player’s name
banned boolean Value indicating whether the player is banned

Listed Form

When retrieving players via GET /players/

Field Type Description
id integer The player’s id
name string The player’s name
banned boolean Value indicating whether the player is banned
nationality Nationality The player’s nationality, if set
score float The player’s stats viewer score

Full Form

The listed record objects do not contain the current player embedded into the player field.

Field Type Description
id integer The player’s id
name string The player’s name
banned boolean Value indicating whether the player is banned
nationality Nationality The player’s nationality, if set
score float The player’s stats viewer score
created List[Demon] A list of demons the player created
records List[Record] A list of records the player has on the list
published List[Demon] A list of demons the player has published
verified List[Demon] A list of demons the player has verified

Example objects

Minimal form

{
  "id": 4,
  "name": "Pennutoh",
  "banned": false
}

Listed Form

{
  "id": 4,
  "name": "Pennutoh",
  "banned": false,
  "nationality": {
    "nation": "Andorra",
    "country_code": "AD"
  },
  "score": 0
}

Full form

{
  "banned": false,
  "beaten": [],
  "records": [
    {
      "id": 12,
      "name": "Cadrega City",
      "progress": 100,
      "status": "approved"
    }
  ],
  "id": 2,
  "name": "Pennutoh",
  "nationality": {
    "nation": "Andorra",
    "country_code": "AD"
  },
  "published": [
    {
      "name": "Cadrega City",
      "position": 34
    }
  ],
  "score": 0,
  "verified": []
}

Player claims

Represents

Field Type Description
user_id integer Id of user that owns the claim
player_id integer Id of player that claim was assigned to
verified boolean If the claim is verified by a Moderator
lock_submissions boolean User claiming the player has locked record submissions, requiring authentication on submissions for this player

Example objects

{
  "user_id": 12,
  "player_id": 363,
  "verified": true,
  "lock_submissions": false
}

Submitter objects

Everyone who submits a record gets assigned an incremental submitter id, internally used to keep track of who has been banned from submitting records. The following invariant holds true for any submitter object:

  • If the submitter is banned, he cannot submit new records and all his previously submitted records are either marked as approved or rejected
Field Type Description
id int The submitter’s ID
banned boolean Value indicating whether the submitter is banned

Example object

{
  "banned": true,
  "id": 7
}

Error objects

In case of a client or a (not completely fatal) server error, the API will provide an Error object with some information about what went wrong.

Although each HTTP response comes with a status code, you can still calculate the status code from the error code by performing integer division by 100

Field Type Description
message string A short message describing the error
code integer The error code
data object A JSON object containing additional data relevant to the error.

Example object

{
  "code": 42217,
  "data": {
    "existing": 13
  },
  "message": "This records has already been submitted"
}