@lap v0.3
# Machine-readable API spec. Each @endpoint block is one API call.
@api VocaDbWeb
@version 1.0
@endpoints 134
@hint download_for_search
@toc api(134)

@endpoint GET /api/activityEntries
@optional {before: str(date-time), since: str(date-time), userId: int(int32), editEvent: str, entryType: str, maxResults: int(int32)=50, getTotalCount: bool=false, fields: str, entryFields: str, lang: str, sortRule: str}
@returns(200) {items: [map]?, term: str?, totalCount: int(int32)}

@endpoint DELETE /api/albums/{id}
@required {id: int(int32)}
@optional {notes: str=}
@returns(200)

@endpoint GET /api/albums/{id}
@required {id: int(int32)}
@optional {fields: str, songFields: str, lang: str}
@returns(200) {additionalNames: str?, artists: [map]?, artistString: str?, barcode: str?, catalogNumber: str?, createDate: str(date-time), defaultName: str?, defaultNameLanguage: str, deleted: bool, description: str?, discs: [map]?, discType: str, id: int(int32), identifiers: [map]?, mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, mergedTo: int(int32), name: str?, names: [map]?, pvs: [map]?, ratingAverage: num(double), ratingCount: int(int32), releaseDate: map{day: int(int32)?, isEmpty: bool, month: int(int32)?, year: int(int32)?}, releaseEvent: map{additionalNames: str?, artists: [map]?, category: str, date: str(date-time)?, description: str?, endDate: str(date-time)?, id: int(int32), mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, name: str?, names: [map]?, pvs: [map]?, series: map{additionalNames: str?, category: str, deleted: bool, description: str?, id: int(int32), name: str?, pictureMime: str?, status: str, urlSlug: str?, version: int(int32), webLinks: [map]?}, seriesId: int(int32)?, seriesNumber: int(int32), seriesSuffix: str?, songList: map{featuredCategory: str, id: int(int32), name: str?}, status: str, tags: [map]?, urlSlug: str?, venue: map{additionalNames: str?, address: str?, addressCountryCode: str?, coordinates: map{formatted: str?, hasValue: bool, latitude: num(double)?, longitude: num(double)?}, deleted: bool, description: str?, events: [map]?, id: int(int32), name: str?, names: [map]?, status: str, version: int(int32), webLinks: [map]?}, venueName: str?, version: int(int32), webLinks: [map]?}, releaseEvents: [map]?, status: str, tags: [map]?, tracks: [map]?, version: int(int32), webLinks: [map]?}

@endpoint DELETE /api/albums/comments/{commentId}
@required {commentId: int(int32)}
@returns(200)

@endpoint POST /api/albums/comments/{commentId}
@required {commentId: int(int32)}
@optional {author: map{active: bool, groupId: str, knownLanguages: [map], mainPicture: map, memberSince: str(date-time), oldUsernames: [map], verifiedArtist: bool, id: int(int32), name: str}, authorName: str, created: str(date-time), entry: map{activityDate: str(date-time), additionalNames: str, artistString: str, artistType: str, createDate: str(date-time), defaultName: str, defaultNameLanguage: str, description: str, discType: str, entryType: str, eventCategory: str, id: int(int32), mainPicture: map, name: str, names: [map], pvs: [map], songListFeaturedCategory: str, songType: str, status: str, releaseEventSeriesName: str, tagCategoryName: str, tags: [map], urlSlug: str, version: int(int32), webLinks: [map]}, id: int(int32), message: str}
@returns(200)

@endpoint GET /api/albums/{id}/comments
@required {id: int(int32)}
@returns(200)

@endpoint POST /api/albums/{id}/comments
@required {id: int(int32)}
@optional {author: map{active: bool, groupId: str, knownLanguages: [map], mainPicture: map, memberSince: str(date-time), oldUsernames: [map], verifiedArtist: bool, id: int(int32), name: str}, authorName: str, created: str(date-time), entry: map{activityDate: str(date-time), additionalNames: str, artistString: str, artistType: str, createDate: str(date-time), defaultName: str, defaultNameLanguage: str, description: str, discType: str, entryType: str, eventCategory: str, id: int(int32), mainPicture: map, name: str, names: [map], pvs: [map], songListFeaturedCategory: str, songType: str, status: str, releaseEventSeriesName: str, tagCategoryName: str, tags: [map], urlSlug: str, version: int(int32), webLinks: [map]}, id: int(int32), message: str}
@returns(200) {author: map{active: bool, groupId: str, knownLanguages: [map]?, mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, memberSince: str(date-time), oldUsernames: [map]?, verifiedArtist: bool, id: int(int32), name: str?}, authorName: str?, created: str(date-time), entry: map{activityDate: str(date-time)?, additionalNames: str?, artistString: str?, artistType: str, createDate: str(date-time), defaultName: str?, defaultNameLanguage: str, description: str?, discType: str, entryType: str, eventCategory: str, id: int(int32), mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, name: str?, names: [map]?, pvs: [map]?, songListFeaturedCategory: str, songType: str, status: str, releaseEventSeriesName: str?, tagCategoryName: str?, tags: [map]?, urlSlug: str?, version: int(int32), webLinks: [map]?}, id: int(int32), message: str?}

@endpoint GET /api/albums
@optional {query: str=, discTypes: str, tagName[]: [str], tagId[]: [int(int32)], childTags: bool=false, artistId[]: [int(int32)], artistParticipationStatus: str, childVoicebanks: bool=false, includeMembers: bool=false, barcode: str, status: str, releaseDateAfter: str(date-time), releaseDateBefore: str(date-time), advancedFilters: [map], start: int(int32)=0, maxResults: int(int32)=10, getTotalCount: bool=false, sort: str, preferAccurateMatches: bool=false, deleted: bool=false, nameMatchMode: str, fields: str, lang: str}
@returns(200) {items: [map]?, term: str?, totalCount: int(int32)}

@endpoint GET /api/albums/names
@optional {query: str=, nameMatchMode: str, maxResults: int(int32)=15}
@returns(200)

@endpoint GET /api/albums/new
@optional {languagePreference: str, fields: str}
@returns(200)

@endpoint GET /api/albums/{id}/reviews
@required {id: int(int32)}
@optional {languageCode: str}
@returns(200)

@endpoint POST /api/albums/{id}/reviews
@required {id: int(int32)}
@optional {id: int(int32), albumId: int(int32), date: str(date-time), languageCode: str, text: str, title: str, user: map{active: bool, groupId: str, knownLanguages: [map], mainPicture: map, memberSince: str(date-time), oldUsernames: [map], verifiedArtist: bool, id: int(int32), name: str}}
@returns(200) {id: int(int32), albumId: int(int32), date: str(date-time), languageCode: str?, text: str?, title: str?, user: map{active: bool, groupId: str, knownLanguages: [map]?, mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, memberSince: str(date-time), oldUsernames: [map]?, verifiedArtist: bool, id: int(int32), name: str?}}

@endpoint GET /api/albums/{id}/user-collections
@required {id: int(int32)}
@optional {languagePreference: str}
@returns(200)

@endpoint DELETE /api/albums/{id}/reviews/{reviewId}
@required {reviewId: int(int32), id: str}
@returns(200)

@endpoint GET /api/albums/top
@optional {ignoreIds[]: [int(int32)], languagePreference: str, fields: str}
@returns(200)

@endpoint GET /api/albums/{id}/tracks
@required {id: int(int32)}
@optional {fields: str, lang: str}
@returns(200)

@endpoint GET /api/albums/{id}/tracks/fields
@required {id: int(int32)}
@optional {field[]: [str], discNumber: int(int32), lang: str}
@returns(200)

@endpoint GET /api/albums/{id}/related
@required {id: int(int32)}
@optional {fields: str, lang: str}
@returns(200) {any: bool, artistMatches: [map]?, likeMatches: [map]?, tagMatches: [map]?}

@endpoint DELETE /api/artists/{id}
@required {id: int(int32)}
@optional {notes: str=}
@returns(200)

@endpoint GET /api/artists/{id}
@required {id: int(int32)}
@optional {fields: str, relations: str, lang: str}
@returns(200) {additionalNames: str?, artistLinks: [map]?, artistLinksReverse: [map]?, artistType: str, baseVoicebank: map{additionalNames: str?, artistType: str, deleted: bool, id: int(int32), name: str?, pictureMime: str?, releaseDate: str(date-time)?, status: str, version: int(int32)}, createDate: str(date-time), defaultName: str?, defaultNameLanguage: str, deleted: bool, description: str?, id: int(int32), mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, mergedTo: int(int32), name: str?, names: [map]?, pictureMime: str?, relations: map{latestAlbums: [map]?, latestEvents: [map]?, latestSongs: [map]?, popularAlbums: [map]?, popularSongs: [map]?}, releaseDate: str(date-time)?, status: str, tags: [map]?, version: int(int32), webLinks: [map]?}

@endpoint DELETE /api/artists/comments/{commentId}
@required {commentId: int(int32)}
@returns(200)

@endpoint POST /api/artists/comments/{commentId}
@required {commentId: int(int32)}
@optional {author: map{active: bool, groupId: str, knownLanguages: [map], mainPicture: map, memberSince: str(date-time), oldUsernames: [map], verifiedArtist: bool, id: int(int32), name: str}, authorName: str, created: str(date-time), entry: map{activityDate: str(date-time), additionalNames: str, artistString: str, artistType: str, createDate: str(date-time), defaultName: str, defaultNameLanguage: str, description: str, discType: str, entryType: str, eventCategory: str, id: int(int32), mainPicture: map, name: str, names: [map], pvs: [map], songListFeaturedCategory: str, songType: str, status: str, releaseEventSeriesName: str, tagCategoryName: str, tags: [map], urlSlug: str, version: int(int32), webLinks: [map]}, id: int(int32), message: str}
@returns(200)

@endpoint GET /api/artists/{id}/comments
@required {id: int(int32)}
@returns(200)

@endpoint POST /api/artists/{id}/comments
@required {id: int(int32)}
@optional {author: map{active: bool, groupId: str, knownLanguages: [map], mainPicture: map, memberSince: str(date-time), oldUsernames: [map], verifiedArtist: bool, id: int(int32), name: str}, authorName: str, created: str(date-time), entry: map{activityDate: str(date-time), additionalNames: str, artistString: str, artistType: str, createDate: str(date-time), defaultName: str, defaultNameLanguage: str, description: str, discType: str, entryType: str, eventCategory: str, id: int(int32), mainPicture: map, name: str, names: [map], pvs: [map], songListFeaturedCategory: str, songType: str, status: str, releaseEventSeriesName: str, tagCategoryName: str, tags: [map], urlSlug: str, version: int(int32), webLinks: [map]}, id: int(int32), message: str}
@returns(200) {author: map{active: bool, groupId: str, knownLanguages: [map]?, mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, memberSince: str(date-time), oldUsernames: [map]?, verifiedArtist: bool, id: int(int32), name: str?}, authorName: str?, created: str(date-time), entry: map{activityDate: str(date-time)?, additionalNames: str?, artistString: str?, artistType: str, createDate: str(date-time), defaultName: str?, defaultNameLanguage: str, description: str?, discType: str, entryType: str, eventCategory: str, id: int(int32), mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, name: str?, names: [map]?, pvs: [map]?, songListFeaturedCategory: str, songType: str, status: str, releaseEventSeriesName: str?, tagCategoryName: str?, tags: [map]?, urlSlug: str?, version: int(int32), webLinks: [map]?}, id: int(int32), message: str?}

@endpoint GET /api/artists
@optional {query: str=, artistTypes: str, allowBaseVoicebanks: bool=true, tagName[]: [str], tagId[]: [int(int32)], childTags: bool=false, followedByUserId: int(int32), status: str, advancedFilters: [map], start: int(int32)=0, maxResults: int(int32)=10, getTotalCount: bool=false, sort: str, preferAccurateMatches: bool=false, nameMatchMode: str, fields: str, lang: str, languages[]: [str]}
@returns(200) {items: [map]?, term: str?, totalCount: int(int32)}

@endpoint GET /api/artists/names
@optional {query: str=, nameMatchMode: str, maxResults: int(int32)=15}
@returns(200)

@endpoint DELETE /api/comments/{entryType}-comments/{commentId}
@required {entryType: str, commentId: int(int32)}
@returns(200)

@endpoint POST /api/comments/{entryType}-comments/{commentId}
@required {entryType: str, commentId: int(int32)}
@optional {author: map{active: bool, groupId: str, knownLanguages: [map], mainPicture: map, memberSince: str(date-time), oldUsernames: [map], verifiedArtist: bool, id: int(int32), name: str}, authorName: str, created: str(date-time), entry: map{activityDate: str(date-time), additionalNames: str, artistString: str, artistType: str, createDate: str(date-time), defaultName: str, defaultNameLanguage: str, description: str, discType: str, entryType: str, eventCategory: str, id: int(int32), mainPicture: map, name: str, names: [map], pvs: [map], songListFeaturedCategory: str, songType: str, status: str, releaseEventSeriesName: str, tagCategoryName: str, tags: [map], urlSlug: str, version: int(int32), webLinks: [map]}, id: int(int32), message: str}
@returns(200)

@endpoint GET /api/comments/{entryType}-comments
@required {entryType: str}
@optional {entryId: int(int32)}
@returns(200) {items: [map]?, term: str?, totalCount: int(int32)}

@endpoint POST /api/comments/{entryType}-comments
@required {entryType: str}
@optional {author: map{active: bool, groupId: str, knownLanguages: [map], mainPicture: map, memberSince: str(date-time), oldUsernames: [map], verifiedArtist: bool, id: int(int32), name: str}, authorName: str, created: str(date-time), entry: map{activityDate: str(date-time), additionalNames: str, artistString: str, artistType: str, createDate: str(date-time), defaultName: str, defaultNameLanguage: str, description: str, discType: str, entryType: str, eventCategory: str, id: int(int32), mainPicture: map, name: str, names: [map], pvs: [map], songListFeaturedCategory: str, songType: str, status: str, releaseEventSeriesName: str, tagCategoryName: str, tags: [map], urlSlug: str, version: int(int32), webLinks: [map]}, id: int(int32), message: str}
@returns(200) {author: map{active: bool, groupId: str, knownLanguages: [map]?, mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, memberSince: str(date-time), oldUsernames: [map]?, verifiedArtist: bool, id: int(int32), name: str?}, authorName: str?, created: str(date-time), entry: map{activityDate: str(date-time)?, additionalNames: str?, artistString: str?, artistType: str, createDate: str(date-time), defaultName: str?, defaultNameLanguage: str, description: str?, discType: str, entryType: str, eventCategory: str, id: int(int32), mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, name: str?, names: [map]?, pvs: [map]?, songListFeaturedCategory: str, songType: str, status: str, releaseEventSeriesName: str?, tagCategoryName: str?, tags: [map]?, urlSlug: str?, version: int(int32), webLinks: [map]?}, id: int(int32), message: str?}

@endpoint GET /api/comments/{entryType}-comments/{entryId}/locked
@required {entryType: str, entryId: int(int32)}
@returns(200)

@endpoint POST /api/comments/{entryType}-comments/{entryId}/locked
@required {entryType: str, entryId: int(int32)}
@returns(200)

@endpoint GET /api/comments
@optional {before: str(date-time), since: str(date-time), userId: int(int32), entryType: str, maxResults: int(int32)=50, getTotalCount: bool=false, fields: str, entryFields: str, lang: str, sortRule: str}
@returns(200) {items: [map]?, term: str?, totalCount: int(int32)}

@endpoint DELETE /api/discussions/comments/{commentId}
@required {commentId: int(int32)}
@returns(200)

@endpoint POST /api/discussions/comments/{commentId}
@required {commentId: int(int32)}
@optional {author: map{active: bool, groupId: str, knownLanguages: [map], mainPicture: map, memberSince: str(date-time), oldUsernames: [map], verifiedArtist: bool, id: int(int32), name: str}, authorName: str, created: str(date-time), entry: map{activityDate: str(date-time), additionalNames: str, artistString: str, artistType: str, createDate: str(date-time), defaultName: str, defaultNameLanguage: str, description: str, discType: str, entryType: str, eventCategory: str, id: int(int32), mainPicture: map, name: str, names: [map], pvs: [map], songListFeaturedCategory: str, songType: str, status: str, releaseEventSeriesName: str, tagCategoryName: str, tags: [map], urlSlug: str, version: int(int32), webLinks: [map]}, id: int(int32), message: str}
@returns(200)

@endpoint DELETE /api/discussions/topics/{topicId}
@required {topicId: int(int32)}
@returns(200)

@endpoint GET /api/discussions/topics/{topicId}
@required {topicId: int(int32)}
@optional {fields: str}
@returns(200) {author: map{active: bool, groupId: str, knownLanguages: [map]?, mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, memberSince: str(date-time), oldUsernames: [map]?, verifiedArtist: bool, id: int(int32), name: str?}, commentCount: int(int32), comments: [map]?, content: str?, created: str(date-time), folderId: int(int32), id: int(int32), lastComment: map{author: map{active: bool, groupId: str, knownLanguages: [map]?, mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, memberSince: str(date-time), oldUsernames: [map]?, verifiedArtist: bool, id: int(int32), name: str?}, authorName: str?, created: str(date-time), entry: map{activityDate: str(date-time)?, additionalNames: str?, artistString: str?, artistType: str, createDate: str(date-time), defaultName: str?, defaultNameLanguage: str, description: str?, discType: str, entryType: str, eventCategory: str, id: int(int32), mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, name: str?, names: [map]?, pvs: [map]?, songListFeaturedCategory: str, songType: str, status: str, releaseEventSeriesName: str?, tagCategoryName: str?, tags: [map]?, urlSlug: str?, version: int(int32), webLinks: [map]?}, id: int(int32), message: str?}, locked: bool, name: str?}

@endpoint POST /api/discussions/topics/{topicId}
@required {topicId: int(int32)}
@optional {author: map{active: bool, groupId: str, knownLanguages: [map], mainPicture: map, memberSince: str(date-time), oldUsernames: [map], verifiedArtist: bool, id: int(int32), name: str}, commentCount: int(int32), comments: [map{author: map, authorName: str, created: str(date-time), entry: map, id: int(int32), message: str}], content: str, created: str(date-time), folderId: int(int32), id: int(int32), lastComment: map{author: map, authorName: str, created: str(date-time), entry: map, id: int(int32), message: str}, locked: bool, name: str}
@returns(200)

@endpoint GET /api/discussions/folders
@optional {fields: str}
@returns(200)

@endpoint POST /api/discussions/folders
@optional {description: str, id: int(int32), lastTopicAuthor: map{active: bool, groupId: str, knownLanguages: [map], mainPicture: map, memberSince: str(date-time), oldUsernames: [map], verifiedArtist: bool, id: int(int32), name: str}, lastTopicDate: str(date-time), name: str, topicCount: int(int32)}
@returns(200) {description: str?, id: int(int32), lastTopicAuthor: map{active: bool, groupId: str, knownLanguages: [map]?, mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, memberSince: str(date-time), oldUsernames: [map]?, verifiedArtist: bool, id: int(int32), name: str?}, lastTopicDate: str(date-time)?, name: str?, topicCount: int(int32)}

@endpoint GET /api/discussions/topics
@optional {folderId: int(int32), start: int(int32)=0, maxResults: int(int32)=10, getTotalCount: bool=false, sort: str, fields: str}
@returns(200) {items: [map]?, term: str?, totalCount: int(int32)}

@endpoint GET /api/discussions/folders/{folderId}/topics
@required {folderId: int(int32)}
@optional {fields: str}
@returns(200)

@endpoint POST /api/discussions/folders/{folderId}/topics
@required {folderId: int(int32)}
@optional {author: map{active: bool, groupId: str, knownLanguages: [map], mainPicture: map, memberSince: str(date-time), oldUsernames: [map], verifiedArtist: bool, id: int(int32), name: str}, commentCount: int(int32), comments: [map{author: map, authorName: str, created: str(date-time), entry: map, id: int(int32), message: str}], content: str, created: str(date-time), folderId: int(int32), id: int(int32), lastComment: map{author: map, authorName: str, created: str(date-time), entry: map, id: int(int32), message: str}, locked: bool, name: str}
@returns(200) {author: map{active: bool, groupId: str, knownLanguages: [map]?, mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, memberSince: str(date-time), oldUsernames: [map]?, verifiedArtist: bool, id: int(int32), name: str?}, commentCount: int(int32), comments: [map]?, content: str?, created: str(date-time), folderId: int(int32), id: int(int32), lastComment: map{author: map{active: bool, groupId: str, knownLanguages: [map]?, mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, memberSince: str(date-time), oldUsernames: [map]?, verifiedArtist: bool, id: int(int32), name: str?}, authorName: str?, created: str(date-time), entry: map{activityDate: str(date-time)?, additionalNames: str?, artistString: str?, artistType: str, createDate: str(date-time), defaultName: str?, defaultNameLanguage: str, description: str?, discType: str, entryType: str, eventCategory: str, id: int(int32), mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, name: str?, names: [map]?, pvs: [map]?, songListFeaturedCategory: str, songType: str, status: str, releaseEventSeriesName: str?, tagCategoryName: str?, tags: [map]?, urlSlug: str?, version: int(int32), webLinks: [map]?}, id: int(int32), message: str?}, locked: bool, name: str?}

@endpoint POST /api/discussions/topics/{topicId}/comments
@required {topicId: int(int32)}
@optional {author: map{active: bool, groupId: str, knownLanguages: [map], mainPicture: map, memberSince: str(date-time), oldUsernames: [map], verifiedArtist: bool, id: int(int32), name: str}, authorName: str, created: str(date-time), entry: map{activityDate: str(date-time), additionalNames: str, artistString: str, artistType: str, createDate: str(date-time), defaultName: str, defaultNameLanguage: str, description: str, discType: str, entryType: str, eventCategory: str, id: int(int32), mainPicture: map, name: str, names: [map], pvs: [map], songListFeaturedCategory: str, songType: str, status: str, releaseEventSeriesName: str, tagCategoryName: str, tags: [map], urlSlug: str, version: int(int32), webLinks: [map]}, id: int(int32), message: str}
@returns(200) {author: map{active: bool, groupId: str, knownLanguages: [map]?, mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, memberSince: str(date-time), oldUsernames: [map]?, verifiedArtist: bool, id: int(int32), name: str?}, authorName: str?, created: str(date-time), entry: map{activityDate: str(date-time)?, additionalNames: str?, artistString: str?, artistType: str, createDate: str(date-time), defaultName: str?, defaultNameLanguage: str, description: str?, discType: str, entryType: str, eventCategory: str, id: int(int32), mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, name: str?, names: [map]?, pvs: [map]?, songListFeaturedCategory: str, songType: str, status: str, releaseEventSeriesName: str?, tagCategoryName: str?, tags: [map]?, urlSlug: str?, version: int(int32), webLinks: [map]?}, id: int(int32), message: str?}

@endpoint GET /api/entries
@optional {query: str=, tagName[]: [str], tagId[]: [int(int32)], childTags: bool=false, entryTypes: str, status: str, start: int(int32)=0, maxResults: int(int32)=10, getTotalCount: bool=false, sort: str, nameMatchMode: str, fields: str, lang: str}
@returns(200) {items: [map]?, term: str?, totalCount: int(int32)}

@endpoint GET /api/entries/random
@optional {entryType: str}
@returns(200) {entryType: str, id: int(int32)}

@endpoint GET /api/entries/names
@optional {query: str=, nameMatchMode: str, maxResults: int(int32)=10}
@returns(200)

@endpoint GET /api/entry-types/{entryType}/{subType}/tag
@required {entryType: str, subType: str}
@optional {fields: str}
@returns(200) {additionalNames: str?, aliasedTo: map{additionalNames: str?, categoryName: str?, id: int(int32), name: str?, urlSlug: str?}, categoryName: str?, createDate: str(date-time), defaultNameLanguage: str, description: str?, id: int(int32), mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, name: str?, names: [map]?, parent: map{additionalNames: str?, categoryName: str?, id: int(int32), name: str?, urlSlug: str?}, relatedTags: [map]?, status: str, targets: int(int32), newTargets: [str]?, translatedDescription: map{english: str?, original: str?}, urlSlug: str?, usageCount: int(int32), version: int(int32), webLinks: [map]?}

@endpoint GET /api/pvs/for-songs
@optional {name: str, author: str, service: str, maxResults: int(int32)=10, getTotalCount: bool=false, lang: str}
@returns(200) {items: [map]?, term: str?, totalCount: int(int32)}

@endpoint GET /api/pvs/thumbnail
@optional {pvUrl: str}
@returns(200)

@endpoint DELETE /api/releaseEvents/{id}
@required {id: int(int32)}
@optional {notes: str=, hardDelete: bool=false}
@returns(200)

@endpoint GET /api/releaseEvents/{id}
@required {id: int(int32)}
@optional {fields: str, lang: str}
@returns(200) {additionalNames: str?, artists: [map]?, category: str, date: str(date-time)?, description: str?, endDate: str(date-time)?, id: int(int32), mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, name: str?, names: [map]?, pvs: [map]?, series: map{additionalNames: str?, category: str, deleted: bool, description: str?, id: int(int32), name: str?, pictureMime: str?, status: str, urlSlug: str?, version: int(int32), webLinks: [map]?}, seriesId: int(int32)?, seriesNumber: int(int32), seriesSuffix: str?, songList: map{featuredCategory: str, id: int(int32), name: str?}, status: str, tags: [map]?, urlSlug: str?, venue: map{additionalNames: str?, address: str?, addressCountryCode: str?, coordinates: map{formatted: str?, hasValue: bool, latitude: num(double)?, longitude: num(double)?}, deleted: bool, description: str?, events: [map]?, id: int(int32), name: str?, names: [map]?, status: str, version: int(int32), webLinks: [map]?}, venueName: str?, version: int(int32), webLinks: [map]?}

@endpoint GET /api/releaseEvents/{eventId}/albums
@required {eventId: int(int32)}
@optional {fields: str, lang: str}
@returns(200)

@endpoint GET /api/releaseEvents/{eventId}/published-songs
@required {eventId: int(int32)}
@optional {fields: str, lang: str}
@returns(200)

@endpoint GET /api/releaseEvents
@optional {query: str=, nameMatchMode: str, seriesId: int(int32)=0, afterDate: str(date-time), beforeDate: str(date-time), category: str, userCollectionId: int(int32), tagId[]: [int(int32)], childTags: bool=false, artistId[]: [int(int32)], childVoicebanks: bool=false, includeMembers: bool=false, status: str, start: int(int32)=0, maxResults: int(int32)=10, getTotalCount: bool=false, sort: str, fields: str, lang: str, sortDirection: str}
@returns(200) {items: [map]?, term: str?, totalCount: int(int32)}

@endpoint GET /api/releaseEvents/names
@optional {query: str=, maxResults: int(int32)=10}
@returns(200)

@endpoint POST /api/releaseEvents/{eventId}/reports
@required {eventId: int(int32)}
@optional {reportType: str, notes: str, versionNumber: int(int32)}
@returns(200)

@endpoint DELETE /api/releaseEventSeries/{id}
@required {id: int(int32)}
@optional {notes: str=, hardDelete: bool=false}
@returns(200)

@endpoint GET /api/releaseEventSeries/{id}
@required {id: int(int32)}
@optional {fields: str, lang: str}
@returns(200) {additionalNames: str?, category: str, description: str?, events: [map]?, id: int(int32), mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, name: str?, names: [map]?, status: str, urlSlug: str?, version: int(int32), webLinks: [map]?}

@endpoint GET /api/releaseEventSeries
@optional {query: str=, fields: str, start: int(int32)=0, maxResults: int(int32)=10, getTotalCount: bool=false, nameMatchMode: str, lang: str}
@returns(200) {items: [map]?, term: str?, totalCount: int(int32)}

@endpoint GET /api/releaseEventSeries/{id}/for-edit
@required {id: int(int32)}
@returns(200) {category: str, defaultNameLanguage: str, deleted: bool, description: str?, id: int(int32), mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, name: str?, names: [map]?, status: str, updateNotes: str?, webLinks: [map]?}

@endpoint GET /api/resources/{cultureCode}
@required {cultureCode: str}
@optional {setNames[]: [str]}
@returns(200)

@endpoint DELETE /api/songs/comments/{commentId}
@required {commentId: int(int32)}
@returns(200)

@endpoint POST /api/songs/comments/{commentId}
@required {commentId: int(int32)}
@optional {author: map{active: bool, groupId: str, knownLanguages: [map], mainPicture: map, memberSince: str(date-time), oldUsernames: [map], verifiedArtist: bool, id: int(int32), name: str}, authorName: str, created: str(date-time), entry: map{activityDate: str(date-time), additionalNames: str, artistString: str, artistType: str, createDate: str(date-time), defaultName: str, defaultNameLanguage: str, description: str, discType: str, entryType: str, eventCategory: str, id: int(int32), mainPicture: map, name: str, names: [map], pvs: [map], songListFeaturedCategory: str, songType: str, status: str, releaseEventSeriesName: str, tagCategoryName: str, tags: [map], urlSlug: str, version: int(int32), webLinks: [map]}, id: int(int32), message: str}
@returns(200)

@endpoint DELETE /api/songs/{id}
@required {id: int(int32)}
@optional {notes: str=}
@returns(200)

@endpoint GET /api/songs/{id}
@required {id: int(int32)}
@optional {fields: str, lang: str}
@returns(200) {additionalNames: str?, albums: [map]?, artists: [map]?, artistString: str?, createDate: str(date-time), defaultName: str?, defaultNameLanguage: str, deleted: bool, favoritedTimes: int(int32), id: int(int32), lengthSeconds: int(int32), lyrics: [map]?, mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, maxMilliBpm: int(int32)?, mergedTo: int(int32), minMilliBpm: int(int32)?, name: str?, names: [map]?, originalVersionId: int(int32), publishDate: str(date-time)?, pvs: [map]?, pvServices: str, ratingScore: int(int32), releaseEvent: map{additionalNames: str?, artists: [map]?, category: str, date: str(date-time)?, description: str?, endDate: str(date-time)?, id: int(int32), mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, name: str?, names: [map]?, pvs: [map]?, series: map{additionalNames: str?, category: str, deleted: bool, description: str?, id: int(int32), name: str?, pictureMime: str?, status: str, urlSlug: str?, version: int(int32), webLinks: [map]?}, seriesId: int(int32)?, seriesNumber: int(int32), seriesSuffix: str?, songList: map{featuredCategory: str, id: int(int32), name: str?}, status: str, tags: [map]?, urlSlug: str?, venue: map{additionalNames: str?, address: str?, addressCountryCode: str?, coordinates: map{formatted: str?, hasValue: bool, latitude: num(double)?, longitude: num(double)?}, deleted: bool, description: str?, events: [map]?, id: int(int32), name: str?, names: [map]?, status: str, version: int(int32), webLinks: [map]?}, venueName: str?, version: int(int32), webLinks: [map]?}, releaseEvents: [map]?, songType: str, status: str, tags: [map]?, thumbUrl: str?, version: int(int32), webLinks: [map]?, cultureCodes: [str]?}

@endpoint GET /api/songs/{id}/comments
@required {id: int(int32)}
@returns(200)

@endpoint POST /api/songs/{id}/comments
@required {id: int(int32)}
@optional {author: map{active: bool, groupId: str, knownLanguages: [map], mainPicture: map, memberSince: str(date-time), oldUsernames: [map], verifiedArtist: bool, id: int(int32), name: str}, authorName: str, created: str(date-time), entry: map{activityDate: str(date-time), additionalNames: str, artistString: str, artistType: str, createDate: str(date-time), defaultName: str, defaultNameLanguage: str, description: str, discType: str, entryType: str, eventCategory: str, id: int(int32), mainPicture: map, name: str, names: [map], pvs: [map], songListFeaturedCategory: str, songType: str, status: str, releaseEventSeriesName: str, tagCategoryName: str, tags: [map], urlSlug: str, version: int(int32), webLinks: [map]}, id: int(int32), message: str}
@returns(200) {author: map{active: bool, groupId: str, knownLanguages: [map]?, mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, memberSince: str(date-time), oldUsernames: [map]?, verifiedArtist: bool, id: int(int32), name: str?}, authorName: str?, created: str(date-time), entry: map{activityDate: str(date-time)?, additionalNames: str?, artistString: str?, artistType: str, createDate: str(date-time), defaultName: str?, defaultNameLanguage: str, description: str?, discType: str, entryType: str, eventCategory: str, id: int(int32), mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, name: str?, names: [map]?, pvs: [map]?, songListFeaturedCategory: str, songType: str, status: str, releaseEventSeriesName: str?, tagCategoryName: str?, tags: [map]?, urlSlug: str?, version: int(int32), webLinks: [map]?}, id: int(int32), message: str?}

@endpoint GET /api/songs/{id}/derived
@required {id: int(int32)}
@optional {fields: str, lang: str}
@returns(200)

@endpoint GET /api/songs/highlighted
@optional {languagePreference: str, fields: str}
@returns(200)

@endpoint GET /api/songs/{id}/ratings
@required {id: int(int32)}
@optional {userFields: str, lang: str}
@returns(200)

@endpoint POST /api/songs/{id}/ratings
@required {id: int(int32)}
@optional {rating: str(Nothing/Dislike/Like/Favorite)}
@returns(200)

@endpoint GET /api/songs/{id}/related
@required {id: int(int32)}
@optional {fields: str, lang: str}
@returns(200) {artistMatches: [map]?, likeMatches: [map]?, tagMatches: [map]?}

@endpoint GET /api/songs
@optional {query: str=, songTypes: str, afterDate: str(date-time), beforeDate: str(date-time), tagName[]: [str], tagId[]: [int(int32)], childTags: bool=false, unifyTypesAndTags: bool=false, artistId[]: [int(int32)], artistParticipationStatus: str, childVoicebanks: bool=false, includeMembers: bool=false, onlyWithPvs: bool=false, pvServices: str, since: int(int32), minScore: int(int32), userCollectionId: int(int32), releaseEventId: int(int32), parentSongId: int(int32), status: str, advancedFilters: [map], start: int(int32)=0, maxResults: int(int32)=10, getTotalCount: bool=false, sort: str, preferAccurateMatches: bool=false, nameMatchMode: str, fields: str, lang: str, minMilliBpm: int(int32), maxMilliBpm: int(int32), minLength: int(int32), maxLength: int(int32), language: str, languages[]: [str], excludedTagIds[]: [int(int32)]}
@returns(200) {items: [map]?, term: str?, totalCount: int(int32)}

@endpoint GET /api/songs/lyrics/{lyricsId}
@required {lyricsId: int(int32)}
@returns(200) {cultureCodes: [str]?, id: int(int32), source: str?, translationType: str, url: str?, value: str?}

@endpoint GET /api/songs/names
@optional {query: str=, nameMatchMode: str, maxResults: int(int32)=15}
@returns(200)

@endpoint GET /api/songs/byPv
@optional {pvService: str, pvId: str, fields: str, lang: str}
@returns(200) {additionalNames: str?, albums: [map]?, artists: [map]?, artistString: str?, createDate: str(date-time), defaultName: str?, defaultNameLanguage: str, deleted: bool, favoritedTimes: int(int32), id: int(int32), lengthSeconds: int(int32), lyrics: [map]?, mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, maxMilliBpm: int(int32)?, mergedTo: int(int32), minMilliBpm: int(int32)?, name: str?, names: [map]?, originalVersionId: int(int32), publishDate: str(date-time)?, pvs: [map]?, pvServices: str, ratingScore: int(int32), releaseEvent: map{additionalNames: str?, artists: [map]?, category: str, date: str(date-time)?, description: str?, endDate: str(date-time)?, id: int(int32), mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, name: str?, names: [map]?, pvs: [map]?, series: map{additionalNames: str?, category: str, deleted: bool, description: str?, id: int(int32), name: str?, pictureMime: str?, status: str, urlSlug: str?, version: int(int32), webLinks: [map]?}, seriesId: int(int32)?, seriesNumber: int(int32), seriesSuffix: str?, songList: map{featuredCategory: str, id: int(int32), name: str?}, status: str, tags: [map]?, urlSlug: str?, venue: map{additionalNames: str?, address: str?, addressCountryCode: str?, coordinates: map{formatted: str?, hasValue: bool, latitude: num(double)?, longitude: num(double)?}, deleted: bool, description: str?, events: [map]?, id: int(int32), name: str?, names: [map]?, status: str, version: int(int32), webLinks: [map]?}, venueName: str?, version: int(int32), webLinks: [map]?}, releaseEvents: [map]?, songType: str, status: str, tags: [map]?, thumbUrl: str?, version: int(int32), webLinks: [map]?, cultureCodes: [str]?}

@endpoint GET /api/songs/top-rated
@optional {durationHours: int(int32), startDate: str(date-time), filterBy: str, vocalist: str, maxResults: int(int32)=25, fields: str, languagePreference: str}
@returns(200)

@endpoint DELETE /api/songLists/{id}
@required {id: int(int32)}
@optional {notes: str=, hardDelete: bool=false}
@returns(200)

@endpoint DELETE /api/songLists/comments/{commentId}
@required {commentId: int(int32)}
@returns(200)

@endpoint POST /api/songLists/comments/{commentId}
@required {commentId: int(int32)}
@optional {author: map{active: bool, groupId: str, knownLanguages: [map], mainPicture: map, memberSince: str(date-time), oldUsernames: [map], verifiedArtist: bool, id: int(int32), name: str}, authorName: str, created: str(date-time), entry: map{activityDate: str(date-time), additionalNames: str, artistString: str, artistType: str, createDate: str(date-time), defaultName: str, defaultNameLanguage: str, description: str, discType: str, entryType: str, eventCategory: str, id: int(int32), mainPicture: map, name: str, names: [map], pvs: [map], songListFeaturedCategory: str, songType: str, status: str, releaseEventSeriesName: str, tagCategoryName: str, tags: [map], urlSlug: str, version: int(int32), webLinks: [map]}, id: int(int32), message: str}
@returns(200)

@endpoint GET /api/songLists/{listId}/comments
@required {listId: int(int32)}
@returns(200) {items: [map]?, term: str?, totalCount: int(int32)}

@endpoint POST /api/songLists/{listId}/comments
@required {listId: int(int32)}
@optional {author: map{active: bool, groupId: str, knownLanguages: [map], mainPicture: map, memberSince: str(date-time), oldUsernames: [map], verifiedArtist: bool, id: int(int32), name: str}, authorName: str, created: str(date-time), entry: map{activityDate: str(date-time), additionalNames: str, artistString: str, artistType: str, createDate: str(date-time), defaultName: str, defaultNameLanguage: str, description: str, discType: str, entryType: str, eventCategory: str, id: int(int32), mainPicture: map, name: str, names: [map], pvs: [map], songListFeaturedCategory: str, songType: str, status: str, releaseEventSeriesName: str, tagCategoryName: str, tags: [map], urlSlug: str, version: int(int32), webLinks: [map]}, id: int(int32), message: str}
@returns(200) {author: map{active: bool, groupId: str, knownLanguages: [map]?, mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, memberSince: str(date-time), oldUsernames: [map]?, verifiedArtist: bool, id: int(int32), name: str?}, authorName: str?, created: str(date-time), entry: map{activityDate: str(date-time)?, additionalNames: str?, artistString: str?, artistType: str, createDate: str(date-time), defaultName: str?, defaultNameLanguage: str, description: str?, discType: str, entryType: str, eventCategory: str, id: int(int32), mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, name: str?, names: [map]?, pvs: [map]?, songListFeaturedCategory: str, songType: str, status: str, releaseEventSeriesName: str?, tagCategoryName: str?, tags: [map]?, urlSlug: str?, version: int(int32), webLinks: [map]?}, id: int(int32), message: str?}

@endpoint GET /api/songLists/featured
@optional {query: str=, tagId[]: [int(int32)], childTags: bool=false, nameMatchMode: str, featuredCategory: str, start: int(int32)=0, maxResults: int(int32)=10, getTotalCount: bool=false, sort: str, fields: str, lang: str}
@returns(200) {items: [map]?, term: str?, totalCount: int(int32)}

@endpoint GET /api/songLists/featured/names
@optional {query: str=, nameMatchMode: str, featuredCategory: str, maxResults: int(int32)=10}
@returns(200)

@endpoint GET /api/songLists/{listId}/songs
@required {listId: int(int32)}
@optional {query: str=, songTypes: str, pvServices: str, tagId[]: [int(int32)], artistId[]: [int(int32)], childVoicebanks: bool=false, advancedFilters: [map], start: int(int32)=0, maxResults: int(int32)=10, getTotalCount: bool=false, sort: str, nameMatchMode: str, fields: str, lang: str}
@returns(200) {items: [map]?, term: str?, totalCount: int(int32)}

@endpoint POST /api/songLists
@optional {deleted: bool, description: str, eventDate: str(date-time), featuredCategory: str(Nothing/Concerts/VocaloidRanking/Pools/Other), id: int(int32), mainPicture: map{mime: str, name: str, urlOriginal: str, urlSmallThumb: str, urlThumb: str, urlTinyThumb: str}, name: str, songLinks: [map{songInListId: int(int32), notes: str, order: int(int32), song: map}], status: str(Draft/Finished/Approved/Locked), updateNotes: str}
@returns(200)

@endpoint DELETE /api/tags/{id}
@required {id: int(int32)}
@optional {notes: str=, hardDelete: bool=false}
@returns(200)

@endpoint GET /api/tags/{id}
@required {id: int(int32)}
@optional {fields: str, lang: str}
@returns(200) {additionalNames: str?, aliasedTo: map{additionalNames: str?, categoryName: str?, id: int(int32), name: str?, urlSlug: str?}, categoryName: str?, createDate: str(date-time), defaultNameLanguage: str, description: str?, id: int(int32), mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, name: str?, names: [map]?, parent: map{additionalNames: str?, categoryName: str?, id: int(int32), name: str?, urlSlug: str?}, relatedTags: [map]?, status: str, targets: int(int32), newTargets: [str]?, translatedDescription: map{english: str?, original: str?}, urlSlug: str?, usageCount: int(int32), version: int(int32), webLinks: [map]?}

@endpoint DELETE /api/tags/comments/{commentId}
@required {commentId: int(int32)}
@returns(200)

@endpoint POST /api/tags/comments/{commentId}
@required {commentId: int(int32)}
@optional {author: map{active: bool, groupId: str, knownLanguages: [map], mainPicture: map, memberSince: str(date-time), oldUsernames: [map], verifiedArtist: bool, id: int(int32), name: str}, authorName: str, created: str(date-time), entry: map{activityDate: str(date-time), additionalNames: str, artistString: str, artistType: str, createDate: str(date-time), defaultName: str, defaultNameLanguage: str, description: str, discType: str, entryType: str, eventCategory: str, id: int(int32), mainPicture: map, name: str, names: [map], pvs: [map], songListFeaturedCategory: str, songType: str, status: str, releaseEventSeriesName: str, tagCategoryName: str, tags: [map], urlSlug: str, version: int(int32), webLinks: [map]}, id: int(int32), message: str}
@returns(200)

@endpoint GET /api/tags/byName/{name}
@required {name: str}
@optional {fields: str, lang: str}
@returns(200) {additionalNames: str?, aliasedTo: map{additionalNames: str?, categoryName: str?, id: int(int32), name: str?, urlSlug: str?}, categoryName: str?, createDate: str(date-time), defaultNameLanguage: str, description: str?, id: int(int32), mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, name: str?, names: [map]?, parent: map{additionalNames: str?, categoryName: str?, id: int(int32), name: str?, urlSlug: str?}, relatedTags: [map]?, status: str, targets: int(int32), newTargets: [str]?, translatedDescription: map{english: str?, original: str?}, urlSlug: str?, usageCount: int(int32), version: int(int32), webLinks: [map]?}

@endpoint GET /api/tags/categoryNames
@optional {query: str=, nameMatchMode: str}
@returns(200)

@endpoint GET /api/tags/{tagId}/children
@required {tagId: int(int32)}
@optional {fields: str, lang: str}
@returns(200)

@endpoint GET /api/tags/{tagId}/comments
@required {tagId: int(int32)}
@returns(200) {items: [map]?, term: str?, totalCount: int(int32)}

@endpoint POST /api/tags/{tagId}/comments
@required {tagId: int(int32)}
@optional {author: map{active: bool, groupId: str, knownLanguages: [map], mainPicture: map, memberSince: str(date-time), oldUsernames: [map], verifiedArtist: bool, id: int(int32), name: str}, authorName: str, created: str(date-time), entry: map{activityDate: str(date-time), additionalNames: str, artistString: str, artistType: str, createDate: str(date-time), defaultName: str, defaultNameLanguage: str, description: str, discType: str, entryType: str, eventCategory: str, id: int(int32), mainPicture: map, name: str, names: [map], pvs: [map], songListFeaturedCategory: str, songType: str, status: str, releaseEventSeriesName: str, tagCategoryName: str, tags: [map], urlSlug: str, version: int(int32), webLinks: [map]}, id: int(int32), message: str}
@returns(200) {author: map{active: bool, groupId: str, knownLanguages: [map]?, mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, memberSince: str(date-time), oldUsernames: [map]?, verifiedArtist: bool, id: int(int32), name: str?}, authorName: str?, created: str(date-time), entry: map{activityDate: str(date-time)?, additionalNames: str?, artistString: str?, artistType: str, createDate: str(date-time), defaultName: str?, defaultNameLanguage: str, description: str?, discType: str, entryType: str, eventCategory: str, id: int(int32), mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, name: str?, names: [map]?, pvs: [map]?, songListFeaturedCategory: str, songType: str, status: str, releaseEventSeriesName: str?, tagCategoryName: str?, tags: [map]?, urlSlug: str?, version: int(int32), webLinks: [map]?}, id: int(int32), message: str?}

@endpoint GET /api/tags
@optional {query: str=, allowChildren: bool=true, categoryName: str=, start: int(int32)=0, maxResults: int(int32)=10, getTotalCount: bool=false, nameMatchMode: str, sort: str, preferAccurateMatches: bool=false, fields: str, lang: str, target: str, deleted: bool=false}
@returns(200) {items: [map]?, term: str?, totalCount: int(int32)}

@endpoint POST /api/tags
@optional {name: str}
@returns(200) {additionalNames: str?, categoryName: str?, id: int(int32), name: str?, urlSlug: str?}

@endpoint GET /api/tags/names
@optional {query: str=, allowAliases: bool=true, maxResults: int(int32)=10}
@returns(200)

@endpoint GET /api/tags/top
@optional {categoryName: str, entryType: str, maxResults: int(int32)=15, lang: str}
@returns(200)

@endpoint POST /api/tags/{tagId}/reports
@required {tagId: int(int32)}
@optional {reportType: str, notes: str, versionNumber: int(int32)}
@returns(200)

@endpoint DELETE /api/users/current/followedTags/{tagId}
@required {tagId: int(int32)}
@returns(200)

@endpoint POST /api/users/current/followedTags/{tagId}
@required {tagId: int(int32)}
@returns(200)

@endpoint DELETE /api/users/profileComments/{commentId}
@required {commentId: int(int32)}
@returns(200)

@endpoint POST /api/users/profileComments/{commentId}
@required {commentId: int(int32)}
@optional {author: map{active: bool, groupId: str, knownLanguages: [map], mainPicture: map, memberSince: str(date-time), oldUsernames: [map], verifiedArtist: bool, id: int(int32), name: str}, authorName: str, created: str(date-time), entry: map{activityDate: str(date-time), additionalNames: str, artistString: str, artistType: str, createDate: str(date-time), defaultName: str, defaultNameLanguage: str, description: str, discType: str, entryType: str, eventCategory: str, id: int(int32), mainPicture: map, name: str, names: [map], pvs: [map], songListFeaturedCategory: str, songType: str, status: str, releaseEventSeriesName: str, tagCategoryName: str, tags: [map], urlSlug: str, version: int(int32), webLinks: [map]}, id: int(int32), message: str}
@returns(200)

@endpoint GET /api/users/{id}/albums
@required {id: int(int32)}
@optional {query: str=, tagId: int(int32), tag: str, artistId: int(int32), purchaseStatuses: str, releaseEventId: int(int32)=0, albumTypes: str, advancedFilters: [map], start: int(int32)=0, maxResults: int(int32)=10, getTotalCount: bool=false, sort: str, nameMatchMode: str, fields: str, lang: str, mediaType: str}
@returns(200) {items: [map]?, term: str?, totalCount: int(int32)}

@endpoint GET /api/users/current
@optional {fields: str}
@returns(200) {active: bool, groupId: str, knownLanguages: [map]?, mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, memberSince: str(date-time), oldUsernames: [map]?, verifiedArtist: bool, id: int(int32), name: str?}

@endpoint GET /api/users/{id}/events
@required {id: int(int32)}
@optional {relationshipType: str}
@returns(200)

@endpoint GET /api/users/{id}/followedArtists
@required {id: int(int32)}
@optional {query: str=, tagId[]: [int(int32)], artistType: str, start: int(int32)=0, maxResults: int(int32)=10, getTotalCount: bool=false, sort: str, nameMatchMode: str, fields: str, lang: str}
@returns(200) {items: [map]?, term: str?, totalCount: int(int32)}

@endpoint GET /api/users
@optional {query: str=, groups: str, joinDateAfter: str(date-time), joinDateBefore: str(date-time), nameMatchMode: str, start: int(int32)=0, maxResults: int(int32)=10, getTotalCount: bool=false, sort: str, includeDisabled: bool=false, onlyVerified: bool=false, knowsLanguage: str, fields: str}
@returns(200) {items: [map]?, term: str?, totalCount: int(int32)}

@endpoint GET /api/users/{id}
@required {id: int(int32)}
@optional {fields: str}
@returns(200) {active: bool, groupId: str, knownLanguages: [map]?, mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, memberSince: str(date-time), oldUsernames: [map]?, verifiedArtist: bool, id: int(int32), name: str?}

@endpoint GET /api/users/messages/{messageId}
@required {messageId: int(int32)}
@returns(200) {body: str?, createdFormatted: str?, highPriority: bool, id: int(int32), inbox: str, read: bool, receiver: map{active: bool, groupId: str, knownLanguages: [map]?, mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, memberSince: str(date-time), oldUsernames: [map]?, verifiedArtist: bool, id: int(int32), name: str?}, sender: map{active: bool, groupId: str, knownLanguages: [map]?, mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, memberSince: str(date-time), oldUsernames: [map]?, verifiedArtist: bool, id: int(int32), name: str?}, subject: str?}

@endpoint GET /api/users/{id}/messages
@required {id: int(int32)}
@optional {inbox: str, unread: bool=false, anotherUserId: int(int32), start: int(int32)=0, maxResults: int(int32)=10, getTotalCount: bool=false}
@returns(200) {items: [map]?, term: str?, totalCount: int(int32)}

@endpoint DELETE /api/users/{id}/messages
@required {id: int(int32)}
@optional {messageId: [int(int32)]}
@returns(200)

@endpoint POST /api/users/{id}/messages
@required {id: int(int32)}
@optional {body: str, createdFormatted: str, highPriority: bool, id: int(int32), inbox: str(Nothing/Received/Sent/Notifications), read: bool, receiver: map{active: bool, groupId: str, knownLanguages: [map], mainPicture: map, memberSince: str(date-time), oldUsernames: [map], verifiedArtist: bool, id: int(int32), name: str}, sender: map{active: bool, groupId: str, knownLanguages: [map], mainPicture: map, memberSince: str(date-time), oldUsernames: [map], verifiedArtist: bool, id: int(int32), name: str}, subject: str}
@returns(200) {body: str?, createdFormatted: str?, highPriority: bool, id: int(int32), inbox: str, read: bool, receiver: map{active: bool, groupId: str, knownLanguages: [map]?, mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, memberSince: str(date-time), oldUsernames: [map]?, verifiedArtist: bool, id: int(int32), name: str?}, sender: map{active: bool, groupId: str, knownLanguages: [map]?, mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, memberSince: str(date-time), oldUsernames: [map]?, verifiedArtist: bool, id: int(int32), name: str?}, subject: str?}

@endpoint GET /api/users/names
@optional {query: str=, nameMatchMode: str, maxResults: int(int32)=10, includeDisabled: bool=false}
@returns(200)

@endpoint GET /api/users/{id}/profileComments
@required {id: int(int32)}
@optional {start: int(int32)=0, maxResults: int(int32)=10, getTotalCount: bool=false}
@returns(200) {items: [map]?, term: str?, totalCount: int(int32)}

@endpoint POST /api/users/{id}/profileComments
@required {id: int(int32)}
@optional {author: map{active: bool, groupId: str, knownLanguages: [map], mainPicture: map, memberSince: str(date-time), oldUsernames: [map], verifiedArtist: bool, id: int(int32), name: str}, authorName: str, created: str(date-time), entry: map{activityDate: str(date-time), additionalNames: str, artistString: str, artistType: str, createDate: str(date-time), defaultName: str, defaultNameLanguage: str, description: str, discType: str, entryType: str, eventCategory: str, id: int(int32), mainPicture: map, name: str, names: [map], pvs: [map], songListFeaturedCategory: str, songType: str, status: str, releaseEventSeriesName: str, tagCategoryName: str, tags: [map], urlSlug: str, version: int(int32), webLinks: [map]}, id: int(int32), message: str}
@returns(200) {author: map{active: bool, groupId: str, knownLanguages: [map]?, mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, memberSince: str(date-time), oldUsernames: [map]?, verifiedArtist: bool, id: int(int32), name: str?}, authorName: str?, created: str(date-time), entry: map{activityDate: str(date-time)?, additionalNames: str?, artistString: str?, artistType: str, createDate: str(date-time), defaultName: str?, defaultNameLanguage: str, description: str?, discType: str, entryType: str, eventCategory: str, id: int(int32), mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, name: str?, names: [map]?, pvs: [map]?, songListFeaturedCategory: str, songType: str, status: str, releaseEventSeriesName: str?, tagCategoryName: str?, tags: [map]?, urlSlug: str?, version: int(int32), webLinks: [map]?}, id: int(int32), message: str?}

@endpoint GET /api/users/{id}/ratedSongs
@required {id: int(int32)}
@optional {query: str=, tagName: str, tagId[]: [int(int32)], artistId[]: [int(int32)], childVoicebanks: bool=false, artistGrouping: str, rating: str, songListId: int(int32), groupByRating: bool=true, pvServices: str, advancedFilters: [map], start: int(int32)=0, maxResults: int(int32)=10, getTotalCount: bool=false, sort: str, nameMatchMode: str, fields: str, lang: str}
@returns(200) {items: [map]?, term: str?, totalCount: int(int32)}

@endpoint GET /api/users/{id}/songLists
@required {id: int(int32)}
@optional {query: str=, tagId[]: [int(int32)], childTags: bool=false, nameMatchMode: str, start: int(int32)=0, maxResults: int(int32)=10, getTotalCount: bool=false, sort: str, fields: str}
@returns(200) {items: [map]?, term: str?, totalCount: int(int32)}

@endpoint GET /api/users/{id}/ratedSongs/{songId}
@required {id: int(int32), songId: int(int32)}
@returns(200)

@endpoint GET /api/users/current/ratedSongs/{songId}
@required {songId: int(int32)}
@returns(200)

@endpoint POST /api/users/current/albums/{albumId}
@required {albumId: int(int32)}
@optional {collectionStatus: str, mediaType: str, rating: int(int32)}
@returns(200)

@endpoint POST /api/users/current/refreshEntryEdit
@optional {entryType: str, entryId: int(int32)}
@returns(200) {time: str(date-time), userId: int(int32), userName: str?}

@endpoint POST /api/users/{id}/reports
@required {id: int(int32)}
@optional {reportType: str(MaliciousIP/Spamming/RemovePermissions/Other), reason: str}
@returns(200)

@endpoint POST /api/users/current/songTags/{songId}
@required {songId: int(int32)}
@returns(200)

@endpoint POST /api/users/{id}/settings/{settingName}
@required {id: int(int32), settingName: str}
@returns(200)

@endpoint GET /api/users/{id}/followedArtists/{artistId}
@required {id: int(int32), artistId: int(int32)}
@returns(200) {artist: map{additionalNames: str?, artistLinks: [map]?, artistLinksReverse: [map]?, artistType: str, baseVoicebank: map{additionalNames: str?, artistType: str, deleted: bool, id: int(int32), name: str?, pictureMime: str?, releaseDate: str(date-time)?, status: str, version: int(int32)}, createDate: str(date-time), defaultName: str?, defaultNameLanguage: str, deleted: bool, description: str?, id: int(int32), mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, mergedTo: int(int32), name: str?, names: [map]?, pictureMime: str?, relations: map{latestAlbums: [map]?, latestEvents: [map]?, latestSongs: [map]?, popularAlbums: [map]?, popularSongs: [map]?}, releaseDate: str(date-time)?, status: str, tags: [map]?, version: int(int32), webLinks: [map]?}, id: int(int32)}

@endpoint GET /api/users/current/followedArtists/{artistId}
@required {artistId: int(int32)}
@returns(200) {artist: map{additionalNames: str?, artistLinks: [map]?, artistLinksReverse: [map]?, artistType: str, baseVoicebank: map{additionalNames: str?, artistType: str, deleted: bool, id: int(int32), name: str?, pictureMime: str?, releaseDate: str(date-time)?, status: str, version: int(int32)}, createDate: str(date-time), defaultName: str?, defaultNameLanguage: str, deleted: bool, description: str?, id: int(int32), mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, mergedTo: int(int32), name: str?, names: [map]?, pictureMime: str?, relations: map{latestAlbums: [map]?, latestEvents: [map]?, latestSongs: [map]?, popularAlbums: [map]?, popularSongs: [map]?}, releaseDate: str(date-time)?, status: str, tags: [map]?, version: int(int32), webLinks: [map]?}, id: int(int32)}

@endpoint GET /api/users/{id}/album-collection-statuses/{albumId}
@required {id: int(int32), albumId: int(int32)}
@returns(200) {album: map{additionalNames: str?, artists: [map]?, artistString: str?, barcode: str?, catalogNumber: str?, createDate: str(date-time), defaultName: str?, defaultNameLanguage: str, deleted: bool, description: str?, discs: [map]?, discType: str, id: int(int32), identifiers: [map]?, mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, mergedTo: int(int32), name: str?, names: [map]?, pvs: [map]?, ratingAverage: num(double), ratingCount: int(int32), releaseDate: map{day: int(int32)?, isEmpty: bool, month: int(int32)?, year: int(int32)?}, releaseEvent: map{additionalNames: str?, artists: [map]?, category: str, date: str(date-time)?, description: str?, endDate: str(date-time)?, id: int(int32), mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, name: str?, names: [map]?, pvs: [map]?, series: map{additionalNames: str?, category: str, deleted: bool, description: str?, id: int(int32), name: str?, pictureMime: str?, status: str, urlSlug: str?, version: int(int32), webLinks: [map]?}, seriesId: int(int32)?, seriesNumber: int(int32), seriesSuffix: str?, songList: map{featuredCategory: str, id: int(int32), name: str?}, status: str, tags: [map]?, urlSlug: str?, venue: map{additionalNames: str?, address: str?, addressCountryCode: str?, coordinates: map, deleted: bool, description: str?, events: [map]?, id: int(int32), name: str?, names: [map]?, status: str, version: int(int32), webLinks: [map]?}, venueName: str?, version: int(int32), webLinks: [map]?}, releaseEvents: [map]?, status: str, tags: [map]?, tracks: [map]?, version: int(int32), webLinks: [map]?}, mediaType: str, purchaseStatus: str, rating: int(int32), user: map{active: bool, groupId: str, knownLanguages: [map]?, mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, memberSince: str(date-time), oldUsernames: [map]?, verifiedArtist: bool, id: int(int32), name: str?}}

@endpoint GET /api/users/current/album-collection-statuses/{albumId}
@required {albumId: int(int32)}
@returns(200) {album: map{additionalNames: str?, artists: [map]?, artistString: str?, barcode: str?, catalogNumber: str?, createDate: str(date-time), defaultName: str?, defaultNameLanguage: str, deleted: bool, description: str?, discs: [map]?, discType: str, id: int(int32), identifiers: [map]?, mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, mergedTo: int(int32), name: str?, names: [map]?, pvs: [map]?, ratingAverage: num(double), ratingCount: int(int32), releaseDate: map{day: int(int32)?, isEmpty: bool, month: int(int32)?, year: int(int32)?}, releaseEvent: map{additionalNames: str?, artists: [map]?, category: str, date: str(date-time)?, description: str?, endDate: str(date-time)?, id: int(int32), mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, name: str?, names: [map]?, pvs: [map]?, series: map{additionalNames: str?, category: str, deleted: bool, description: str?, id: int(int32), name: str?, pictureMime: str?, status: str, urlSlug: str?, version: int(int32), webLinks: [map]?}, seriesId: int(int32)?, seriesNumber: int(int32), seriesSuffix: str?, songList: map{featuredCategory: str, id: int(int32), name: str?}, status: str, tags: [map]?, urlSlug: str?, venue: map{additionalNames: str?, address: str?, addressCountryCode: str?, coordinates: map, deleted: bool, description: str?, events: [map]?, id: int(int32), name: str?, names: [map]?, status: str, version: int(int32), webLinks: [map]?}, venueName: str?, version: int(int32), webLinks: [map]?}, releaseEvents: [map]?, status: str, tags: [map]?, tracks: [map]?, version: int(int32), webLinks: [map]?}, mediaType: str, purchaseStatus: str, rating: int(int32), user: map{active: bool, groupId: str, knownLanguages: [map]?, mainPicture: map{mime: str?, name: str?, urlOriginal: str?, urlSmallThumb: str?, urlThumb: str?, urlTinyThumb: str?}, memberSince: str(date-time), oldUsernames: [map]?, verifiedArtist: bool, id: int(int32), name: str?}}

@endpoint DELETE /api/venues/{id}
@required {id: int(int32)}
@optional {notes: str=, hardDelete: bool=false}
@returns(200)

@endpoint GET /api/venues
@optional {query: str=, fields: str, start: int(int32)=0, maxResults: int(int32)=10, getTotalCount: bool=false, nameMatchMode: str, lang: str, sortRule: str, latitude: num(double), longitude: num(double), radius: num(double), distanceUnit: str}
@returns(200) {items: [map]?, term: str?, totalCount: int(int32)}

@endpoint POST /api/venues/{id}/reports
@required {id: int(int32)}
@optional {reportType: str, notes: str, versionNumber: int(int32)}
@returns(200)

@end
