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 |
{
"display_name": "stadust",
"id": 2,
"name": "stardust1971",
"permissions": 0,
"youtube_channel": null
}
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 |
{
"id": 5,
"name": "cat"
}
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 |
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) |
{
"nation": "United States",
"country_code": "US",
"subdivision": {
"iso_code": "OH",
"name": "Ohio"
}
}
Each record on the list is represented by a Record
object. The following invariants hold true for all player objects
progress
value lies within demon.requirement
and 100
video
value is uniquedemon
, player
and status
values is uniquevideo
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.
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 |
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 |
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 |
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 |
Here with an embedded demon object:
{
"id": 1,
"progress": 100,
"demon": {
"name": "Cadrega City",
"position": 1
},
"status": "approved",
"player": "Aquatias"
}
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":[]
}
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 |
{
"author":"stadust",
"content":"This is a new record note :o",
"editors":["stadust"],
"id":3,
"transferred":false
}
Each demon on the list is represented by a Demon
object. The following assumptions can be made about these:
requirement
value lies between 0
and 100
.position
value is greater than 0
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.
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) |
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. |
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 |
{
"name": "Cadrega City",
"position": 34,
"id": 1
}
{
"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"
}
{
"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"
}
Each player on the list is represented by a Player
object. The following invariant holds true for any player object:
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
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 |
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 |
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 |
{
"id": 4,
"name": "Pennutoh",
"banned": false
}
{
"id": 4,
"name": "Pennutoh",
"banned": false,
"nationality": {
"nation": "Andorra",
"country_code": "AD"
},
"score": 0
}
{
"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": []
}
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 |
{
"user_id": 12,
"player_id": 363,
"verified": true,
"lock_submissions": false
}
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:
approved
or rejected
Field | Type | Description |
---|---|---|
id | int | The submitter’s ID |
banned | boolean | Value indicating whether the submitter is banned |
{
"banned": true,
"id": 7
}
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. |
{
"code": 42217,
"data": {
"existing": 13
},
"message": "This records has already been submitted"
}