offline-agency / laravel-email-chef
This is a simple Laravel package for integration with Email Chef API
Package info
github.com/offline-agency/laravel-email-chef
pkg:composer/offline-agency/laravel-email-chef
Fund package maintenance!
Requires
- php: >=7.4
- ext-json: *
- guzzlehttp/guzzle: ^5.8|^6.5|7.0.1|^7.2
- illuminate/container: ^5.8|^6.0|^7.0|^8.0|^9.0
- illuminate/http: ^5.8|^6.0|^7.0|^8.0|^9.0
- illuminate/support: ^5.8|^6.0|^7.0|^8.0|^9.0
Requires (Dev)
- orchestra/testbench: ^3.1|^4.0|^5.0|^6.0|^7.0
- phpstan/phpstan: ^1.7
- phpunit/phpunit: ^5.8|^6.0|^7.0|^8.0|^9.0
This package is auto-updated.
Last update: 2026-03-17 08:49:03 UTC
README
A Laravel package for the EmailChef API — covering all 14 resource groups with a fluent, typed PHP interface.
Requirements
| Dependency | Version |
|---|---|
| PHP | ^8.4 |
| Laravel | ^12.0 |
| testbench | ^10.0 (dev) |
Installation
composer require offline-agency/laravel-email-chef
Publish the config file:
php artisan vendor:publish --provider="OfflineAgency\LaravelEmailChef\LaravelEmailChefServiceProvider" --tag="laravel-email-chef-config"
Add your credentials to .env:
EMAIL_CHEF_USERNAME=your@email.com EMAIL_CHEF_PASSWORD=your-password
The published config (config/email-chef.php):
return [ 'baseUrl' => 'https://app.emailchef.com/apps/api/v1/', 'login_url' => 'https://app.emailchef.com/api/', 'username' => env('EMAIL_CHEF_USERNAME'), 'password' => env('EMAIL_CHEF_PASSWORD'), 'list_id' => '97322', 'contact_id' => '656023', ];
Usage
Every API class is instantiated directly — authentication is handled automatically.
Account
use OfflineAgency\LaravelEmailChef\Api\Resources\AccountApi; $account = (new AccountApi())->getCollection(); // → AccountEntity
Account Infos
use OfflineAgency\LaravelEmailChef\Api\Resources\AccountInfosApi; $info = (new AccountInfosApi())->getInstance(); $result = (new AccountInfosApi())->update(['instance_in' => [...]]);
Subscription
use OfflineAgency\LaravelEmailChef\Api\Resources\SubscriptionApi; $plans = (new SubscriptionApi())->getCollection(); // → Collection<SubscriptionEntity>
Lists
use OfflineAgency\LaravelEmailChef\Api\Resources\ListsApi; $lists = (new ListsApi())->getCollection(limit: 10, offset: 0, orderby: 'name', order_type: 'asc'); $list = (new ListsApi())->getInstance('97322'); $stats = (new ListsApi())->getStats('97322'); (new ListsApi())->create(['list_name' => 'My List', 'list_description' => 'desc']); (new ListsApi())->update('97322', ['list_name' => 'Updated']); (new ListsApi())->delete('97322'); (new ListsApi())->subscribe('97322', ['email' => 'user@example.com']); (new ListsApi())->unsubscribe('97322', '656023');
Contacts
use OfflineAgency\LaravelEmailChef\Api\Resources\ContactsApi; $count = (new ContactsApi())->count('97322'); $contacts = (new ContactsApi())->getCollection('97322', 10, 0, 'email', 'asc'); $contact = (new ContactsApi())->getInstance('97322', '656023'); (new ContactsApi())->create(['instance_in' => ['list_id' => '97322', 'email' => 'new@example.com']]); (new ContactsApi())->update('656023', ['instance_in' => ['email' => 'updated@example.com']]); (new ContactsApi())->delete('97322', '656023');
Predefined Fields
use OfflineAgency\LaravelEmailChef\Api\Resources\PredefinedFieldsApi; $fields = (new PredefinedFieldsApi())->getCollection();
Custom Fields
use OfflineAgency\LaravelEmailChef\Api\Resources\CustomFieldsApi; $fields = (new CustomFieldsApi())->getCollection(); $field = (new CustomFieldsApi())->getInstance('1'); $count = (new CustomFieldsApi())->count(); (new CustomFieldsApi())->create(['instance_in' => ['name' => 'Birthday', 'type' => 'date']]); (new CustomFieldsApi())->update('1', ['instance_in' => ['name' => 'Birth Date']]); (new CustomFieldsApi())->delete('1');
Blockings
use OfflineAgency\LaravelEmailChef\Api\Resources\BlockingsApi; $list = (new BlockingsApi())->getCollection('spam@example.com', 10, 0); $count = (new BlockingsApi())->count('spam@example.com'); (new BlockingsApi())->create('block@example.com', 'email'); (new BlockingsApi())->delete('block@example.com');
Import Tasks
use OfflineAgency\LaravelEmailChef\Api\Resources\ImportTasksApi; $tasks = (new ImportTasksApi())->getCollection(10, 0); $task = (new ImportTasksApi())->getInstance('42'); (new ImportTasksApi())->create(['instance_in' => ['list_id' => '97322', 'contacts' => [...]]]);
Segments
use OfflineAgency\LaravelEmailChef\Api\Resources\SegmentsApi; $segments = (new SegmentsApi())->getCollection('97322', 10, 0); $segment = (new SegmentsApi())->getInstance('5'); $count = (new SegmentsApi())->getCount('97322'); $contacts = (new SegmentsApi())->getContactsCount('5'); (new SegmentsApi())->createInstance(97322, ['instance_in' => [...]]); (new SegmentsApi())->updateInstance('97322', '5', ['instance_in' => [...]]); (new SegmentsApi())->deleteInstance('5');
Campaigns
use OfflineAgency\LaravelEmailChef\Api\Resources\CampaignsApi; $count = (new CampaignsApi())->getCount(); $campaigns = (new CampaignsApi())->getCollection('active', 10, 0, 'name', 'asc'); $campaign = (new CampaignsApi())->getInstance('10'); (new CampaignsApi())->createInstance(['instance_in' => [...]]); (new CampaignsApi())->updateInstance('10', ['instance_in' => [...]]); (new CampaignsApi())->deleteInstance('10'); (new CampaignsApi())->sendTestEmail('10', ['instance_in' => ['email' => 'test@example.com']]); (new CampaignsApi())->sendCampaign('10', []); (new CampaignsApi())->schedule('10', ['instance_in' => ['send_time' => '2025-12-01 09:00:00']]); (new CampaignsApi())->cancelScheduling('10'); (new CampaignsApi())->archive('10'); (new CampaignsApi())->unarchive('10'); (new CampaignsApi())->cloning(['instance_in' => ['id' => '10']]); (new CampaignsApi())->getLinkCollection('10');
Autoresponders
use OfflineAgency\LaravelEmailChef\Api\Resources\AutorespondersApi; $count = (new AutorespondersApi())->getCount(); $list = (new AutorespondersApi())->getCollection(10, 0, 'name', 'asc'); $ar = (new AutorespondersApi())->getInstance('20'); (new AutorespondersApi())->createInstance(['instance_in' => [...]]); (new AutorespondersApi())->updateInstance('20', ['instance_in' => [...]]); (new AutorespondersApi())->deleteInstance('20'); (new AutorespondersApi())->sendTestEmail('20', ['instance_in' => ['email' => 'test@example.com']]); (new AutorespondersApi())->activate('20', []); (new AutorespondersApi())->deactivate('20', []); (new AutorespondersApi())->cloning(['instance_in' => ['id' => '20']]); (new AutorespondersApi())->getLinksCollection('20');
Send Mail (transactional)
use OfflineAgency\LaravelEmailChef\Api\Resources\SendEmailApi; (new SendEmailApi())->sendMail([ 'to' => 'customer@example.com', 'subject' => 'Your order is ready', 'html' => '<p>Thank you for your order!</p>', ]);
SMS
use OfflineAgency\LaravelEmailChef\Api\Resources\SMSApi; (new SMSApi())->send(['to' => '+39 333 1234567', 'text' => 'Your code is 4821.']); (new SMSApi())->getBalance(); (new SMSApi())->getStatusMessage('sms-123'); (new SMSApi())->getBulkMessageStatus('bulk-1');
API Coverage
| Group | Class | Methods |
|---|---|---|
| Account | AccountApi | getCollection() |
| Account Infos | AccountInfosApi | getInstance(), update() |
| Subscription | SubscriptionApi | getCollection() |
| Lists | ListsApi | getCollection(), getInstance(), getStats(), create(), update(), delete(), subscribe(), unsubscribe() |
| Contacts | ContactsApi | count(), getCollection(), getInstance(), create(), update(), delete() |
| Predefined Fields | PredefinedFieldsApi | getCollection() |
| Custom Fields | CustomFieldsApi | getCollection(), getInstance(), count(), create(), update(), delete() |
| Blockings | BlockingsApi | getCollection(), count(), create(), delete() |
| Import Tasks | ImportTasksApi | getCollection(), getInstance(), create() |
| Segments | SegmentsApi | getCollection(), getInstance(), getCount(), getContactsCount(), createInstance(), updateInstance(), deleteInstance() |
| Campaigns | CampaignsApi | getCount(), getCollection(), getInstance(), createInstance(), updateInstance(), deleteInstance(), sendTestEmail(), sendCampaign(), schedule(), cancelScheduling(), archive(), unarchive(), cloning(), getLinkCollection() |
| Autoresponders | AutorespondersApi | getCount(), getCollection(), getInstance(), createInstance(), updateInstance(), deleteInstance(), sendTestEmail(), activate(), deactivate(), cloning(), getLinksCollection() |
| Send Mail | SendEmailApi | sendMail() |
| SMS | SMSApi | send(), getBalance(), getStatusMessage(), getBulkMessageStatus() |
Testing
composer test # run all tests composer test-coverage # run with coverage report composer analyse # PHPStan level 6 composer lint # fix code style composer lint:test # check code style (no changes)
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please report security issues to support@offlineagency.com.
Credits
License
The MIT License (MIT). Please see License File for more information.