List artist roles
curl --request GET \
--url https://www.fmdb.net/api/artists/roles \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.fmdb.net/api/artists/roles"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://www.fmdb.net/api/artists/roles', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://www.fmdb.net/api/artists/roles",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://www.fmdb.net/api/artists/roles"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://www.fmdb.net/api/artists/roles")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.fmdb.net/api/artists/roles")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "<string>",
"type": "<string>",
"attributes": {
"_id": "01934567-89ab-7cde-af01-23456789abcd",
"role": "Composer",
"slug": "composer",
"scope": "release",
"description_markdown": "Primary composer for the main theme",
"organization_applicable": false,
"aliases": [
"Composed by",
"Music by"
]
}
}
],
"links": {
"self": "string",
"first": "string",
"prev": "string",
"next": "string",
"last": "string"
},
"meta": {
"totalItems": 1,
"itemsPerPage": 1,
"currentPage": 1
}
}{
"errors": [
{
"status": "429",
"title": "Rate Limit Exceeded",
"detail": "You have exceeded the rate limit of 300 requests per 60 seconds. The budget resets at 2026-01-15T10:00:42+00:00."
}
]
}ArtistRole
List artist roles
List artist roles
GET
/
api
/
artists
/
roles
List artist roles
curl --request GET \
--url https://www.fmdb.net/api/artists/roles \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.fmdb.net/api/artists/roles"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://www.fmdb.net/api/artists/roles', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://www.fmdb.net/api/artists/roles",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://www.fmdb.net/api/artists/roles"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://www.fmdb.net/api/artists/roles")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.fmdb.net/api/artists/roles")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "<string>",
"type": "<string>",
"attributes": {
"_id": "01934567-89ab-7cde-af01-23456789abcd",
"role": "Composer",
"slug": "composer",
"scope": "release",
"description_markdown": "Primary composer for the main theme",
"organization_applicable": false,
"aliases": [
"Composed by",
"Music by"
]
}
}
],
"links": {
"self": "string",
"first": "string",
"prev": "string",
"next": "string",
"last": "string"
},
"meta": {
"totalItems": 1,
"itemsPerPage": 1,
"currentPage": 1
}
}{
"errors": [
{
"status": "429",
"title": "Rate Limit Exceeded",
"detail": "You have exceeded the rate limit of 300 requests per 60 seconds. The budget resets at 2026-01-15T10:00:42+00:00."
}
]
}Authorizations
API token authentication
Query Parameters
The collection page number
Available options:
asc, desc Exact (canonical) lookup. When true, the role filter returns only roles whose name equals the value verbatim, with no partial matching and no fuzzy ranking. On MySQL the comparison is case-insensitive. Default partial-matching behaviour applies when omitted or false.
Example:
true
