Siren

CollaboratorAddedToCollaboratorGroup

Fires when a collaborator becomes a member of a collaborator group.

Last updated: June 3, 2026

CollaboratorAddedToCollaboratorGroup fires every time a collaborator joins a collaborator group, whether through the dedicated add-members endpoint or as part of a bulk member replacement. One event fires per new member, even when many are added in a single request. It fires only for genuinely new members, so re-sending a collaborator who is already in the group does not fire it again. The event is broadcast after the membership is saved, so the new member is already queryable in the group when your handler runs.

The event ID is collaborator_added_to_collaborator_group, and its fully qualified class is Siren\Plus\Core\Groups\Events\CollaboratorAddedToCollaboratorGroup. To run code when it fires, register a handler with Siren’s event system. See listeners for how to register one and the events introduction for the dispatch model.

What does this event carry?

The event carries the group id, the collaborator id, and the metadata array stored on the membership. For linear chain groups the metadata usually contains a position. For parent-child groups it usually contains a parentCollaboratorId. The metadata array is whatever the structure needs.

The metadata is what was supplied when the member was added, so it is an empty array if none was sent. Siren does not fill in defaults here. A linear-chain member added without a position, for example, carries an empty metadata array and is treated as position 0 only later, when the structure reads the group.

use PHPNomad\Events\Interfaces\CanHandle;
use PHPNomad\Events\Interfaces\Event;
use Siren\Plus\Core\Groups\Events\CollaboratorAddedToCollaboratorGroup;

class HandleNewMember implements CanHandle
{
    public function handle(Event $event): void
    {
        if (!$event instanceof CollaboratorAddedToCollaboratorGroup) {
            return;
        }

        $groupId = $event->getGroupId();
        $collaboratorId = $event->getCollaboratorId();
        $metadata = $event->getMetadata();

        // metadata is structure-specific: ['position' => 2], etc.
    }
}

How does it fit?

This is the event that changes who the cascade will visit. When the next trigger fires against a program or distributor bound to this group, the new member is in scope. The activity feed listens here, and so does any onboarding flow that wants to send a welcome notification when a collaborator joins a group.