Okay so I've done some more testing and there is something the API endpoint doesn't like about passing null (None) through as a value.
I removed the "copyFromNetworkId from the model all together and it worked and this is the data that was sent through to the endpoint.
{"disableMyMerakiCom": false, "disableRemoteStatusPage": false, "name": "Example Network 5", "tags": "", "timeZone": "Australia/Brisbane", "type": "appliance switch wireless"}
I added it back in and this is the data sent to the endpoint which failed.
{"copyFromNetworkId": null, "disableMyMerakiCom": false, "disableRemoteStatusPage": false, "name": "Example Network 7", "tags": "", "timeZone": "Australia/Brisbane", "type": "appliance switch wireless"}
And the reason the value is null is because the model sets all the values to None when it creates the class. So I guess the solution is to just not use the model. Is there anyone who knows anything more about how the models work and what I should be doing to get around this?