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 100video value is uniquedemon, player and status values is uniquevideo value is in one of the formats listed here, or nullThe 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 0video value, if provided, is in one of the formats listed here, or nullNote 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"
}