jeffersongoncalves / laravel-wistia
A lightweight Wistia Data API client for Laravel.
Package info
github.com/jeffersongoncalves/laravel-wistia
pkg:composer/jeffersongoncalves/laravel-wistia
Requires
- php: ^8.2
- illuminate/support: ^11.0|^12.0|^13.0
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- larastan/larastan: ^3.0
- laravel/pint: ^1.21
- orchestra/testbench: ^9.0|^10.0|^11.0
- pestphp/pest: ^3.0|^4.0
- pestphp/pest-plugin-laravel: ^3.0|^4.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
Laravel Wistia
A lightweight Wistia Data API client for Laravel. It wraps the api.wistia.com v1 endpoints behind a small static client, threads your API password as HTTP basic auth, and defensively returns null (rather than throwing) on network failures or non-2xx responses.
Features
- Account —
account(),accountStats() - Projects —
projects(),project(),createProject(),updateProject(),deleteProject(),projectStats() - Medias —
medias(),media(),updateMedia(),deleteMedia(),copyMedia(),mediaStats() - Stats —
mediaStatsByDate(),mediaEngagement(),visitors(),visitor(),events() - Captions —
captions(),createCaption()
Installation
composer require jeffersongoncalves/laravel-wistia
Optionally publish the config file:
php artisan vendor:publish --tag="laravel-wistia-config"
Configuration
Add to your .env:
WISTIA_API_KEY=...
Create an API password from your Wistia account API settings.
Config Options
// config/wistia.php return [ 'token' => env('WISTIA_API_KEY'), 'timeout' => (int) env('WISTIA_TIMEOUT', 8), ];
When wistia.token is null the client falls back to config('services.wistia.token').
Usage
use JeffersonGoncalves\Wistia\WistiaClient; // Account $account = WistiaClient::account(); $accountStats = WistiaClient::accountStats(); // Projects $projects = WistiaClient::projects(['per_page' => 50]); $project = WistiaClient::project('abc123'); $created = WistiaClient::createProject('Onboarding', public: true, description: 'Customer onboarding videos'); WistiaClient::updateProject('abc123', ['name' => 'Onboarding 2026']); WistiaClient::deleteProject('abc123'); $projectStats = WistiaClient::projectStats('abc123'); // Medias $medias = WistiaClient::medias(['project_id' => 'abc123', 'type' => 'Video']); $media = WistiaClient::media('vid1'); WistiaClient::updateMedia('vid1', ['name' => 'Intro', 'description' => 'Welcome']); WistiaClient::copyMedia('vid1', targetProjectId: 'def456'); WistiaClient::deleteMedia('vid1'); $mediaStats = WistiaClient::mediaStats('vid1'); // Stats $byDate = WistiaClient::mediaStatsByDate('vid1', startDate: '2026-09-01', endDate: '2026-09-07'); $engagement = WistiaClient::mediaEngagement('vid1'); $visitors = WistiaClient::visitors(['search' => 'jane', 'per_page' => 50]); $visitor = WistiaClient::visitor('visitor_key'); $events = WistiaClient::events(['media_id' => 'vid1']); // Captions $captions = WistiaClient::captions('vid1'); WistiaClient::createCaption('vid1', 'eng', file_get_contents('subtitles.srt'));
Single-resource methods return array<string, mixed>|null, collection methods return list<array<string, mixed>>|null, and deleteProject()/deleteMedia() return bool — null/false on any network failure or non-2xx response instead of throwing. Null arguments are stripped from the payload before it is sent, so optional fields are simply omitted.
Testing
composer test
Static Analysis
composer analyse
Code Formatting
composer format
Changelog
Please see CHANGELOG for more information on what has changed recently.
License
The MIT License (MIT). Please see License File for more information.
