I'm not sure how it works internally and whether or not Directadmin allows special chars without setting special_characters_in_random_passwords to 1 in directadmin.conf. So even if you use API DirectAdmin might or not require that option enabled in its configs. That's up to you to check it.
Basically, all ascii characters from 33 till 126 inclusive, but not 47 or 92 (forward and backwards slashes) are allowed with special_characters_in_random_passwords=1
Your sets look fine (unless I overlooked anything), but you may double-check your chars with this table http://www.asciitable.com/
I've changed a password for a user account to Az0!@#$%^&*()_+-=?
So whether or not the option is enabled directadmin is accepting specialchars in passwords. So the issue is most likely is related to how you use API and send password to DirectAdmin.
For debugging purposes you can run directamin in debug mode in see what might be wrong there.