As it happens, this exact topic, onboarding a new zigbee device, was covered in a session at the recent Samsung developers conference. That session is available on YouTube:
It would also be a good idea to read the smartthings developer docs which are available from the links at the top right of the first page of the community here.
Before going any farther, however, we should note that with smartthings you are not buying a zigbee Coordinator that you will be able to upload your own code to. If that’s what you want, a Digi or similar zigbee stick will probably be more appropriate.
Instead, SmartThings provides a specific home automation platform. It does allow you to add devices using the Zigbee Home Automation profile that have never been added to the platform before using the process described in the YouTube video. And it allows you to write custom instructions to SmartThings for what to do with that device within that platform using a groovy variant. But it does not support all zigbee clusters and there is no way to upload binary code.
Also, anyone who wants to control your device through the SmartThings hub will have to have a SmartThings account and the processing will occur in the smartthings cloud, not locally, even for a simple on/off.
It’s still a very useful and powerful platform, but it’s not a full zigbee development environment. So it all depends on how you want to use it. If you want to make your new device available to those who are already using SmartThings home automation, then you will probably find the developer options very useful. But if you’re just looking for a zigbee coordinator, it may not be the best match. And if you want one that runs locally without requiring an active Internet connection and a SmartThings cloud account, then smartthings is definitely not a good fit. So it all comes down to exactly what you’re trying to accomplish.