Tags & Lists Hooks
FluentCRM Core IntermediateThese action hooks fire when tags or lists are created, updated, or deleted.
Legacy aliases take an ID, not a model
Each hook here has a legacy fluentcrm_* twin — fluentcrm_tag_created, fluentcrm_list_updated, and so on. The create and update aliases receive the record ID, not the model, so the two families are not drop-in equivalents. The delete aliases match, since both pass an ID.
The legacy aliases fire from the controllers, the fluentCrmApi() classes, and the CRM migrators; only the input-sanitizing path fires the fluent_crm/ hooks alone. Prefer the fluent_crm/ names.
Tag Hooks
fluent_crm/tag_created
This action runs when a new tag has been created — from the Tags screen, the bulk create endpoint, the fluentCrmApi('tags') API, the CRM migrators, and whenever an unknown tag name is auto-created while sanitizing tag input.
Parameters
$tagModelTag Model
Usage:
add_action('fluent_crm/tag_created', function($tagModel) {
// Do your stuff here
});Source: app/Http/Controllers/TagsController.php, app/Api/Classes/Tags.php, app/Services/Sanitize.php, app/Services/CrmMigrator/BaseMigrator.php
fluent_crm/tag_updated
This action runs when a tag has been updated.
Parameters
$tagModelTag Model - already saved
Usage:
add_action('fluent_crm/tag_updated', function($tagModel) {
// Do your stuff here
});Source: app/Http/Controllers/TagsController.php, app/Api/Classes/Tags.php
fluent_crm/tag_deleted
This action runs after a tag has been deleted, both from the single-delete endpoint and once per tag from the bulk delete.
WARNING
The tag row is already gone — only its ID is passed.
Parameters
$tagIdINT - Tag ID
Usage:
add_action('fluent_crm/tag_deleted', function($tagId) {
// Do your stuff here
});Source: app/Http/Controllers/TagsController.php
List Hooks
fluent_crm/list_created
This action runs when a new list has been created — from the Lists screen, the bulk create endpoint, the fluentCrmApi('lists') API, the CRM migrators, and whenever an unknown list name is auto-created while sanitizing list input.
Older versions pass an array from one call site
FluentCRM 3.1.10 and earlier fired this hook from Sanitize::sanitizeListIds() — the path that auto-creates lists from names — with an array of list IDs instead of the model. Every call site now passes the Lists model. If you support those versions, guard before using it:
add_action('fluent_crm/list_created', function($listModel) {
if (!$listModel instanceof \FluentCrm\App\Models\Lists) {
return; // older Sanitize::sanitizeListIds() passed an array of IDs
}
// ...
});Parameters
$listModelLists Model - the newly created list
Usage:
add_action('fluent_crm/list_created', function($listModel) {
// Do your stuff here
});Source: app/Http/Controllers/ListsController.php, app/Api/Classes/Lists.php, app/Services/Sanitize.php, app/Services/CrmMigrator/BaseMigrator.php
fluent_crm/list_updated
This action runs when a list has been updated.
Parameters
$listModelLists Model - already saved
Usage:
add_action('fluent_crm/list_updated', function($listModel) {
// Do your stuff here
});Source: app/Http/Controllers/ListsController.php, app/Api/Classes/Lists.php
fluent_crm/list_deleted
This action runs after a list has been deleted, both from the single-delete endpoint and once per list from the bulk delete.
WARNING
The list row is already gone — only its ID is passed.
Parameters
$listIdINT - List ID
Usage:
add_action('fluent_crm/list_deleted', function($listId) {
// Do your stuff here
});Source: app/Http/Controllers/ListsController.php