RSPLUS API extension

This API is ment to test and practise API structures. It is built to be a robust and dynamic database of songs in Rocksmith+, so that other developers could build apps and features, like song library page, or song request bots.

The API is partly maintained in worktime and partly on free time by Aun Johnsen, and any suggestions for improvements, bug reports, or ideas, can be sent to him on email skippern@gimnechiske.org.

Rocksmith+ is a guitar learning tool and game, published by Ubisoft. Anything related to the game itself should be transmitted to Ubisoft.

Any issues related to products using this API should be directed to the developers of the affected products. I will cooperate with the product developers in order to make the API service as smooth as possible, and make sure all the required data is available.

Formats

As a default, the data is presented in JSON format, but adding ?format= to the URL you can access any supported formats.

Supported formats:

Authentication

We have divided access in 3 different levels. A read-only level using appid, a write level using token, and a moderator level with delete access, also using tokens.

For appid, just add ?appid={your key} to the URL to gain access.

Tokens are sent in the header. At time of writing this, one specific Authorization header is supported. If you require another specific header, contact the API administrator to see if it can be implemented.

The current supported Authorization header is similar to described in the python example:

header = {
    'Authorization': "<your token here>"
}

GET or POST

GET https://grip.gimnechiske.org/API/RSPLUS.php?appid=XXX where XXX is your appid. POST https://grip.gimnechiske.org/API/RSPLUS.php

Simple query is done through HTTP GET requests with an appid. This also accepts HTTP POST requests, all variables described for GET as put in the URL can also be sent in the POST request to obtain the same result.

By default this will return the song list with selected filters

Pagination

Without any other arguments you will get only the first 20 entries. You can change the limit of entries per page by limit=15. You can use offset=20 to start at a particular number, or you can use page=2 for a certain page. Using too large limit value will result in slow response, or in worst case, server timeout.

Filters

Filters was added in version 0.1.4. Following filters are available:

Topics

The topic keyword can be used to give other output than the songlist. The different keywords are:

PUT

PUT https://grip.gimnechiske.org/API/RSPLUS.php

Inserting new data is done through HTTP PUT requests with a token in the header.

Add a new song:

{
    "insert": "song", // Mandatory
    "new": {
        "song_ubi_id": "cb329ea8-3d38-4680-ea2b-aa66434fed71", // Optional temporarilly, will be mandatory, Ubisoft ID of song
        "artist": "Iron Maiden", // Mandatory, alternatively "artist_id"
        "title": "Number of the Beast", // Mandatory
        "duration": "265", // Optional, song length in seconds
        "album_id": "123", // Optional
        "song_year": "1992", // Optional
        "note": "something about this song", // Optional
        "video": "https://youtube.com/?", // Optional, must be YouTube video
        "genre": ["metal"], // Optional
        "is_available": true, // Optional, defaults to true
        "is_official_rs1": false, // Optional, defaults to false
        "is_official_rs2014": false, // Optional, defaults to false
        "was_in_beta": false, // Optional, defaults to false
        "is_on_workshop": true, // Optional, defaults to true
        "has_lyrics": true // Optional, defaults to false
    }
}

Add a new arrangement:

{
    "insert": "arrangement", // Mandatory
    "song_id": 54, // Mandatory, song_id of song from the list
    "new": {
        "ubi_id": "cb329ea8-3d38-4680-ea2b-aa66434fed71", // Optional temporarilly, will be mandatory, Ubisoft ID of arrangement
        "type": "lead", // Mandatory, enum, only values ai_chord, lead, rhythm, bass, or piano accepted
        "verified": true, // Optional
        "charter_id": "1", // Mandatory, ID of charterer, official charts should be named 1 for Ubisoft
        "tuning": "Drop D", // Optional
        "note": "Something about the chart", // Optional, i.e. "All solos", or "As played by Murray"
        "video": "https://youtube.com/?", // Optional, link to youtube or similar with playthrough
    }
}

Add a new artist:

{
    "insert": "artist", // Mandatory
    "new": {
        "ubi_id": "cb329ea8-3d38-4680-ea2b-aa66434fed71", // Optional, currently doesn't seem to be used
        "name": "(HED) Planet Earth", // Mandatory
        "sort_name": "HED Planet Earth", // Optional
        "alt_names": "H.E.D. Planet Earth\nHED PE", // Alternative spellings
        "bio": "Something about the band, wiki type entry", // Optional
        "nationality": "US" // Optional
    }
}

Add a new album:

{
    "insert": "album", // Mandatory
    "new": {
        "ubi_id": "cb329ea8-3d38-4680-ea2b-aa66434fed71", // Optional for now, will be mandatory, Ubisoft ID of album
        "title": "Dark Side of the Moon", // Mandatory
        "artist_id": 42, // Optional, corresponding artist ID
        "year": "1973", // Optional
        "cover": "https://mediawiki.com/", // Optional
        "type": "studio", // Optional, default studio, other values compilation, live, extended play, single, setlist
        "lable": "Harvest Records" // Optional
    }
}

Add a new charter:

{
    "insert": "charter", // Mandatory
    "new": {
        "ubi_id": "cb329ea8-3d38-4680-ea2b-aa66434fed71", // Optional
        "name": "Ubisoft" // Mandatory
    }
}

Add feedback (Read access to send):

{
    "insert": "feedback", // Mandatory
    "new": {
        "song_id": 1, // Mandatory
        "feedback": "Something to report" // Mandatory
    }
}

import is a special entry meant for importing a batch of songs in one go, such as from a website scraper. All fields can, except item ID, can be omitted, but inserting items without mandatory fields (see over) will cause import to be rejected. This note does not count for imports that only UPDATE existing entries. The import engine determines if it is an INSERT or UPDATE.

{
    "import": "songlist",
    "batch": {
        "09bf6996-bca7-45a4-bb6e-6e1b07c3b250": { // Ubi ID of song
            "album_ubi_id": "749db322-489c-840b-c4f9-eb3ad9832602", // Ubi ID of album
            "album_title": "Avalanche", // Name of album
            "artist_name": "Mountain", // Name of artist
            "song_name": "Alisan", // Song name
            "song_year": 1974, // Released year
            "duration": 281, // Song duration in seconds (int)
            "genre": [ "rock" ], // Genres as array, all lower case
            "vocals": 0, // Vocals tags, True/False or 1/0 (bool)
            "is_official_rs1": 0, // RS1 DLC, True/False or 1/0 (bool)
            "is_official_rs2014": 0, // RS2014 DLC, True/False or 1/0 (bool)
            "was_in_beta": 0, // RS+ Beta, True/False or 1/0 (bool)
            "hasOfficialBassArrangement": 1, // Has official bass arrangements, True/False or 1/0 (bool)
            "hasOfficialGuitarArrangement": 1, // Has official guitar arrangements, True/False or 1/0 (bool)
            "hasUGCGuitarArrangement": 0, // Has community guitar arrangements, True/False or 1/0 (bool)
            "hasUGCBassArrangement": 0, // Has community bass arrangements, True/False or 1/0 (bool)
            "totalArrangements": 2, // Number of arrangements on track
            "videoRequest": 0, // Video request, unknown purpose, True/False or 1/0 (bool)
            "bonusAvailable": 0, // Bonus available, unknown purpose, True/False or 1/0 (bool)
            "tempoMapLock": 0, // Tempo Map Lock, unknown purpose, True/False or 1/0 (bool)
        } 
    }
}
{
    "import": "album",
    "batch": {
        "e5f8f174-c8f5-caa0-8511-70b518f2c260": {
            "artist": "Bill Withers",
            "album_title": "Just As I Am",
            "album_year": 1971
        }
    }
}
{
    "import": "regions",
    "batch": {
        "e5f8f174-c8f5-caa0-8511-70b518f2c260": {
            "US": true,
            "DE": true,
            "GB": true,
            "FR": true,
            "CA": true,
            "BR": true,
            "AU": true,
            "ES": true,
            "DK": true,
            "CO": true
        }
    }
}
{
    "import": "arrangements",
    "batch": {
        "e5f8f174-c8f5-caa0-8511-70b518f2c260": [
            {
                // Arrangement data here
                "arrangement_ubi_id": "8f498819-e1cb-4d89-9b08-e77dbf808de5", // Mandatory
                "charter": "Rocksmith+ Team", // Mandatory
                "charter_ubi_id": "1102c4b5-91c4-4b35-aec9-ca64bde6b89d", // Mandatory for community charts
                "type": "bass", // Mandatory chart type
            }
        ]
    }
}

If you want to add a song and arrangement, you need to do it in two operations.

PATCH

PATCH https://grip.gimnechiske.org/API/RSPLUS.php

Updating data is done through HTTP PATCH requests with a token in the header.

Edit a song:

{
    "update": "song", // Mandatory
    "ubi_id": "cb329ea8-3d38-4680-ea2b-aa66434fed71", // Optional, Ubisoft ID of song
    "song_id": 247, // Mandatory, song_id from the list
    "update_note": "Reason for Update", // Mandatory
    "artist": "Heart", // Optional, correcting the spelling of artist
    "title": "Barracuda", // Optional, correcting spelling of song title
    "duration": "283", // Optional, song duration in seconds
    "album": "Little Queen", // Optional, alternatively "album_id"
    "album_year": "1977", // Optional, not read with album_id
    "album_cover": "https://commons.wikipedia.org/", // Optional, not read with album_id
    "note": "Something about the song", // Optional
    "video": "https://youtube.com/?", // Optional
    "genre": ["rock"], // Optional
    "is_available": true, // Optional
    "is_official_rs1": true, // Optional
    "is_official_rs2014": false, // Optional
    "is_on_workshop": true, // Optional
    "was_in_beta": false, // Optional
    "has_lyrics": true // Optional
}

Edit an arrangement:

{
    "update": "arrangement", // Mandatory
    "ubi_id": "cb329ea8-3d38-4680-ea2b-aa66434fed71", // Optional, Ubisoft ID of arrangement
    "song_id": 2, // Mandatory
    "arrangement_id": 9, // Mandatory
    "type": "lead", // Optional
    "charter": "Ubisoft", // Optional ---- should be removed
    "tuning": "E Standard", // Optional
    "note": "Something about the arrangement", // Optional
    "video": "https://youtube.com/?" // Optional
}

Edit region

{
    "update": "region", // Mandatory
    "song_id": 1, // Mandatory
    "region": {
        "BR": true // Mandatory, the key "BR" must be the ISO 3166-Alpha-2 code of country.
    }
}

For now, region only handles one argument for each call, but a future update might accept bulk edits. The key must be ISO 3166-Alpha-2, so United Kingdoms are GB for Great Britain. Unset values (NULL) can be handled as both True or False in the search, depending on the desires of the consumer app. Edited values must be set to True/False. Server default handles NULL as True.

Edit artist

{
    "update": "artist", // Mandatory
    "artist_id": 124, // Mandatory
    "ubi_id": "", // Optional
    "artist_name": "The Guess Who", // Optional
    "artist_sort_name": "Guess Who, The", // Optional
    "artist_alt_names": "Guess Who?", // Optional
    "artist_bio": "Something about the band", // Optional, wiki-style entry in plain text or markdown
    "artist_nationality": "CA", // Optional, ISO 3166-2 code if known
}

Edit album

{
    "update": "album", // Mandatory
    "album_id": 124, // Mandatory
    "ubi_id": "", // Optional
    "album_title": "Smash", // Optional
    "album_year": "1994", // Optional
    "album_cover": "http://wikimedia.com/", // Optional URL to cover art
    "album_label": "Universal Music", // Optional
    "album_type": "studio" // Optional, one of studio/compilation/live/extended play/single/setlist
}

Edit Album songlist order

{
    "update": "album_song_order", // Mandatory
    "album_id": 123, // Mandatory
    "song_id": 123, // Mandatory
    "position": 3 // Mandatory
}

Edit charter

{
    "update": "charter", // Mandatory
    "charter_id": 3, // Mandatory
    "ubi_id": "", // Optional
    "charter_name": "ACHII", // Optional
    "type": "official", // Optional, one of official/community/ai
}

Edit feedback

{
    "update": "feedback", // Mandatory
    "feedback_id": 1, // Mandatory
    "status": "completed" // Mandatory, one of read/todo/completed/spam
}

Special PATCH calls

The following PATCH calls require rs+mod permissions

{
    "set_insert": "arrangement_type",
    "arrangement_type": "piano"
}

Inserts new arrangement type to arrangements enum list

{
    "set_insert": "genre",
    "genre": "pop"
}

Inserts a new genre into songlist genre set

DELETE

DELETE https://grip.gimnechiske.org/API/RSPLUS.php

Those with mod rights can delete entries through an HTTP DELETE request with a token in the header. Mind this requires a different level of access than PUT and PATCH requests.

Two inputs are accepted:

{
    "delete": "song",
    "song_id": 123
}

This will delete a single song entry from the songlist, with all assosiated region informations and arrangements.

{
    "delete": "arrangement",
    "arrangement_id": 123
}

This will delete one single arrangement.

{
    "delete": "arrangement",
    "arrangement_type": "piano"
}

This will delete one arrangement type and all arrangements of that type.

{
    "delete": "genre",
    "genre": "pop"
}

This will delete one artist and all songs of that artist

{
    "delete": "artist",
    "artist_id": 123
}

This will delete one album and unassociate all songs from it

{
    "delete": "album",
    "album_id": 123
}

This will delete one genre and adjust all genre entries accordingly.

Improvements

Improvements to the API can be suggested to Skippern in Rocksmith community discord, or by email as described in first chapter.

Footnote

This document is updated to API version 0.2.0