jeffersongoncalves / laravel-instantly
PHP/Laravel client for the Instantly.ai REST API: campaigns, leads, accounts, analytics and blocklist.
Package info
github.com/jeffersongoncalves/laravel-instantly
pkg:composer/jeffersongoncalves/laravel-instantly
Fund package maintenance!
Requires
- php: ^8.2
- illuminate/http: ^12.0|^13.0
- illuminate/support: ^12.0|^13.0
- spatie/laravel-package-tools: ^1.16
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 Instantly
A Laravel client for the Instantly.ai v1 REST API. A fluent Instantly facade covers cold-email campaigns, leads, warm-up accounts, analytics and the blocklist, authenticates every request with the api_key parameter, and throws an InstantlyException on a non-2xx response instead of returning a silent error array.
Features
- Campaigns —
list(),get(),status(),launch(),pause() - Leads —
list(),add(),delete(),status() - Accounts —
list(),status(),warmupStatus() - Analytics —
campaignSummary(),campaignSteps(),accountCount() - Blocklist —
list(),add() - Thin by design — every method returns the raw decoded JSON response as an array, no DTOs
- Fails loud — required parameters throw
InvalidArgumentException; a non-2xx API response throwsInstantlyExceptioncarrying the API's error message and HTTP status code
Installation
You can install the package via composer:
composer require jeffersongoncalves/laravel-instantly
Optionally publish the config file:
php artisan vendor:publish --tag="instantly-config"
Configuration
Add to your .env:
INSTANTLY_API_KEY=your-api-key
Find your API key in Instantly under Settings → Integrations.
Config Options
// config/instantly.php return [ 'api_key' => env('INSTANTLY_API_KEY'), 'base_url' => env('INSTANTLY_BASE_URL', 'https://api.instantly.ai/api/v1'), ];
Usage
use JeffersonGoncalves\Instantly\Facades\Instantly; use JeffersonGoncalves\Instantly\Exceptions\InstantlyException;
Campaigns
Instantly::campaigns()->list(limit: 10, skip: 0); Instantly::campaigns()->get('campaign-id'); Instantly::campaigns()->status('campaign-id'); Instantly::campaigns()->launch('campaign-id'); Instantly::campaigns()->pause('campaign-id');
Leads
Instantly::leads()->list('campaign-id', limit: 10); Instantly::leads()->add('campaign-id', [ 'email' => 'lead@acme.com', 'first_name' => 'Jane', 'last_name' => 'Doe', 'company_name' => 'Acme', ]); Instantly::leads()->delete('campaign-id', 'lead@acme.com'); Instantly::leads()->status('campaign-id', 'lead@acme.com');
Accounts
Instantly::accounts()->list(limit: 10); Instantly::accounts()->status('inbox@acme.com'); Instantly::accounts()->warmupStatus('inbox@acme.com');
Analytics
Instantly::analytics()->campaignSummary('campaign-id', start_date: '2026-01-01', end_date: '2026-01-31'); Instantly::analytics()->campaignSteps('campaign-id'); Instantly::analytics()->accountCount('2026-01-01', '2026-01-31');
Blocklist
Instantly::blocklist()->list(); Instantly::blocklist()->add(['spam.com', 'bad@spam.com']);
Handling errors
try { $result = Instantly::campaigns()->launch('campaign-id'); } catch (InstantlyException $e) { // $e->getMessage() — the API's error message, or the raw response body // $e->errorBody() — the full decoded JSON error response } catch (InvalidArgumentException $e) { // a required parameter was empty }
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.
