I am not sure if you can create a NEW VM with the API. You can reconfigure existing VMs.
One thing that comes to my mind is to create a Template with very simple VM that you will then use to create other types of VMs.
You will have to add this simple VM to a vApp and then reconfigure it to suit your needs. You will be able to change the VirtualHardwareSection, OperatingSystemSection, NetworkConnectionSection and GuestCustomizationSection. To create the template you can start with a vApp with one VM,
reconfigure that VM (so it will have very simple configuration) and then capture that vApp to a Template. Hope this helps.