-item_id: If supplied the system assumes we want to store a new revision of the cr_item, otherwise it will create a new item.
This doesn't work if you predefine the item_id, such as pre-generated keys for double-click protection. Also the pl/sql api supports supplying an item_id without creating a new revision. The pl/sql api only creates a new revision if title or content is specified, and I think as much as possible the tcl api should function similarly to the pl/sql api. Its not absolutely necessary, but it is the design with the least surprise.
This is the approach I took with GP and it worked very well.
Frankly I think the approach taken by the PL/SQL code to be extremely arcane in this case.