In theory, this should be possible by creating an entry in the label_entry table, providing the sys_id of the tag, table, and sys_id of the record with which you want to associate the tag. After a quick test:
POST /api/now/table/label_entry
{"label":"4f1094ff13162600973e70d66144b033","table":"incident","table_key":"0d97240e13aca600973e70d66144b03f","title":"Incident - INC0010018"}
I found that the table and table_key fields have ACL entries that restrict access to users with the maint role. I have no information on why this is so, but I suspect there may be a reason not to create these entries directly through the API.
ACL REST API, , GlideRecord label_entry. , .