Skip to main content

Async typed Python client for Deezer's Pipe GraphQL API.

Project description

deezer-python-gql

Async typed Python client for Deezer's Pipe GraphQL API.

Built with ariadne-codegen — all client methods and response models are generated from the GraphQL schema and .graphql query files.

Installation

uv add deezer-python-gql

Quick Start

import asyncio

from deezer_python_gql import DeezerGQLClient

async def main():
    client = DeezerGQLClient(arl="YOUR_ARL_COOKIE")

    # Current user
    me = await client.get_me()
    print(me)

    # Track with media URLs, lyrics, and contributors
    track = await client.get_track(track_id="3135556")
    print(track.title, track.duration)

    # Album with paginated track list
    album = await client.get_album(album_id="302127")
    print(album.display_title, album.tracks_count)

    # Artist with top tracks and discography
    artist = await client.get_artist(artist_id="27")
    print(artist.name, artist.fans_count)

    # Playlist with tracks
    playlist = await client.get_playlist(playlist_id="53362031")
    print(playlist.title, playlist.estimated_tracks_count)

    # Unified search across all entity types
    results = await client.search(query="Daft Punk")
    print(len(results.tracks.edges), "tracks found")

asyncio.run(main())

Available Queries

Content Retrieval

Method Description
get_me() Current authenticated user
get_track(track_id) Full track details — ISRC, media tokens, lyrics, contributors
get_album(album_id) Album with cover, label, paginated tracks, fallback
get_artist(artist_id) Artist with bio, top tracks, albums (ordered by release date)
get_playlist(playlist_id) Playlist with owner, picture, paginated tracks
get_livestream(livestream_id) Livestream (radio station) with streaming URLs and codec info
get_podcast(podcast_id) Podcast with paginated episodes and rights info
get_podcast_episode(podcast_episode_id) Single episode with media URL, codec, and parent podcast ref
get_audiobook(audiobook_id) Audiobook with paginated chapters, contributors, and fallback
get_audiobook_chapter(audiobook_chapter_id) Chapter with media token, estimated sizes, and streaming rights

Search & Discovery

Method Description
search(query, ...) Unified search across tracks, albums, artists, playlists, podcasts, livestreams
search_flows(query) Discover all available Deezer flows via search
get_similar_tracks(track_id, nb) Recommended tracks based on a given track
get_artist_mix(artist_ids, limit) Track mix blended from given artists
get_track_mix(track_ids, limit) Track mix blended around given tracks
get_flow() User's default Flow with tracks
get_flow_batch() 4 batches of Flow tracks in one request (via GraphQL aliases)
get_flow_configs(moods_first, genres_first) Mood & genre flow config lists for discovery
get_flow_config_tracks(flow_config_id) Tracks for a specific mood/genre flow config
get_made_for_me(first) "Made For You" SmartTracklist & Flow items
get_smart_tracklist(smart_tracklist_id, first) Smart tracklist with paginated tracks
get_charts(country_code, ...) Country charts — tracks, albums, artists, playlists
get_recommendations(playlists_first, ...) Personalized recommendations across categories
get_recently_played(first) Recently played mixed content (albums, playlists, artists...)
get_user_charts() Personal top tracks, artists, and albums

Library & Favorites

Method Description
get_favorite_artists(first, after) Paginated favorite artists
get_favorite_albums(first, after) Paginated favorite albums
get_favorite_tracks(first, after) Paginated favorite tracks
get_favorite_playlists(first, after) Paginated favorite playlists
get_favorite_podcasts(first, after) Paginated favorite podcasts
get_favorite_audiobooks() Favorite audiobook IDs with dates (via deprecated endpoint)
get_podcast_episode_bookmarks(first, after) Bookmarked podcast episodes with playback position
get_user_playlists(first, after) User's own playlists (not just favorites)

Music Together (Collaborative Playlists)

Method Description
get_music_together_groups(first) User's Music Together groups
get_music_together_group(group_id, mood) Single group with members, suggested & curated tracklists
get_music_together_affinity(group_id) Group member affinity scores and discovery content

Available Mutations

Favorites Management

Method Description
add_artist_to_favorite(artist_id) Add artist to favorites
remove_artist_from_favorite(artist_id) Remove artist from favorites
add_album_to_favorite(album_id) Add album to favorites
remove_album_from_favorite(album_id) Remove album from favorites
add_track_to_favorite(track_id) Add track to favorites
remove_track_from_favorite(track_id) Remove track from favorites
add_playlist_to_favorite(playlist_id) Add playlist to favorites
remove_playlist_from_favorite(playlist_id) Remove playlist from favorites
add_podcast_to_favorite(podcast_id) Add podcast to favorites
remove_podcast_from_favorite(podcast_id) Remove podcast from favorites
add_audiobook_to_favorite(audiobook_id) Add audiobook to favorites (deprecated but functional)
remove_audiobook_from_favorite(audiobook_id) Remove audiobook from favorites (deprecated but functional)

Playlist Management

Method Description
create_playlist(title, ...) Create a new playlist
update_playlist(playlist_id, ...) Update playlist title, description, or visibility
delete_playlist(playlist_id) Delete a playlist
add_tracks_to_playlist(playlist_id, track_ids) Add tracks to a playlist
remove_tracks_from_playlist(playlist_id, ...) Remove tracks from a playlist

Podcast Episode Management

Method Description
bookmark_podcast_episode(episode_id, offset) Bookmark episode with playback position (seconds)
unbookmark_podcast_episode(episode_id) Remove bookmark from episode
mark_as_played_podcast_episode(episode_id) Mark episode as played
mark_as_not_played_podcast_episode(episode_id) Mark episode as not played

Music Together

Method Description
music_together_create_group(name, ...) Create a new Music Together group
music_together_join_group(group_id) Join an existing group
music_together_leave_group(group_id) Leave a group
music_together_refresh_suggested_tracklist(...) Refresh the suggested tracklist for a group
music_together_update_group_settings(...) Update group settings (name, family mode)
music_together_generate_group_name() Generate a random group name

Utilities

Method Description
check_audiobook_ids(album_ids) Batch-check which album IDs are audiobooks (single GraphQL call)

All methods return fully-typed Pydantic models generated from the GraphQL schema.

Development

Requires Python 3.12+ and uv.

# Install all dependencies (including codegen tooling)
make setup

# Re-generate the typed client from schema + queries
make generate

# Run linters and type checks
make lint

# Run tests
make test

Adding a new query

  1. Create a .graphql file in queries/.
  2. Run make generate to produce the typed client method and response models.
  3. Add tests in tests/.

Exploring the API

To run ad-hoc GraphQL queries against the live Pipe API during development:

  1. Create a .env file (already gitignored) with your ARL cookie:

    echo 'DEEZER_ARL=your_arl_cookie_value' > .env
    
  2. Run queries:

    # Run a .graphql file
    uv run python scripts/explore.py queries/get_me.graphql
    
    # Run an inline query
    uv run python scripts/explore.py -q '{ me { id } }'
    
    # With variables
    uv run python scripts/explore.py -q 'query($id: String!) { track(trackId: $id) { title } }' \
        -v '{"id": "3135556"}'
    
    # Via make
    make explore Q=queries/get_me.graphql
    

The script handles JWT auth automatically — no manual token management needed.

Authentication

The Pipe API uses short-lived JWTs obtained from an ARL cookie. The base client handles token acquisition and refresh automatically — you only need to supply a valid ARL value.

License

Apache-2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

deezer_python_gql-0.9.0.tar.gz (58.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

deezer_python_gql-0.9.0-py3-none-any.whl (71.9 kB view details)

Uploaded Python 3

File details

Details for the file deezer_python_gql-0.9.0.tar.gz.

File metadata

  • Download URL: deezer_python_gql-0.9.0.tar.gz
  • Upload date:
  • Size: 58.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for deezer_python_gql-0.9.0.tar.gz
Algorithm Hash digest
SHA256 2e604380344fda4d78de10c877718d15cd63ed24f01641eeab1ff184abd57753
MD5 7ca2543325db92bbde6dca53077b33de
BLAKE2b-256 405b22f7df9e9a3bcbb17c1a260449eb7ae568c21cc1d3f3b9bbf8c877cd6eef

See more details on using hashes here.

Provenance

The following attestation bundles were made for deezer_python_gql-0.9.0.tar.gz:

Publisher: publish-to-pypi.yml on music-assistant/deezer-python-gql

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file deezer_python_gql-0.9.0-py3-none-any.whl.

File metadata

File hashes

Hashes for deezer_python_gql-0.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c00bddd08d389baf6774a8684a71ceb480cd20a26280a14cc77ace1b07e86dcc
MD5 b432426f6f2a80b1da70a536dc897289
BLAKE2b-256 ddb5580b20088dea2c4e7df6389344d5e0d8c6ad6524c22135134e2e61a1d01c

See more details on using hashes here.

Provenance

The following attestation bundles were made for deezer_python_gql-0.9.0-py3-none-any.whl:

Publisher: publish-to-pypi.yml on music-assistant/deezer-python-gql

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page