laravel-email-chef maintained by offline-agency
Description
This is a simple Laravel package for integration with Email Chef API
Author
Last update
2026/04/07 13:05
(dev-main)
License
Downloads
135
Tags
Laravel Email Chef API
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.