jeffersongoncalves / laravel-convertkit
PHP/Laravel client for the ConvertKit REST API v3: subscribers, forms, sequences, tags and broadcasts.
Package info
github.com/jeffersongoncalves/laravel-convertkit
pkg:composer/jeffersongoncalves/laravel-convertkit
Fund package maintenance!
Requires
- php: ^8.2
- illuminate/http: ^12.0|^13.0
- illuminate/support: ^12.0|^13.0
- spatie/laravel-package-tools: ^1.14.0
Requires (Dev)
- larastan/larastan: ^3.0
- laravel/pint: ^1.21
- orchestra/testbench: ^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 ConvertKit
A PHP/Laravel client for the ConvertKit REST API v3. Covers subscribers, forms, sequences, tags and broadcasts through a simple, typed API built on Laravel's Http client.
Features
- Subscribers: list, get, update, unsubscribe
- Forms: list, subscribe
- Sequences: list, subscribe
- Tags: list, subscribe, remove
- Broadcasts: list, create
- Picks the right credential per endpoint —
api_secretwhere ConvertKit requires it,api_keyfor the public/subscribe endpoints - Throws
ConvertKitException(with the original API error body) on any non-2xx response - Throws
InvalidArgumentExceptionbefore hitting the API when the required credential for an endpoint isn't configured
Installation
You can install the package via composer:
composer require jeffersongoncalves/laravel-convertkit
Publish the config file:
php artisan vendor:publish --tag=convertkit-config
Set your ConvertKit credentials in .env:
CONVERTKIT_API_KEY=your-api-key CONVERTKIT_API_SECRET=your-api-secret
Both values are found under Settings > Advanced in your ConvertKit account. CONVERTKIT_API_KEY is enough for the public endpoints (forms, sequences and tags: list and subscribe); every other endpoint (subscribers, broadcasts, removing a tag) needs CONVERTKIT_API_SECRET.
Configuration
// config/convertkit.php return [ 'api_key' => env('CONVERTKIT_API_KEY', ''), 'api_secret' => env('CONVERTKIT_API_SECRET', ''), 'base_url' => env('CONVERTKIT_BASE_URL', 'https://api.convertkit.com/v3'), ];
Usage
The package is resolved via the ConvertKit facade or by injecting JeffersonGoncalves\ConvertKit\ConvertKit. Each resource is exposed as a method returning a dedicated resource class.
Subscribers
Requires convertkit.api_secret:
use JeffersonGoncalves\ConvertKit\Facades\ConvertKit; $subscribers = ConvertKit::subscribers()->list(); // Paginated $subscribers = ConvertKit::subscribers()->list(page: 2); $subscriber = ConvertKit::subscribers()->get(12345); ConvertKit::subscribers()->update(12345, firstName: 'Jane', fields: ['plan' => 'pro']); ConvertKit::subscribers()->unsubscribe('jane@example.com');
Forms
Uses convertkit.api_key:
$forms = ConvertKit::forms()->list(); ConvertKit::forms()->subscribe( formId: 123, email: 'jane@example.com', firstName: 'Jane', fields: ['plan' => 'pro'], );
Sequences
Uses convertkit.api_key:
$sequences = ConvertKit::sequences()->list(); ConvertKit::sequences()->subscribe(123, 'jane@example.com');
Tags
list() and subscribe() use convertkit.api_key; remove() requires convertkit.api_secret:
$tags = ConvertKit::tags()->list(); ConvertKit::tags()->subscribe(123, 'jane@example.com'); // Remove tag 123 from subscriber 12345 ConvertKit::tags()->remove(tagId: 123, subscriberId: 12345);
Broadcasts
Requires convertkit.api_secret:
$broadcasts = ConvertKit::broadcasts()->list(); // Paginated $broadcasts = ConvertKit::broadcasts()->list(page: 2); ConvertKit::broadcasts()->create( subject: 'Hello World', content: '<p>Hi there!</p>', template: 'plain', );
Error handling
Any non-2xx API response throws JeffersonGoncalves\ConvertKit\Exceptions\ConvertKitException, which exposes the decoded error body:
use JeffersonGoncalves\ConvertKit\Exceptions\ConvertKitException; try { ConvertKit::subscribers()->get(999999); } catch (ConvertKitException $e) { logger()->error($e->getMessage(), $e->errorBody()); }
Calling an api_secret-only method without convertkit.api_secret configured (or an api_key-only method without convertkit.api_key) throws InvalidArgumentException before any HTTP call is made.
Testing
composer test
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
Credits
License
The MIT License (MIT). Please see License File for more information.
