I can't tell you for sure which settings were incorrect for most of my attempts, but I got the API working to turn a campaign off by:
1. Using the GET version of /api/v2/outbound/campaigns/{campaignId} to pull back all the information for my campaign. One key piece of information being the Version (because if you don't use the correct Version in the PUT the update will fail every time).
2. Using the PUT version of /api/v2/outbound/campaigns/{campaignId} by copying all the JSON from the return of 1. to create the body for the PUT, just changing the campaignStatus to "off"
That worked for turning the campaign on and then back off.
So, your script would need to do the GET first, then use the entire Body of the return to create the PUT, just changing the canpaignStatus.
------------------------------
George Ganahl GCP (PureCloud) ICCE CCXP
Principal Technology Consultant
Genesys
------------------------------