rossbearman/laravel-active-campaign
| Install | |
|---|---|
composer require rossbearman/laravel-active-campaign |
|
| Latest Version: | v1.3.4 |
| PHP: | ^8.1 |
| License: | MIT |
| Last Updated: | Aug 21, 2026 |
| Links: | GitHub · Packagist |
Laravel ActiveCampaign
This package provides a simple interface to the ActiveCampaign API v3. It is a continuation of the original laravel-active-campaign package by Tjardoo/Label84 and can easily be migrated.
The package currently supports Contacts, Custom Fields, Custom Fields Values, Tags, Lists and Messages. Feel free to open a pull request to add support for other endpoints.
- Laravel Support
- Installation
- Migrating from Label84/ActiveCampaign
- Usage
- Examples
- Code Quality
- License
Laravel Support
| Version | Release |
|---|---|
| 10.x | 1.3 |
| 11.x | 1.3.1 |
| 12.x | 1.3.2 |
| 13.x | 1.3.3 |
Installation
1. Install the package via composer
composer require rossbearman/laravel-active-campaign
2. Publish the config file
php artisan vendor:publish --provider="RossBearman\ActiveCampaign\ActiveCampaignServiceProvider" --tag="config"
3. Add the base URL and API key to your .env
ACTIVE_CAMPAIGN_BASE_URL=
ACTIVE_CAMPAIGN_API_KEY=
Migrating from Label84/ActiveCampaign
The only change required to migrate to v1.3 is replacing Label84 with RossBearman in namespaces and requiring rossbearman/laravel-active-campaign instead of label84/laravel-active-campaign in your composer.json file.
Usage
Access via facade:
use RossBearman\ActiveCampaign\Facades\ActiveCampaign;
$contact = ActiveCampaign::contacts()->get(1);
Resolve directly out of the container:
use RossBearman\ActiveCampaign\ActiveCampaign;
$contact = resolve(ActiveCampaign::class)->contacts()->get(1);
Inject into a constructor or method via automatic injection:
use RossBearman\ActiveCampaign\ActiveCampaign;
class ContactController extends Controller
{
public function __construct(private readonly ActiveCampaign $activeCampaign) { }
$this->activeCampaign->contacts()->get(1);
}
Examples
The following examples use the facade for simplicity and assume RossBearman\ActiveCampaign\Facades\ActiveCampaign has been imported.
Contacts
Retrieve an existing contact
$contact = ActiveCampaign::contacts()->get(1);
List all contact, search contacts, or filter contacts by query defined criteria
See the API docs for a full list of possible query parameters.
$contacts = ActiveCampaign::contacts()->list();
$contactByEmail = ActiveCampaign::contacts()->list('email=info@example.com');
$singleList = ActiveCampaign::contacts()->list('listid=1');
Create a new contact
$contactId = ActiveCampaign::contacts()->create('info@example.com', [
'firstName' => 'John',
'lastName' => 'Doe',
'phone' => '+3112345678',
]);
Create a contact if they don't exist, or update an existing contact
$contact = ActiveCampaign::contacts()->sync('info@example.com', [
'firstName' => 'John',
'lastName' => 'Doe',
'phone' => '+3112345678',
]);
Update an existing contact
use RossBearman\ActiveCampaign\DataObjects\ActiveCampaignContact;
$contact = new ActiveCampaignContact(
id: 1,
email: 'info@example.com',
phone: '+3112345678',
firstName: 'John',
lastName: 'Deer',
);
ActiveCampaign::contacts()->update($contact);
Update the status of a contact on a list
The status should be 1 for subscribed and 2 for unsubscribed
$contact = ActiveCampaign::contacts()->updateListStatus(
contactId: 1,
listId: 1,
status: 1,
);
Delete an existing contact
ActiveCampaign::contacts()->delete(1);
Add a tag to contact
$contactTagId = ActiveCampaign::contacts()->tag(
id: 1,
tagId: 20
);
Remove a tag from a contact
ActiveCampaign::contacts()->untag(contactTagId: 2340);
Custom Field Values
Retrieve an existing field value
$fieldValue = ActiveCampaign::fieldValues()->get(50);
Create a field value
$fieldValueId = ActiveCampaign::fieldValues()->create(
contactId: 1,
fieldId: 50,
value: 'active',
);
Update an existing field value
use RossBearman\ActiveCampaign\DataObjects\ActiveCampaignFieldValue;
$fieldValue = new ActiveCampaignFieldValue(
contactId: 1,
field: 50,
value: 'inactive',
);
ActiveCampaign::fieldValues()->update($fieldValue);
Delete an existing field value
ActiveCampaign::fieldValues()->delete(50);
Custom Fields
Retrieve an existing field
$field = ActiveCampaign::fields()->get(1);
Create a field
$fieldId = ActiveCampaign::fields()->create(
type: 'textarea',
title: 'about',
description: 'Short introduction',
);
Update an existing field
use RossBearman\ActiveCampaign\DataObjects\ActiveCampaignField;
$fieldValue = new ActiveCampaignField(
id: 1,
type: 'textarea',
title: 'about',
description: 'Relevant skills',
);
ActiveCampaign::fields()->update($fieldValue);
Delete an existing field
ActiveCampaign::fields()->delete(1);
Tags
Retrieve an existing tag
$tag = ActiveCampaign::tags()->get(100);
List all tags, optionally filtered by name
$tags = ActiveCampaign::tags()->list();
$filteredTags = ActiveCampaign::tags()->list('test_');
Create a tag
$tag = ActiveCampaign::tags()->create(
name: 'test_tag',
description: 'This is a new tag'
);
Update an existing tag
use RossBearman\ActiveCampaign\DataObjects\ActiveCampaignTag;
$tag = new ActiveCampaignTag(
id: 100,
name: 'test_tag',
description: 'Another description',
);
ActiveCampaign::tags()->update($tag);
Delete an existing tag
ActiveCampaign::tags()->delete(100);
Messages
Retrieve an existing message
$message = ActiveCampaign::messages()->get('1');
List all messages, or filter messages by query defined criteria
$messages = ActiveCampaign::messages()->list();
$firstTenMessages = ActiveCampaign::messages()->list('limit=10');
Create a message
Any additional fields supported by the API, such as subject, preheader_text, name, text and
html, can be passed via $attributes.
$messageId = ActiveCampaign::messages()->create(
fromname: 'John Doe',
fromemail: 'info@example.com',
reply2: 'reply@example.com',
attributes: [
'subject' => 'Welcome aboard',
'html' => '<p>Thanks for signing up.</p>',
],
);
Update an existing message
Only the writable fields (name, fromname, fromemail, reply2, subject, preheader_text,
text and html) are sent to the API.
use RossBearman\ActiveCampaign\DataObjects\ActiveCampaignMessage;
$message = new ActiveCampaignMessage(
id: '1',
userid: null,
name: 'Welcome email',
fromname: 'John Doe',
fromemail: 'info@example.com',
reply2: 'reply@example.com',
subject: 'A new subject',
preheader_text: 'Thanks for signing up',
text: 'Thanks for signing up.',
html: '<p>Thanks for signing up.</p>',
charset: null,
encoding: null,
format: null,
priority: null,
hidden: null,
cdate: null,
mdate: null,
);
ActiveCampaign::messages()->update($message);
Note that when a message is edited through the API, the ActiveCampaign preview window and email builder will not show the updated contents.
Delete an existing message
ActiveCampaign::messages()->delete('1');
Code Quality
./vendor/bin/phpstan analyse
License
Related Packages
laravel-paypalpayment is simple package help you process direct credit card paym...
Powerful PHP database abstraction layer (DBAL) with many features for database s...