Search by

jeffersongoncalves / laravel-trustpilot

jeffersongoncalves

A Laravel client for the Trustpilot API — business units, public and private reviews, replies, email invitations, and review tags.

Package info

github.com/jeffersongoncalves/laravel-trustpilot

pkg:composer/jeffersongoncalves/laravel-trustpilot

Fund package maintenance!

jeffersongoncalves

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 1

Open Issues: 0

1.0.0 2026-09-08 01:10 UTC

This package is auto-updated.

Last update: 2026-09-08 01:16:39 UTC


README

Laravel Trustpilot

Laravel Trustpilot

Tests PHPStan Code Style Latest Version on Packagist Total Downloads License

A Laravel client for the Trustpilot API. A fluent Trustpilot facade groups the business unit, review, reply, invitation, and tag endpoints behind resource accessors, picks the right credentials per call — the apikey header for public data, an OAuth bearer token for everything private — and throws a TrustpilotException on a non-2xx response instead of returning a silent error array.

Features

  • Business UnitsbusinessUnits()->search(), get(), profile(), categories(), webLinks()
  • Reviewsreviews()->list(), get(), latest(), private(), reply(), deleteReply()
  • Invitationsinvitations()->create(), link(), templates()
  • Review Tagstags()->get(), add(), remove()
  • Both auth modes handled for you — public calls use the API key, private calls mint and cache a client-credentials bearer token until just before it expires
  • Default business unit — set it once in the config and omit the id everywhere
  • Thin by design — every method returns the raw decoded JSON response as an array, no DTOs
  • Fails loud — a non-2xx response throws TrustpilotException carrying the API's error message and HTTP status code

Installation

composer require jeffersongoncalves/laravel-trustpilot

Optionally publish the config file:

php artisan vendor:publish --tag="trustpilot-config"

Configuration

Add to your .env:

TRUSTPILOT_API_KEY=your-api-key
TRUSTPILOT_API_SECRET=your-api-secret
TRUSTPILOT_BUSINESS_UNIT_ID=your-business-unit-id

Create the application at the Trustpilot Business app. The secret is only needed for the private endpoints (private reviews, replies, invitations, tags) — leave it unset if you only read public data. Find your business unit id with Trustpilot::businessUnits()->search('example.com').

Config Options

// config/trustpilot.php
return [
    'api_key' => env('TRUSTPILOT_API_KEY'),
    'api_secret' => env('TRUSTPILOT_API_SECRET'),
    'business_unit_id' => env('TRUSTPILOT_BUSINESS_UNIT_ID'),
    'base_url' => env('TRUSTPILOT_BASE_URL', 'https://api.trustpilot.com/v1'),
    'cache_key' => env('TRUSTPILOT_CACHE_KEY', 'trustpilot.access_token'),
];

Usage

use JeffersonGoncalves\Trustpilot\Facades\Trustpilot;
use JeffersonGoncalves\Trustpilot\Exceptions\TrustpilotException;

Every method that takes a $businessUnitId falls back to trustpilot.business_unit_id when you omit it.

Business Units

Trustpilot::businessUnits()->search('example.com', limit: 20);
Trustpilot::businessUnits()->get();
Trustpilot::businessUnits()->profile();
Trustpilot::businessUnits()->categories();
Trustpilot::businessUnits()->webLinks('pt-BR');

Reviews

Trustpilot::reviews()->list(perPage: 20, orderBy: 'createdat.desc', stars: 5, language: 'pt');
Trustpilot::reviews()->get('review-id');
Trustpilot::reviews()->latest(20);

// private — needs TRUSTPILOT_API_SECRET
Trustpilot::reviews()->private(perPage: 20, stars: 1);
Trustpilot::reviews()->reply('review-id', 'Thanks for the feedback!');
Trustpilot::reviews()->deleteReply('review-id');

Invitations

Trustpilot::invitations()->create('ada@example.com', 'Ada Lovelace', reference: 'order-42');

// extra payload keys go through `attributes`
Trustpilot::invitations()->create('ada@example.com', 'Ada Lovelace', attributes: [
    'senderEmail' => 'noreply@example.com',
    'replyTo' => 'support@example.com',
    'templateId' => 'your-template-id',
]);

Trustpilot::invitations()->link('ada@example.com', 'Ada Lovelace', reference: 'order-42');
Trustpilot::invitations()->templates();

Review Tags

Trustpilot::tags()->get('review-id');
Trustpilot::tags()->add('review-id', 'topic', 'shipping');
Trustpilot::tags()->remove('review-id', 'topic', 'shipping');

Handling errors

try {
    $reviews = Trustpilot::reviews()->list();
} catch (TrustpilotException $e) {
    // $e->getMessage() — the API's message/error_description, or the raw response body
    // $e->statusCode  — the HTTP status code returned by Trustpilot (0 for config errors)
}

Testing

composer test

Static Analysis

composer analyse

Code Formatting

composer format

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security

Please review our security policy on how to report security vulnerabilities.

Credits

License

The MIT License (MIT). Please see License File for more information.