Music — entry 006 of 32

Deezer

Verified Jul 2026

Deezer's REST API serves the catalog metadata behind the streaming app: tracks, albums, artists, playlists, charts, and full-text search. Unusually for a major streaming service its read endpoints are fully keyless — a plain GET against api.deezer.com returns real track data with no App ID, key, or token at all — while OAuth is reserved for endpoints that act on a user's own account, such as favorites or the activity feed. Responses can be requested as either JSON or XML via an output query parameter, and the API is free to use within Deezer's terms.

Deezer's REST API serves catalog reads — artists, tracks, albums, search — with no App ID, key, or token at all. A live GET to `/artist/27` (Daft Punk) returned a 200 with real catalog data and no auth header sent, and the response never carries an `access-control-allow-origin` header on this run's probes, confirming the stored `cors: "no"`.

musicstreamingcatalogkeyless
AuthenticationNone requiredCall it straight away — no key, no signup.
HTTPSSupportedTraffic is encrypted in transit.
CORSDisabledBrowser calls need a server-side proxy.
PricingFreeNo paid tier — free for the documented use case.
FormatsJSON, XMLResponses can be requested as JSON or XML.

GreatAPIs Score

Score80out of 100
Authentication25/25No authentication required
Pricing20/20Free to use
Docs0/20No docs or spec available
Formats15/15Supports 2 response formats
Freshness20/20Verified within 6 months

Embed this badge

Scored 80 on greatapis.com
<a href="https://greatapis.com/api/deezer/"><img src="https://greatapis.com/badge/deezer.svg" alt="Scored 80 on greatapis.com"></a>

Auth quickstart

  1. No App ID, key, or OAuth token needed for public catalog reads — this run's own probe against `/artist/27` returned real catalog data with zero credentials sent.
  2. OAuth is reserved for endpoints that act on a user's own account (favorites, the activity feed) — separate from the keyless read path this quickstart covers.
Stored keyNo key stored

Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.

Look up an artist by ID

GEThttps://api.deezer.com/artist/27

200 application/json; charset=utf-8

{"id":27,"name":"Daft Punk","link":"https:\/\/www.deezer.com\/artist\/27","share":"https:\/\/www.deezer.com\/artist\/27?utm_source=deezer&utm_content=artist-27&utm_term=0_1785133748&utm_medium=web","picture":"https:\/\/api.deezer.com\/artist\/27\/image","picture_small":"https:\/\/cdn-images.dzcdn.net\/images\/artist\/638e69b9caaf9f9f3f8826febea7b543\/56x56-000000-80-0-0.jpg","picture_medium":"https:\/\/cdn-images.dzcdn.net\/images\/artist\/638e69b9caaf9f9f3f8826febea7b543\/250x250-000000-80-0-0.jpg","picture_big":"https:\/\/cdn-images.dzcdn.net\/images\/artist\/638e69b9caaf9f9f3f8826febea7b543\/500x500-000000-80-0-0.jpg","picture_xl":"https:\/\/cdn-images.dzcdn.net\/images\/artist\/638e69b9caaf9f9f3f8826febea7b543\/1000x1000-000000-80-0-0.jpg","nb_album":38,"nb_fan":5179193,"radio":true,"tracklist":"https:\/\/api.deezer.com\/artist\/27\/top?limit=50","type":"artist"}

`nb_fan` and the `share` URL's tracking params are live and will differ on a later request — the shape (id, name, picture URLs, nb_album, nb_fan, tracklist) is what's stable, not the exact numbers.

Developer reference

Base URLhttps://api.deezer.com

Gotchas & limits

  • Errors do not use HTTP error status codes: a live GET to `/artist/999999999999` (a nonexistent id) returned HTTP 200 with an error payload in the body, `{"error":{"type":"DataException","message":"no data","code":800}}` — a client that only checks the status code will treat this as success.
  • No `access-control-allow-origin` header is sent on any response this run, plain GET or CORS preflight: an `OPTIONS` request carrying `Origin` and `Access-Control-Request-Method` still came back with `access-control-allow-methods`/`-headers`/`-credentials` but never `-allow-origin` — a browser calling `api.deezer.com` directly is blocked by CORS either way.
  • Responses can be requested as XML instead of JSON via `?output=xml` — a live GET to `/artist/27?output=xml` returned HTTP 200 with `content-type: application/xml; charset=utf-8` in place of the default `application/json; charset=utf-8`, same underlying data.
  • `/search/track` matches on plain free text but not always on field-scoped syntax: a live GET to `/search/track?q=one+more+time+daft+punk&limit=1` correctly matched the track via free text, while other field-scoped query shapes can return `{"data":[],"total":0}` even for a real track — worth testing the plain-text form first.