Gracenote GMD API v3 (Beta)

The beta third generation of the Global Music Data API, adding album masters, descriptor correlations, descriptor hierarchies and an entitlements lookup that lets a key ask what it is licensed for. Gracenote states in the specification itself that interfaces are subject to change, and it is the only Gracenote API that declares a full 400/401/403/404/429/500 error surface.

Operations 13

GET /artists/search Artist Text Search
GET /artists/lookup Lookup Artist(s) by ID
GET /artists/explore Explore Artist(s)
GET /recordings/search Recording Text Search
GET /recordings/lookup Lookup Recording(s) by ID
GET /recordings/explore Explore Recordings(s)
GET /albumEditions/search AlbumEdition Text Search
GET /albumEditions/lookup Lookup AlbumEdition(s) by ID
GET /albumEditions/explore Explore Album Edition(s)
GET /albumMasters/explore Explore Album Master(s)
GET /entitlements/lookup Lookup Entitlements
GET /descriptorCorrelations/lookup Calculate Artist and Recording similarity
GET /descriptorHierarchy/lookup Retrieve Structured Music Descriptor Taxonomies

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/gmd-api-v3"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

gracenote-gmd-api-v3-openapi.json Raw ↑
{
  "openapi": "3.1.1",
  "info": {
    "version": "3.0 Beta",
    "title": "GMD API v3.0 Beta",
    "description": "Gracenote Global Music Data (GMD) API V3.0 **Beta** Specification. Interfaces are subject to change.\n"
  },
  "tags": [
    {
      "name": "Artists",
      "description": "Artist in GMD is a recording artist with a unique identity and billing.\nAn Artist may be an individual, group, ensemble, or collaboration of any of these.\nAn Artist creates Recordings.\nRecordings are then released as Album Tracks on one or more Albums Editions.\n"
    },
    {
      "name": "Recordings",
      "description": "Recording in GMD is a perceptually unique audio Recording.\nVarious individual Album Track instances that have been released of the same\nRecording are identified as perceptually identical by comparing metadata and\nacoustic fingerprints. All such Album Track instances map to the same Recording ID\nand descriptive profile.\n"
    },
    {
      "name": "AlbumEditions",
      "description": "An Album Edition is a specific Edition of an Album Master - comprised of a unique\nconfiguration of Recordings.\n"
    },
    {
      "name": "AlbumMasters",
      "description": "An Album Master groups all known Album Editions for a given logical release and\nprovides a single, canonical view across those editions.\n\nThink of it as a \"parent\" that holds together the remastered version, the deluxe\nedition, regional variants, etc. — so you can show one clean entry per album\nin a discography instead of listing every re-release separately.\n\nEach Album Master has a `preferredEditionID` (the best-fit edition picked by\nGracenote's algorithms) and an `allAlbumEditions` array with every known variant.\n\n**How it fits together:**\nArtist → Album Master → Album Editions → Tracks → Recordings\n\n**Good to know:**\n- Only the `/albumMasters/explore` endpoint exists — there is no lookup or search.\n- If you need a specific master, filter by `artistIDs` and page through results,\n  or grab an Album Edition via `/albumEditions/lookup` and work backwards from there.\n"
    },
    {
      "name": "Entitlements",
      "description": "Entitlements represent authorization levels, determining the specific data access granted \nto a user based on their API key. All valid API keys are provisioned with the 'base' package at least. \nAPI keys may have additional packages and addOns assigned to them, granting extended functionality.\n"
    },
    {
      "name": "DescriptorCorrelations",
      "description": "The descriptor correlation request enables the computation of Artist and Recording\nsimilarity by providing numerical values representing similarity or dissimilarity.\nThese values can be used to inform music discovery and catalog navigation models\nand algorithms.\n"
    },
    {
      "name": "DescriptorHierarchies",
      "description": "Descriptor hierarchies provide structured access to Gracenote's comprehensive taxonomies of musical \ndescriptors including GENRES, LANGUAGES, ORIGINS, ERAS, ARTISTTYPES, MOODS, STYLES, and TEMPOS. Each hierarchy contains \norganized, multi-level categorical data with parent-child relationships that can be used for discovery of the music catalog.\n"
    }
  ],
  "paths": {
    "/artists/search": {
      "get": {
        "tags": [
          "Artists"
        ],
        "summary": "Artist Text Search",
        "description": "Text search for `Artist` objects using artist name.",
        "parameters": [
          {
            "$ref": "#/components/parameters/apiKeyParam"
          },
          {
            "$ref": "#/components/parameters/artistName"
          },
          {
            "$ref": "#/components/parameters/limit"
          },
          {
            "$ref": "#/components/parameters/offset"
          },
          {
            "$ref": "#/components/parameters/displayLanguage"
          },
          {
            "$ref": "#/components/parameters/genreList"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    },
                    "data": {
                      "type": "array",
                      "nullable": false,
                      "items": {
                        "$ref": "#/components/schemas/ArtistObject"
                      }
                    }
                  },
                  "required": [
                    "meta",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ErrorResponse400"
          }
        }
      }
    },
    "/artists/lookup": {
      "get": {
        "tags": [
          "Artists"
        ],
        "summary": "Lookup Artist(s) by ID",
        "description": "Get `Artist` object(s) by ID\n\n**Notes**\n* Objects are returned in order requested.\n* Only one object is returned per ID. *if the input ID matches multiple objects, only one will be returned.*\n* If an object is not found, a 404 is returned along with a message indicating which ID wasn't found.\n* Duplicate ids in the query will result in a 400 response.\n* GN TMS Person ID lookups require GN TMS Person ID add-on.\n\n**Example:** Lookup by Gracenote ID\n\n`https://.../artists/lookup?ids=GND6CJFDB6BH1X3&idType=artistID`\n\n**Example:** Lookup by  personID\n\n`https://.../artists/lookup?ids=521029&idType=personID`\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/apiKeyParam"
          },
          {
            "$ref": "#/components/parameters/idTypeArtists"
          },
          {
            "$ref": "#/components/parameters/ids"
          },
          {
            "$ref": "#/components/parameters/displayLanguage"
          },
          {
            "$ref": "#/components/parameters/genreList"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    },
                    "data": {
                      "type": "array",
                      "nullable": false,
                      "items": {
                        "$ref": "#/components/schemas/ArtistObject"
                      }
                    }
                  },
                  "required": [
                    "meta",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ErrorResponse400"
          },
          "404": {
            "$ref": "#/components/responses/ErrorResponse404"
          }
        }
      }
    },
    "/artists/explore": {
      "get": {
        "tags": [
          "Artists"
        ],
        "summary": "Explore Artist(s)",
        "description": "Get `Artist` object(s) - optionally filtered and sorted.\n\nWithout any query parameters, the `explore` Artists endpoint will return the most highly consumed artists Globally over the past year. Additional parameters including Gracenote Descriptors such as genres and origins can be added as parameters to further filter the set of retrievable artists.\n\n***Note: You can add an `artistID` filter parameter to allow using `includeRelatedArtists` to return artists that are related to the seed artist. Use `omitSeedArtists` to not include the seed Artist in the result set.***\n\n**Example:** Explore popular artists\n\n`https://.../artists/explore`\"\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/apiKeyParam"
          },
          {
            "$ref": "#/components/parameters/sortArtists"
          },
          {
            "$ref": "#/components/parameters/popularityRegion"
          },
          {
            "$ref": "#/components/parameters/artistIDs"
          },
          {
            "$ref": "#/components/parameters/includeRelatedArtists"
          },
          {
            "$ref": "#/components/parameters/genreIDs"
          },
          {
            "$ref": "#/components/parameters/originIDs"
          },
          {
            "$ref": "#/components/parameters/eraIDs"
          },
          {
            "$ref": "#/components/parameters/artistTypeIDs"
          },
          {
            "$ref": "#/components/parameters/languageIDs"
          },
          {
            "$ref": "#/components/parameters/limit"
          },
          {
            "$ref": "#/components/parameters/offset"
          },
          {
            "$ref": "#/components/parameters/displayLanguage"
          },
          {
            "$ref": "#/components/parameters/genreList"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    },
                    "data": {
                      "type": "array",
                      "nullable": false,
                      "items": {
                        "$ref": "#/components/schemas/ArtistObject"
                      }
                    }
                  },
                  "required": [
                    "meta",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ErrorResponse400"
          }
        }
      }
    },
    "/recordings/search": {
      "get": {
        "tags": [
          "Recordings"
        ],
        "summary": "Recording Text Search",
        "description": "Text search `Recording` objects using recording name and or artist name.\n\n**Note** that one of either recording or artist name is required.\n\nDue to ISRC consistency issues (e.g., duplicate or incorrect ISRC), ISRC matching is a lower priority than the other inputs.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/apiKeyParam"
          },
          {
            "$ref": "#/components/parameters/recordingName"
          },
          {
            "$ref": "#/components/parameters/artistName"
          },
          {
            "$ref": "#/components/parameters/isrc"
          },
          {
            "$ref": "#/components/parameters/limit"
          },
          {
            "$ref": "#/components/parameters/offset"
          },
          {
            "$ref": "#/components/parameters/displayLanguage"
          },
          {
            "$ref": "#/components/parameters/genreList"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    },
                    "data": {
                      "type": "array",
                      "nullable": false,
                      "items": {
                        "$ref": "#/components/schemas/RecordingObject"
                      }
                    }
                  },
                  "required": [
                    "meta",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ErrorResponse400"
          }
        }
      }
    },
    "/recordings/lookup": {
      "get": {
        "tags": [
          "Recordings"
        ],
        "summary": "Lookup Recording(s) by ID",
        "description": "Get `Recording` object(s) by ID\n\n**Notes**\n* Objects are returned in order requested.\n* Only one object is returned per ID. *so if the input ID matches multiple objects, only one will be returned.*\n* If an object is not found, a 404 is returned along with a message indicating which ID wasn't found.\n* Duplicate ids in the query will result in a 400 response.\n\n**Example:** Lookup by Gracenote recording ID\n\n`https://.../recordings/lookup?ids=GN0TR5Z86C868HS&idType=recordingID`\n\n**Example:** Lookup by ISRC\n\n`https://.../recordings/lookup?ids=DEY371001140&idType=isrc`\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/apiKeyParam"
          },
          {
            "$ref": "#/components/parameters/idTypeRecordings"
          },
          {
            "$ref": "#/components/parameters/ids"
          },
          {
            "$ref": "#/components/parameters/displayLanguage"
          },
          {
            "$ref": "#/components/parameters/genreList"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    },
                    "data": {
                      "type": "array",
                      "nullable": false,
                      "items": {
                        "$ref": "#/components/schemas/RecordingObject"
                      }
                    }
                  },
                  "required": [
                    "meta",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ErrorResponse400"
          },
          "404": {
            "$ref": "#/components/responses/ErrorResponse404"
          }
        }
      }
    },
    "/recordings/explore": {
      "get": {
        "tags": [
          "Recordings"
        ],
        "summary": "Explore Recordings(s)",
        "description": "Get `Recording` object(s) - optionally filtered and sorted.\n\nWithout any query parameters, the `explore` Recordings endpoint will return the most highly consumed recordings Globally over the past year.\n\n***Note: When adding an `artistID` filter parameter, the best practice is to set `includeRelatedArtists` to include `memberOfKeyArtists` and `memberOfCollaborations`. This will ensure a complete set of recordings for the given artist.***\n\n**Example:** Explore recordings by an artist\n\n`https://.../recordings/explore?artistIDs=GMGZZX800003Y64&includeRelatedArtists=memberOfKeyArtists,memberOfCollaborations`\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/apiKeyParam"
          },
          {
            "$ref": "#/components/parameters/artistIDs"
          },
          {
            "$ref": "#/components/parameters/includeRelatedArtists"
          },
          {
            "$ref": "#/components/parameters/sortRecordings"
          },
          {
            "$ref": "#/components/parameters/popularityRegion"
          },
          {
            "$ref": "#/components/parameters/genreIDs"
          },
          {
            "$ref": "#/components/parameters/originIDs"
          },
          {
            "$ref": "#/components/parameters/eraIDs"
          },
          {
            "$ref": "#/components/parameters/artistTypeIDs"
          },
          {
            "$ref": "#/components/parameters/moodIDs"
          },
          {
            "$ref": "#/components/parameters/tempoIDs"
          },
          {
            "$ref": "#/components/parameters/styleIDs"
          },
          {
            "$ref": "#/components/parameters/videoQuality"
          },
          {
            "$ref": "#/components/parameters/videoType"
          },
          {
            "$ref": "#/components/parameters/limit"
          },
          {
            "$ref": "#/components/parameters/offset"
          },
          {
            "$ref": "#/components/parameters/displayLanguage"
          },
          {
            "$ref": "#/components/parameters/genreList"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    },
                    "data": {
                      "type": "array",
                      "nullable": false,
                      "items": {
                        "$ref": "#/components/schemas/RecordingObject"
                      }
                    }
                  },
                  "required": [
                    "meta",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ErrorResponse400"
          }
        }
      }
    },
    "/albumEditions/search": {
      "get": {
        "tags": [
          "AlbumEditions"
        ],
        "summary": "AlbumEdition Text Search",
        "description": "Text search `AlbumEdition` objects using album edition name and artist name.\n\n\n**Note** that both albumEditionName and artistName are required inputs.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/apiKeyParam"
          },
          {
            "$ref": "#/components/parameters/albumEditionName"
          },
          {
            "$ref": "#/components/parameters/artistName"
          },
          {
            "$ref": "#/components/parameters/albumSearchRecordingName"
          },
          {
            "$ref": "#/components/parameters/releaseTypes"
          },
          {
            "$ref": "#/components/parameters/limit"
          },
          {
            "$ref": "#/components/parameters/offset"
          },
          {
            "$ref": "#/components/parameters/displayLanguage"
          },
          {
            "$ref": "#/components/parameters/genreList"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    },
                    "data": {
                      "type": "array",
                      "nullable": false,
                      "items": {
                        "$ref": "#/components/schemas/AlbumEditionObject"
                      }
                    }
                  },
                  "required": [
                    "meta",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ErrorResponse400"
          }
        }
      }
    },
    "/albumEditions/lookup": {
      "get": {
        "tags": [
          "AlbumEditions"
        ],
        "summary": "Lookup AlbumEdition(s) by ID",
        "description": "Get `AlbumEdition` object(s) by ID\n\n**Notes**\n* Objects are returned in order requested.\n* Only one object is returned per ID. *so if the input ID matches multiple objects, only one will be returned.*\n* If an object is not found, a 404 is returned along with a message indicating which ID wasn't found.\n* Duplicate ids in the query will result in a 400 response.\n\n**Example:** Lookup by Gracenote ID\n\n`https://.../albumEditions/lookup?ids=GN949Y7H6M9XNYP&idType=albumEditionID`\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/apiKeyParam"
          },
          {
            "$ref": "#/components/parameters/idTypeAlbumEditions"
          },
          {
            "$ref": "#/components/parameters/ids"
          },
          {
            "$ref": "#/components/parameters/displayLanguage"
          },
          {
            "$ref": "#/components/parameters/genreList"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    },
                    "data": {
                      "type": "array",
                      "nullable": false,
                      "items": {
                        "$ref": "#/components/schemas/AlbumEditionObject"
                      }
                    }
                  },
                  "required": [
                    "meta",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ErrorResponse400"
          },
          "404": {
            "$ref": "#/components/responses/ErrorResponse404"
          }
        }
      }
    },
    "/albumEditions/explore": {
      "get": {
        "tags": [
          "AlbumEditions"
        ],
        "summary": "Explore Album Edition(s)",
        "description": "Get `Album Edition` object(s) - optionally filtered and sorted.\n\nWithout any query parameters, the `explore` Album Editions endpoint will return a set of recent Album Editions to the end user.\n\nWhen filtering by `artistID`, we would suggest as a best practice to sort by `releaseYear` and filter on `mainCanon` release types.\n\n***Note: Filter by genreIDs is not yet supported.***\n\n**Example:** Explore main canon editions by an artist, sorted descending by release year\n\n`https://.../albumEditions/artistIDs=GMGZZX800003Y64&releaseTypes=mainCanon&sort=-releaseYear`\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/apiKeyParam"
          },
          {
            "$ref": "#/components/parameters/artistIDs"
          },
          {
            "$ref": "#/components/parameters/includeRelatedArtists"
          },
          {
            "$ref": "#/components/parameters/releaseTypes"
          },
          {
            "$ref": "#/components/parameters/sortAlbumEditions"
          },
          {
            "$ref": "#/components/parameters/includeAllEditions"
          },
          {
            "$ref": "#/components/parameters/genreIDs"
          },
          {
            "$ref": "#/components/parameters/limit"
          },
          {
            "$ref": "#/components/parameters/offset"
          },
          {
            "$ref": "#/components/parameters/displayLanguage"
          },
          {
            "$ref": "#/components/parameters/genreList"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    },
                    "data": {
                      "type": "array",
                      "nullable": false,
                      "items": {
                        "$ref": "#/components/schemas/AlbumEditionObject"
                      }
                    }
                  },
                  "required": [
                    "meta",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ErrorResponse400"
          }
        }
      }
    },
    "/albumMasters/explore": {
      "get": {
        "tags": [
          "AlbumMasters"
        ],
        "summary": "Explore Album Master(s)",
        "description": "Returns Album Master objects — one per logical album — so you can build a\ndiscography without worrying about duplicate editions.\n\nYou must supply at least one filter: `artistIDs`, `tmsIDs`, or\n`videoMusicReleaseType`. Combine them if you like; when more than one is\npresent they're ANDed together.\n\nIf you don't pass a `sort` parameter, results come back in newest-first\n(descending release year) order.\n\nThere's no lookup or search for Album Masters. If you already have an\nAlbum Edition ID, use `/albumEditions/lookup` and work from there instead.\n\n**Example:** Get an artist's albums, newest first\n`https://.../albumMasters/explore?artistIDs=GMGZZX800003Y64&sort=-releaseYear`\n\n**Example:** Find soundtracks tied to a TMS program\n`https://.../albumMasters/explore?tmsIDs=12345&videoMusicReleaseType=soundtrack`\n\n**Example:** Only main canon albums for an artist\n`https://.../albumMasters/explore?artistIDs=GMGZZX800003Y64&releaseTypes=mainCanon`\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/apiKeyParam"
          },
          {
            "$ref": "#/components/parameters/artistIDs"
          },
          {
            "$ref": "#/components/parameters/tmsIDs"
          },
          {
            "$ref": "#/components/parameters/releaseTypes"
          },
          {
            "$ref": "#/components/parameters/genreIDs"
          },
          {
            "$ref": "#/components/parameters/videoMusicReleaseType"
          },
          {
            "$ref": "#/components/parameters/sortAlbumMasters"
          },
          {
            "$ref": "#/components/parameters/limit"
          },
          {
            "$ref": "#/components/parameters/offset"
          },
          {
            "$ref": "#/components/parameters/displayLanguage"
          },
          {
            "$ref": "#/components/parameters/genreList"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    },
                    "data": {
                      "type": "array",
                      "nullable": false,
                      "items": {
                        "$ref": "#/components/schemas/AlbumMasterObject"
                      }
                    }
                  },
                  "required": [
                    "meta",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ErrorResponse400"
          }
        }
      }
    },
    "/entitlements/lookup": {
      "get": {
        "tags": [
          "Entitlements"
        ],
        "summary": "Lookup Entitlements",
        "description": "Lookup Entitlements licensed to the user's API Key. The API Key mentioned in the Request Header will be used to fetch its related entitlements.\n",
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    },
                    "data": {
                      "type": "array",
                      "nullable": false,
                      "items": {
                        "$ref": "#/components/schemas/EntitlementsObject"
                      }
                    }
                  },
                  "required": [
                    "meta",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/ErrorResponse401"
          },
          "429": {
            "$ref": "#/components/responses/ErrorResponse429"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/apiKeyParam"
          }
        ]
      }
    },
    "/descriptorCorrelations/lookup": {
      "get": {
        "tags": [
          "DescriptorCorrelations"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/apiKeyParam"
          },
          {
            "$ref": "#/components/parameters/idTypeCorrelations"
          },
          {
            "$ref": "#/components/parameters/ids"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    },
                    "data": {
                      "type": "array",
                      "nullable": false,
                      "items": {
                        "$ref": "#/components/schemas/DescriptorCorrelationsObject"
                      }
                    }
                  },
                  "required": [
                    "meta",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ErrorResponse400"
          },
          "404": {
            "$ref": "#/components/responses/ErrorResponse404"
          }
        },
        "description": "The descriptor correlation API enables the computation of Artist and Recording similarity by providing numerical values representing that similarity.  These similarity values can be used to inform music discovery and catalog navigation models and algorithms.\n\nThe following workflow illustrates how correlates are used to show that the genre **Psychedelic Rock** is more similar to **Post-Modern Rock** than it is to **Ragtime**.\n\n1. The leaf genreID for \\\"Psychedelic Rock\\\" is `2844`.\n2. The `/descriptors/descriptorCorrelations` API is used with `genreID` value `2844`\n```\ncurl https://<url>/descriptorCorrelations/lookup?idType=genreID&ids=2844\n  ...\n  {\n    {\n      \"descriptorID\": \"33121\",\n      \"label\": \"Post-Modern Rock\",\n      \"weight\": \"200\"\n    },\n    {\n      \"descriptorID\": \"3128\",\n      \"label\": \"Ragtime\",\n      \"weight\": \"-700\"\n    }\n    ...\n  }\n  ```\n\n  3. The results show that **Post-Modern Rock** is correlated to **Psychedelic Rock** with a weight of **200** while **Ragtime** is correlated with weight of **-700**.  Therefore, **Post-Modern Rock** is the most similar genre.\n",
        "summary": "Calculate Artist and Recording similarity"
      }
    },
    "/descriptorHierarchy/lookup": {
      "get": {
        "tags": [
          "DescriptorHierarchies"
        ],
        "summary": "Retrieve Structured Music Descriptor Taxonomies",
        "description": "Get structured descriptor hierarchy data for Gracenote's music descriptor taxonomies.\n\nSupports 17 different genre hierarchies (regional and complexity variants) plus additional descriptor types including LANGUAGES, ORIGINS, ERAS, ARTISTTYPES, MOODS, STYLES, and TEMPOS.

# --- truncated at 32 KB (157 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/gracenote/refs/heads/main/openapi/gracenote-gmd-api-v3-openapi.json