How can I add programmatically a Tag after SAVE_ON event in case of Assets types
A Tag field is like every other relation field. Just insert an array of ids in the field and save the element

$element-&gt;setFieldValue('fieldHandle', [1,2,3,4,5,6]);
Craft::$app-&gt;getElements()-&gt;saveElement($element);


In order to get the current ids and add one, just do

$ids = $element-&gt;getFieldValue('fieldHandle')-&gt;ids();
$ids[] = 'yourNewTagId';
$element-&gt;setFieldValue('fieldHandle', $ids);
Craft::$app-&gt;getElements()-&gt;saveElement($element);


To Create a new Tag do

$tag = new Tag();
$tag-&gt;title = "your new tag name";
$tag-&gt;groupId = 1;
Craft::$app-&gt;getElements()-&gt;saveElement($tag);

// and add it to the element
$element = Craft::$app-&gt;getElements()-&gt;getElementById(2);
$ids = $element-&gt;getFieldValue('fieldHandle')-&gt;ids();
$ids[] = $tag-&gt;id;
$element-&gt;setFieldValue('fieldHandle', $ids);
Craft::$app-&gt;getElements()-&gt;saveElement($element);


Edit: 

Note that I'm using the setFieldValue directly instead of the magic __get and __set methods for a better performance.