See the a href="https://communities.logicmonitor.com/topic/2163-add-device-to-collector-with-least-devices-in-rest-api" rel="">other thread you have replied to about moving devices to different collectors where some code examples have been provided.
I think there are some confusions on how the LM system.x properties work. In most cases as mentioned these properties are read-only and are just reporting various information about a device or it's settings so they can be used for tokens and stuff in the GUI. For example system.collectordesc reports the name of the collector for a device. This is used if you wanted to report this in an Alert or Report, so you can use a ##system.collectordesc## token.
When you are working in the LM API, you don't even use these "property" values all that much. While they are called "properties" in LM don't think of them Object Properties in the programming sense. They are just a key-value array of information about a device. When using the API you have access to the "real" properties for a device or collector. So using PowerShell, if you want to get the the display name of a device you look at DeviceObj.displayName or get the the Collector's ID you look at DeviceObj.preferredCollectorId. You would also change these values by modifying these same object properties (in json).
system.categories being the one weird exception, but you don't normally modify this is API calls but using something like PropertySources.
One tip that might help you is that the LogicMonitor portal itself uses almost the same API. If you open your browser's development console (F12) you can actually watch how the website works and see the API calls and how the site does it. It might not be as efficient as your code might be (for example you can PATCH while the site would always use PUT). This might help atleast determine which APIs you need to research. 95% of the time if you can do it in the GUI you can do it via API, love that about LM.
I also suggest, imho, that you start off with the APIv1 documentation. APIv2 is very new and the documentation isn't as complete or described as fully as v1, especially if you are just looking at Swager automated documentation. Once you understand using the v1 docs, you can easily migrate it to v2 since it seems almost 1-to-1 matching.