PHPackages                             bjthecod3r/laravel-deezer-api-wrapper - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Search &amp; Filtering](/categories/search)
4. /
5. bjthecod3r/laravel-deezer-api-wrapper

ActiveLibrary[Search &amp; Filtering](/categories/search)

bjthecod3r/laravel-deezer-api-wrapper
=====================================

A Laravel wrapper for the Deezer API.

0.1.0(3w ago)0150↑100%MITPHPPHP ^8.2CI passing

Since May 17Pushed 3w agoCompare

[ Source](https://github.com/BJTheCod3r/laravel-deezer-api-wrapper)[ Packagist](https://packagist.org/packages/bjthecod3r/laravel-deezer-api-wrapper)[ RSS](/packages/bjthecod3r-laravel-deezer-api-wrapper/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (1)Dependencies (6)Versions (2)Used By (0)

[![Laravel Deezer API Wrapper](art/logo.svg)](art/logo.svg)

Laravel Deezer API Wrapper
==========================

[](#laravel-deezer-api-wrapper)

A small, fluent Laravel wrapper around [Deezer's public API](https://developers.deezer.com/api) — currently covers **search** and **get-by-id** for tracks, albums, artists, playlists, podcasts, radios, users, genres and episodes.

Deezer's search and get endpoints are unauthenticated, so this package has zero credential setup — install it and start querying.

Installation
------------

[](#installation)

```
composer require bjthecod3r/laravel-deezer-api-wrapper
```

The service provider and `Deezer` facade alias auto-register via Laravel's package discovery.

Publish the (optional) config file:

```
php artisan vendor:publish --tag=deezer-config
```

Quick start
-----------

[](#quick-start)

```
use BjTheCod3r\Deezer\Facades\Deezer;

// Search tracks (Deezer's /search endpoint is tracks by default)
$tracks = Deezer::search('daft punk')->get();

foreach ($tracks->data as $track) {
    echo $track->title.' — '.$track->artist->name.PHP_EOL;
}

// Get a track by id
$track = Deezer::track(3135556)->get();
$track->title;          // "Harder, Better, Faster, Stronger"
$track->artist->name;   // "Daft Punk"
$track->album->title;   // "Discovery"
```

Search
------

[](#search)

Each typed search method returns a `Paginated` of typed resources:

```
use BjTheCod3r\Deezer\Enums\SearchOrder;
use BjTheCod3r\Deezer\Facades\Deezer;

Deezer::searchTracks('discovery')->get();      // Paginated
Deezer::searchAlbums('discovery')->get();      // Paginated
Deezer::searchArtists('daft punk')->get();     // Paginated
Deezer::searchPlaylists('focus')->get();       // Paginated
Deezer::searchPodcasts('news')->get();         // Paginated
Deezer::searchRadios('jazz')->get();           // Paginated
Deezer::searchUsers('someone')->get();         // Paginated
```

### Fluent options

[](#fluent-options)

```
Deezer::searchAlbums('discovery')
    ->limit(50)                          // results per page
    ->index(50)                          // offset (Deezer's `index`)
    ->strict()                           // disable fuzzy matching
    ->order(SearchOrder::RatingDesc)     // sort
    ->get();
```

Strict mode pairs well with Deezer's [advanced query filters](https://developers.deezer.com/api/search):

```
Deezer::searchTracks('artist:"daft punk" album:"discovery"')
    ->strict()
    ->get();
```

### Paginated results

[](#paginated-results)

`Paginated::$data` is a Laravel `Collection`, so the full collection API is yours:

```
$tracks = Deezer::search('daft punk')->limit(50)->get();

$topNames = $tracks->data
    ->filter(fn ($t) => $t->rank >= 500_000)
    ->sortByDesc('rank')
    ->pluck('title')
    ->all();

$tracks->total;   // total results available on the server
$tracks->next;    // URL for the next page, or null
$tracks->prev;    // URL for the previous page, or null
```

Get by id
---------

[](#get-by-id)

```
Deezer::track(3135556)->get();        // Track
Deezer::album(302127)->get();         // Album (with embedded ->tracks collection)
Deezer::artist(27)->get();            // Artist
Deezer::playlist(908622995)->get();   // Playlist (with embedded ->tracks collection)
Deezer::podcast(1)->get();            // Podcast
Deezer::radio(2)->get();              // Radio
Deezer::user(3)->get();               // User
Deezer::genre(0)->get();              // Genre
Deezer::episode(5)->get();            // Episode (with ->podcast)
```

Configuration
-------------

[](#configuration)

`config/deezer.php`:

```
return [
    'endpoints' => [
        'api' => env('DEEZER_API_URL', 'https://api.deezer.com'),
    ],
    'defaults' => [
        'limit' => 25,
        'index' => 0,
    ],
    'http' => [
        'timeout' => env('DEEZER_HTTP_TIMEOUT', 10),
        'retry' => [
            'times' => env('DEEZER_HTTP_RETRY_TIMES', 1),
            'sleep' => env('DEEZER_HTTP_RETRY_SLEEP', 200),
        ],
    ],
];
```

Exceptions
----------

[](#exceptions)

All exceptions extend `BjTheCod3r\Deezer\Exceptions\DeezerException`:

ExceptionWhen it fires`ValidationException`Missing query, missing path param, or Deezer's `ParameterException` (in-band 501)`QuotaException`Deezer's `QuotaException` (50 req / 5s per IP)`ApiException`Everything else — transport-level 4xx/5xx or other in-band errorsDeezer is unusual in that it often returns **200 OK with an `{ "error": ... }` body** for application-level errors. The HTTP client detects and translates those into the same exception hierarchy as transport-level failures, so you only catch one set of types.

```
use BjTheCod3r\Deezer\Exceptions\DeezerException;

try {
    $track = Deezer::track(0)->get();
} catch (DeezerException $e) {
    report($e);
}
```

Extending
---------

[](#extending)

Each endpoint is an `Action`. To add one, extend `BjTheCod3r\Deezer\Actions\BaseAction`:

```
use BjTheCod3r\Deezer\Actions\BaseAction;
use BjTheCod3r\Deezer\Resources\Track;

class GetTrackContributorsAction extends BaseAction
{
    public function id(int $id): static
    {
        $this->pathParameters['id'] = (string) $id;
        return $this;
    }

    protected function path(): string
    {
        return '/track/{id}/contributors';
    }

    protected function decode(array $payload): array
    {
        return array_map(Track::fromArray(...), $payload['data'] ?? []);
    }
}
```

Testing
-------

[](#testing)

```
composer test
```

License
-------

[](#license)

MIT.

###  Health Score

40

—

FairBetter than 86% of packages

Maintenance95

Actively maintained with recent releases

Popularity15

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity36

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

23d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/7c9d0cfc944007a872649f1e04921e82d5f0b5bc18de0bc8866a1e00b0db970e?d=identicon)[bjthecod3r](/maintainers/bjthecod3r)

---

Top Contributors

[![BJTheCod3r](https://avatars.githubusercontent.com/u/21208572?v=4)](https://github.com/BJTheCod3r "BJTheCod3r (1 commits)")

---

Tags

searchlaravelmusicDeezeraction-patterndeezer-api

###  Code Quality

TestsPest

### Embed Badge

![Health badge](/badges/bjthecod3r-laravel-deezer-api-wrapper/health.svg)

```
[![Health](https://phpackages.com/badges/bjthecod3r-laravel-deezer-api-wrapper/health.svg)](https://phpackages.com/packages/bjthecod3r-laravel-deezer-api-wrapper)
```

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3325.1M337](/packages/psalm-plugin-laravel)[larastan/larastan

Larastan - Discover bugs in your code without running it. A phpstan/phpstan extension for Laravel

6.4k51.0M7.4k](/packages/larastan-larastan)[laravel/scout

Laravel Scout provides a driver based solution to searching your Eloquent models.

1.7k53.0M578](/packages/laravel-scout)[laravel/mcp

Rapidly build MCP servers for your Laravel applications.

76318.2M110](/packages/laravel-mcp)[defstudio/telegraph

A laravel facade to interact with Telegram Bots

815320.5k3](/packages/defstudio-telegraph)[api-platform/laravel

API Platform support for Laravel

59156.3k10](/packages/api-platform-laravel)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
