curl --request GET \
--url https://www.fmdb.net/api/releases \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.fmdb.net/api/releases"
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/releases', 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/releases",
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/releases"
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/releases")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.fmdb.net/api/releases")
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": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"title": "The Godfather",
"_type": "album",
"disambiguation": "Complete Score",
"releasedate": "2024-01-15",
"country": "US",
"catalognumber": "VS-5051",
"copies": 5000,
"notes": "Limited edition release.",
"slug": "the-godfather-complete-score",
"published": true,
"locked": false,
"lifecycle_status": "released",
"created_at": "2024-01-15T10:00:00+00:00",
"updated_at": "2024-01-15T14:30:00+00:00",
"total_tracks": 12,
"total_duration": 3600,
"artists": [
{
"iri": "/api/artists/a1b2c3d4",
"id": "a1b2c3d4",
"name": "Hans Zimmer",
"name_variation": null,
"name_variation_id": null,
"position": 0,
"join_phrase": " feat. ",
"credit_role": "main"
},
{
"iri": "/api/artists/b2c3d4e5",
"id": "b2c3d4e5",
"name": "Lisa Gerrard",
"name_variation": null,
"name_variation_id": null,
"position": 1,
"join_phrase": null,
"credit_role": "featured"
}
],
"artist_credit": "Hans Zimmer feat. Lisa Gerrard",
"labels": [
{}
],
"productions": [
{}
],
"credits": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"artist": {
"iri": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
},
"roles": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"role": "<string>",
"scope": "<string>"
}
],
"disambiguation": "<string>",
"role_disambiguations": {},
"name_variation": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"variation": "<string>"
}
}
],
"images": [
{}
],
"identifiers": [
{}
],
"track_labels": [
{}
],
"packaging_type": {
"id": "a1b2c3d4-1111-4000-8000-000000000001",
"name": "Jewel Case",
"slug": "jewel-case"
},
"tags": [
"score",
"orchestral"
],
"formats": [
{}
],
"recordings": [
{}
]
}
}
],
"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."
}
]
}List releases
Lists published releases. Drafts are listed only when an editor asks for them with published=false, and locked releases only to editors. The same rules apply with and without q. A JSON:API sparse fieldset narrows each release to the attributes it names, e.g. fields[Release]=title,releasedate,artist_credit,labels; recordings and credits are left out unless named.
curl --request GET \
--url https://www.fmdb.net/api/releases \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.fmdb.net/api/releases"
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/releases', 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/releases",
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/releases"
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/releases")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.fmdb.net/api/releases")
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": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"title": "The Godfather",
"_type": "album",
"disambiguation": "Complete Score",
"releasedate": "2024-01-15",
"country": "US",
"catalognumber": "VS-5051",
"copies": 5000,
"notes": "Limited edition release.",
"slug": "the-godfather-complete-score",
"published": true,
"locked": false,
"lifecycle_status": "released",
"created_at": "2024-01-15T10:00:00+00:00",
"updated_at": "2024-01-15T14:30:00+00:00",
"total_tracks": 12,
"total_duration": 3600,
"artists": [
{
"iri": "/api/artists/a1b2c3d4",
"id": "a1b2c3d4",
"name": "Hans Zimmer",
"name_variation": null,
"name_variation_id": null,
"position": 0,
"join_phrase": " feat. ",
"credit_role": "main"
},
{
"iri": "/api/artists/b2c3d4e5",
"id": "b2c3d4e5",
"name": "Lisa Gerrard",
"name_variation": null,
"name_variation_id": null,
"position": 1,
"join_phrase": null,
"credit_role": "featured"
}
],
"artist_credit": "Hans Zimmer feat. Lisa Gerrard",
"labels": [
{}
],
"productions": [
{}
],
"credits": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"artist": {
"iri": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
},
"roles": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"role": "<string>",
"scope": "<string>"
}
],
"disambiguation": "<string>",
"role_disambiguations": {},
"name_variation": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"variation": "<string>"
}
}
],
"images": [
{}
],
"identifiers": [
{}
],
"track_labels": [
{}
],
"packaging_type": {
"id": "a1b2c3d4-1111-4000-8000-000000000001",
"name": "Jewel Case",
"slug": "jewel-case"
},
"tags": [
"score",
"orchestral"
],
"formats": [
{}
],
"recordings": [
{}
]
}
}
],
"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
Allows you to reduce the response to contain only the properties you need. If your desired property is nested, you can address it using nested arrays. Example: properties[]={propertyName}&properties[]={anotherPropertyName}&properties[{nestedPropertyParent}][]={nestedProperty}
announced, released, canceled announced, released, canceled Release title
Release title
Release country
Release country
Release type
Release production
Release label
Release barcode
Release discId
Release q
Editor-only; other callers get 403. false lists only unpublished releases (drafts), true (the default) only published ones.
Release order[title]
asc, desc, ASC, DESC Release order[releasedate]
asc, desc, ASC, DESC Release order[country]
asc, desc, ASC, DESC Release order[createdAt]
asc, desc, ASC, DESC 