Gracenote GMD API v2

The Global Music Data API v2 provides artist, recording, album-edition, track and descriptor lookups and text search, with artist images, cover art, popularity scores, partner and industry IDs sold as add-ons on top of base, search, discovery and advanced-discovery packages. A key's subscription determines which fields appear in responses.

Operations 8

GET /artists/search Artist text search
GET /artists/{idType} Lookup Artist(s) by ID
GET /recordings/search Recording text search
GET /recordings/{idType} Lookup Recording(s) by ID
GET /albumEditions/search Album text search
GET /albumEditions/{idType} Lookup Album(s) by ID
GET /tracks/{idType}
GET /descriptorCorrelations/{descriptorType} Calculate Artist and Recording similarity

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-v2"
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-v2-openapi.json Raw ↑
{
  "openapi": "3.1.1",
  "info": {
    "version": "2.0",
    "title": "GMD API v2.0",
    "description": "Gracenote Music API Specification\nGMD API V2.0\n"
  },
  "tags": [
    {
      "name": "Artists"
    },
    {
      "name": "Recordings"
    },
    {
      "name": "AlbumEditions"
    },
    {
      "name": "Descriptors"
    },
    {
      "name": "Tracks"
    }
  ],
  "paths": {
    "/artists/search": {
      "get": {
        "tags": [
          "Artists"
        ],
        "summary": "Artist text search",
        "description": "Text search for `Artist` objects using artist name.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/apiKeyParam"
          },
          {
            "$ref": "#/components/parameters/artistName"
          },
          {
            "$ref": "#/components/parameters/limit"
          },
          {
            "$ref": "#/components/parameters/offset"
          },
          {
            "$ref": "#/components/parameters/categoriesLanguage"
          },
          {
            "$ref": "#/components/parameters/genreCategories"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "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/{idType}": {
      "get": {
        "tags": [
          "Artists"
        ],
        "summary": "Lookup Artist(s) by ID",
        "description": "Get `Artist` object(s) by ID<br><br>\n  **Notes**\n  * Objects are returned in order requested. \n  * If an object is not found, a `null` value is returned in its position.\n  * Duplicate ids in the query will result in duplicate objects in the response\n  * TMS Party ID lookups require TMS ID add-on.\n  * Spotify Artist ID lookups require Spotify IDs add-on.\n\n\n<br><br>\n**Example:** Lookup by Gracenote ID<br>\n`https://.../artists/gnid?ids=GND6CJFDB6BH1X3`\n<br><br>\n**Example:** Lookup by  tms-music-party-id<br>\n`https://.../artists/tms-music-party-id?ids=521029`\n<br><br>\n**Example:** Lookup by  spotify-artist-id<br>\n`https://.../artists/spotify-artist-id?ids=0d25ed8c5cc94cdbaf8e9961419ed6be`\n\n\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/apiKeyParam"
          },
          {
            "$ref": "#/components/parameters/artistIDType"
          },
          {
            "$ref": "#/components/parameters/ids"
          },
          {
            "$ref": "#/components/parameters/categoriesLanguage"
          },
          {
            "$ref": "#/components/parameters/genreCategories"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "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"
          }
        }
      }
    },
    "/recordings/search": {
      "get": {
        "tags": [
          "Recordings"
        ],
        "summary": "Recording text search",
        "description": "Text search for `Recording` objects using recording name and/or artist name.\n<br><br>\nNote that one of either recording or artist name is required.  Omitting both\nwill result in an error.\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/categoriesLanguage"
          },
          {
            "$ref": "#/components/parameters/genreCategories"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "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/{idType}": {
      "get": {
        "tags": [
          "Recordings"
        ],
        "summary": "Lookup Recording(s) by ID",
        "description": "Get `Recording` object(s) by ID<br><br>\n\n  **Notes**\n  * Objects are returned in order requested. \n  * If an object is not found, a `null` value is returned in its position.\n  * Duplicate ids in the query will result in duplicate objects in the response\n\n<br><br>\n**Example:** Lookup by Gracenote ID<br>\n`https://.../recordings/gnid?ids=GN0TR5Z86C868HS`\n<br><br>\n**Example:** Lookup by ISRC<br>\n`https://.../recordings/isrc?ids=DEY371001140`",
        "parameters": [
          {
            "$ref": "#/components/parameters/apiKeyParam"
          },
          {
            "$ref": "#/components/parameters/recordingIDType"
          },
          {
            "$ref": "#/components/parameters/ids"
          },
          {
            "$ref": "#/components/parameters/categoriesLanguage"
          },
          {
            "$ref": "#/components/parameters/genreCategories"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "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"
          }
        }
      }
    },
    "/albumEditions/search": {
      "get": {
        "tags": [
          "AlbumEditions"
        ],
        "summary": "Album text search",
        "description": "Text search for `Album` objects using album name and/or artist name.\n<br><br>\nNote that one of either album or artist name is required.  Omitting both\nwill result in an error.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/apiKeyParam"
          },
          {
            "$ref": "#/components/parameters/albumName"
          },
          {
            "$ref": "#/components/parameters/artistName"
          },
          {
            "$ref": "#/components/parameters/releaseType"
          },
          {
            "$ref": "#/components/parameters/limit"
          },
          {
            "$ref": "#/components/parameters/offset"
          },
          {
            "$ref": "#/components/parameters/categoriesLanguage"
          },
          {
            "$ref": "#/components/parameters/genreCategories"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    },
                    "data": {
                      "type": "array",
                      "nullable": false,
                      "items": {
                        "$ref": "#/components/schemas/AlbumObject"
                      }
                    }
                  },
                  "required": [
                    "meta",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ErrorResponse400"
          },
          "404": {
            "$ref": "#/components/responses/ErrorResponse404"
          }
        }
      }
    },
    "/albumEditions/{idType}": {
      "get": {
        "tags": [
          "AlbumEditions"
        ],
        "summary": "Lookup Album(s) by ID",
        "description": "Get `Album` object(s) by ID<br><br>\n\n  **Notes**\n  * Objects are returned in order requested. \n  * If an object is not found, a `null` value is returned in its position.\n  * Duplicate ids in the query will result in duplicate objects in the response\n\n<br><br>\n**Example:** Lookup by Gracenote ID<br>\n`https://.../albumEditions/gnid?ids=GN949Y7H6M9XNYP`",
        "parameters": [
          {
            "$ref": "#/components/parameters/apiKeyParam"
          },
          {
            "$ref": "#/components/parameters/albumEditionIDType"
          },
          {
            "$ref": "#/components/parameters/ids"
          },
          {
            "$ref": "#/components/parameters/categoriesLanguage"
          },
          {
            "$ref": "#/components/parameters/genreCategories"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    },
                    "data": {
                      "type": "array",
                      "nullable": false,
                      "items": {
                        "$ref": "#/components/schemas/AlbumObject"
                      }
                    }
                  },
                  "required": [
                    "meta",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ErrorResponse400"
          },
          "404": {
            "$ref": "#/components/responses/ErrorResponse404"
          }
        }
      }
    },
    "/tracks/{idType}": {
      "get": {
        "tags": [
          "Tracks"
        ],
        "description": "licate objects in the response\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/apiKeyParam"
          },
          {
            "$ref": "#/components/parameters/trackIDType"
          },
          {
            "$ref": "#/components/parameters/isrcId"
          },
          {
            "$ref": "#/components/parameters/epc"
          },
          {
            "$ref": "#/components/parameters/limit50"
          },
          {
            "$ref": "#/components/parameters/offset"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMetaForTracks"
                    },
                    "data": {
                      "type": "array",
                      "nullable": false,
                      "items": {
                        "$ref": "#/components/schemas/TrackObject"
                      }
                    }
                  },
                  "required": [
                    "meta",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ErrorResponse400"
          },
          "404": {
            "$ref": "#/components/responses/ErrorResponse404"
          }
        }
      }
    },
    "/descriptorCorrelations/{descriptorType}": {
      "get": {
        "tags": [
          "Descriptors"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/apiKeyParam"
          },
          {
            "$ref": "#/components/parameters/condensedDescriptorType"
          },
          {
            "$ref": "#/components/parameters/categoryIds"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "meta": {
                      "$ref": "#/components/schemas/ResponseMeta"
                    },
                    "data": {
                      "type": "array",
                      "nullable": false,
                      "items": {
                        "$ref": "#/components/schemas/DescriptorCorrelationObject"
                      }
                    }
                  },
                  "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<br><br>\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<br><br>\n1. The `/descriptors/genre` API is used to determine that the `genreID` for \"Psychedelic Rock\" is `2844`.<br>\n```\ncurl https://<url>/descriptors/genre\n...\n{\n  {\n  \"ID\": \"2844\",\n  \"genericName\": \"Psychedelic Rock\"\n  }\n  ...\n},\n\n```\n<br><br>\n2. The `/descriptors/descriptorCorrelations` API is used with `genreID` value `2844` and the descriptor type set to \"genres\".<br>\n```\ncurl https://<url>/descriptorCorrelations/genres?ids=2844\n...\n{\n    {\n      \"ID\": \"33121\",\n      \"genre\": \"Post-Modern Rock\",\n      \"weight\": \"200\"\n    },\n    {\n      \"ID\": \"3128\",\n      \"genre\": \"Ragtime\",\n      \"weight\": \"-700\"\n    }\n    ...\n}\n```\n<br><br>\n3. 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"
      }
    }
  },
  "servers": [
    {
      "url": "/proxy/gmd/v2"
    }
  ],
  "components": {
    "parameters": {
      "ids": {
        "name": "ids",
        "in": "query",
        "required": true,
        "description": "Comma seperated list of ids (max 100)",
        "schema": {
          "type": "string"
        }
      },
      "categoryIds": {
        "name": "ids",
        "in": "query",
        "required": true,
        "description": "Comma seperated list of category ids (max 100)",
        "schema": {
          "type": "string"
        }
      },
      "limit": {
        "name": "limit",
        "in": "query",
        "description": "Limit the number of results between 1 and 10,000.",
        "schema": {
          "type": "integer",
          "minimum": 1,
          "maximum": 10000,
          "default": 100
        }
      },
      "limit50": {
        "name": "limit",
        "in": "query",
        "description": "Limit the number of results between 1 and 50.",
        "schema": {
          "type": "integer",
          "minimum": 1,
          "maximum": 50,
          "default": 10
        }
      },
      "offset": {
        "name": "offset",
        "in": "query",
        "description": "Return results starting at the given offset.  Used for \"paging\" through results.",
        "schema": {
          "type": "integer",
          "default": 0
        }
      },
      "isrc": {
        "name": "isrc",
        "in": "query",
        "description": "Include ISRC in search criteria.  Note that due to ISRC consistency issues (e.g., duplicate or incorrect ISRC), ISRC field matching is a lower priority than text field matching (e.g., artist name).",
        "schema": {
          "type": "string"
        }
      },
      "isrcId": {
        "name": "id",
        "in": "query",
        "description": "ISRC code to lookup",
        "schema": {
          "type": "string"
        }
      },
      "epc": {
        "name": "albumReleaseCode",
        "in": "query",
        "description": "UPC/EAN code to lookup",
        "schema": {
          "type": "string"
        }
      },
      "recordingName": {
        "name": "recordingName",
        "in": "query",
        "description": "Recording name",
        "required": true,
        "schema": {
          "type": "string"
        },
        "examples": {
          "default": {
            "value": "Old Town Road"
          }
        }
      },
      "artistName": {
        "name": "artistName",
        "in": "query",
        "description": "Artist name",
        "required": true,
        "schema": {
          "type": "string"
        },
        "examples": {
          "default": {
            "value": "Lil Nas X"
          }
        }
      },
      "albumName": {
        "name": "albumName",
        "in": "query",
        "description": "Album name",
        "required": true,
        "schema": {
          "type": "string"
        },
        "examples": {
          "default": {
            "value": "Dark Side of the Moon"
          }
        }
      },
      "artistID": {
        "name": "artistID",
        "in": "query",
        "description": "artist GN ID",
        "schema": {
          "type": "string"
        }
      },
      "albumArtistID": {
        "name": "artistID",
        "required": true,
        "in": "query",
        "description": "artist GN ID",
        "schema": {
          "type": "string"
        }
      },
      "descriptorType": {
        "name": "descriptorType",
        "in": "path",
        "required": true,
        "description": "Gracenote descriptor type.",
        "schema": {
          "type": "string",
          "enum": [
            "languages",
            "scripts",
            "eras",
            "moods",
            "styles",
            "tempos",
            "artistTypes",
            "genres",
            "origins"
          ]
        }
      },
      "condensedDescriptorType": {
        "name": "descriptorType",
        "in": "path",
        "required": true,
        "description": "Gracenote descriptor type.",
        "schema": {
          "type": "string",
          "enum": [
            "eras",
            "moods",
            "styles",
            "tempos",
            "artistTypes",
            "genres",
            "origins"
          ]
        }
      },
      "releaseType": {
        "name": "releaseType",
        "in": "query",
        "required": false,
        "description": "Select an album release type <br>\n- 1  - Main Canon<br>\n- 2  - Main Canon Collection<br>\n- 3  - Single Artist Collection<br>\n- 4  - Multi Artist Collection<br>\n- 10 - Single<br>",
        "schema": {
          "type": "integer",
          "enum": [
            1,
            2,
            3,
            4,
            10
          ]
        }
      },
      "categoriesLanguage": {
        "name": "categoriesLanguage",
        "in": "query",
        "required": false,
        "description": "Result localization language code.",
        "schema": {
          "type": "string",
          "enum": [
            "ar",
            "bg",
            "zh-Hans",
            "zh-Hant",
            "hr",
            "cs",
            "da",
            "nl",
            "en",
            "fi",
            "fr",
            "de",
            "el",
            "hu",
            "id",
            "it",
            "ja",
            "ko",
            "nb",
            "fa",
            "pl",
            "pt",
            "ro",
            "ru",
            "sr",
            "sk",
            "es",
            "sv",
            "th",
            "tr",
            "vi"
          ]
        }
      },
      "genreCategories": {
        "name": "genreCategories",
        "in": "query",
        "required": false,
        "description": "Select a genre categories according to the desired region and specificity.",
        "schema": {
          "type": "string",
          "enum": [
            "GENRES-US-DETAILED",
            "GENRES-US-SIMPLIFIED",
            "GENRES-CHINA-DETAILED",
            "GENRES-CHINA-SIMPLIFIED",
            "GENRES-EUROPE-DETAILED",
            "GENRES-EUROPE-SIMPLIFIED",
            "GENRES-GLOBAL-DETAILED",
            "GENRES-GLOBAL-SIMPLIFIED",
            "GENRES-INDIA-SIMPLIFIED",
            "GENRES-JAPAN-DETAILED",
            "GENRES-JAPAN-SIMPLIFIED",
            "GENRES-KOREA-DETAILED",
            "GENRES-KOREA-SIMPLIFIED",
            "GENRES-LATIN-AMERICA-DETAILED",
            "GENRES-LATIN-AMERICA-SIMPLIFIED",
            "GENRES-TAIWAN-DETAILED",
            "GENRES-TAIWAN-SIMPLIFIED"
          ]
        }
      },
      "genreCategoriesID": {
        "name": "genreCategoriesID",
        "in": "query",
        "required": false,
        "description": "Select a genre hierarchy code according to the desired region and specificity.<br><br>\n- 83  - US-DETAILED<br>\n- 84  - US-SIMPLIFIED<br>\n- 90  - CHINA-DETAILED<br>\n- 91  - CHINA-SIMPLIFIED<br>\n- 121 - EUROPE-DETAILED<br>\n- 122 - EUROPE-SIMPLIFIED<br>\n- 87  - GLOBAL-DETAILED<br>\n- 88  - GLOBAL-SIMPLIFIED<br>\n- 158 - INDIA-SIMPLIFIED<br>\n- 85  - JAPAN-DETAILED<br>\n- 86  - JAPAN-SIMPLIFIED<br>\n- 119 - KOREA-DETAILED<br>\n- 112 - KOREA-SIMPLIFIED<br>\n- 159 - LATIN-AMERICA-DETAILED<br>\n- 154 - LATIN-AMERICA-SIMPLIFIED<br>\n- 92  - TAIWAN-DETAILED<br>\n- 93  - TAIWAN-SIMPLIFIED<br>",
        "schema": {
          "type": "integer",
          "enum": [
            90,
            91,
            121,
            122,
            87,
            88,
            158,
            85,
            86,
            119,
            112,
            159,
            154,
            92,
            93,
            83,
            84
          ]
        }
      },
      "artistIDType": {
        "name": "idType",
        "in": "path",
        "required": true,
        "description": "ID Type",
        "schema": {
          "type": "string",
          "enum": [
            "gnid",
            "tms-music-party-id",
            "spotify-artist-id"
          ]
        }
      },
      "recordingIDType": {
        "name": "idType",
        "in": "path",
        "required": true,
        "description": "ID Type",
        "schema": {
          "type": "string",
          "enum": [
            "gnid",
            "isrc",
            "appletrackid",
            "spotify-track-id",
            "deezer-global-track-id"
          ]
        }
      },
      "trackIDType": {
        "name": "idType",
        "in": "path",
        "required": true,
        "description": "ID Type",
        "schema": {
          "type": "string",
          "enum": [
            "isrc"
          ]
        }
      },
      "albumEditionIDType": {
        "name": "idType",
        "in": "path",
        "required": true,
        "description": "ID Type",
        "schema": {
          "type": "string",
          "enum": [
            "gnid",
            "upc",
            "applealbumid",
            "spotify-album-id",
            "deezer-global-album-id"
          ]
        }
      },
      "apiKeyParam": {
        "name": "GN-APIKEY",
        "in": "header",
        "description": "API key to authorize the request.",
        "required": true,
        "schema": {
          "type": "string",
          "examples": [
            "your-api-key"
          ]
        }
      }
    },
    "schemas": {
      "Artist": {
        "type": "object",
        "properties": {
          "artistID": {
            "type": [
              "string",
              "null"
            ],
            "description": "gracenote ID"
          },
          "artistName": {
            "type": "string"
          },
          "href": {
            "type": [
              "string",
              "null"
            ],
            "description": "will be of the type /artists/gnid?ids=GNXX"
          }
        }
      },
      "ArtistMember": {
        "type": "object",
        "properties": {
          "artistID": {
            "type": [
              "string",
              "null"
            ],
            "description": "gracenote ID"
          },
          "artistName": {
            "type": "string"
          },
          "href": {
            "type": [
              "string",
              "null"
            ],
            "description": "will be of the type /artists/gnid?ids=GNXX"
          },
          "ord": {
            "type": "integer",
            "description": "order number for sorting"
          }
        }
      },
      "ArtistWithImage": {
        "type": "object",
        "properties": {
          "artistID": {
            "type": [
              "string",
              "null"
            ],
            "description": "gracenote ID"
          },
          "artistName": {
            "type": "string"
          },
          "href": {
            "type": [
              "string",
              "null"
            ],
            "description": "will be of the type /artists/gnid?ids=GNXX"
          },
          "images": {
            "type": [
              "array",
              "null"
            ],
            "description": "Only visible to Customers with Artist Images add-on",
            "items": {
              "$ref": "#/components/schemas/Image"
            }
          }
        }
      },
      "Popularity": {
        "type": "object",
        "properties": {
          "region": {
            "type": "string"
          },
          "score": {
            "type": "number"
          },
          "type": {
            "type": "string"
          }
        }
      },
      "LanguageContext": {
        "type": [
          "object",
          "null"
        ],
        "properties": {
          "language": {
            "type": [
              "string",
              "null"
            ]
          },
          "script": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "LanguageContextWeight": {
        "type": [
          "object",
          "null"
        ],
        "properties": {
          "language": {
            "type": [
              "string",
              "null"
            ]
          },
          "script": {
            "type": [
              "string",
              "null"
            ]
          },
          "weight": {
            "type": [
              "integer",
              "null"
            ]
          }
        }
      },
      "LanguageContextWeightID": {
        "type": [
          "object",
          "null"
        ],
        "properties": {
          "languageID": {
            "type": [
              "string",
              "null"
            ]
          },
          "language": {
            "type": [
              "string",
              "null"
            ]
          },
          "script": {
            "type": [
              "string",
              "null"
            ]
          },
          "weight": {
            "type": [
              "integer",
              "null"
            ]
          }
        }
      },
      "ArtistName": {
        "type": "object",
        "properties": {
          "artistName": {
            "type": "string"
          },
          "languageContext": {
            "$ref": "#/components/schemas/LanguageContext"
          }
        }
      },
      "Languages": {
        "type": "array",
        "description": "Only visible to Customers with GMD:Discovery package and above",
        "items": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string"
            },
            "ID": {
              "type": "string"
            },
            "name": {
              "type": "string"
            },
            "weight": {
              "type": "integer",
              "description": "Only visible to Customers with GMD:Advanced Discovery package and above"
            }
          }
        }
      },
      "ReleaseType": {
        "type": [
          "string",
          "null"
        ],
        "description": "Only visible to Customers with GMD:Discovery package and above"
      },
      "Image": {
        "type": "object",
        "properties": {
          "size": {
            "type": "string"
          },
          "height": {
            "type": "integer"
          },
          "width": {
            "type": "integer"
          },
          "url": {
            "type": "string",
            "pattern": "^https://"
          }
        }
      },
      "DescriptorObject": {
        "type": "array",
        "description": "Only visible to Customers with GMD Discovery/Advanced Discovery package.",
        "items": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string"
            },
            "ID": {
              "type": "string"
            },
            "name": {
              "type": "string"
            },
            "weight": {
              "type": "integer"
            },
            "categories": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "level": {
                    "type": "integer"
                  }
                }
              }
          

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