When Zendesk API writes silently do nothing, check for double-encoded JSON. The requests library's json parameter expects a dict and encodes it itself; handing it a pre-built JSON string encodes it twice and the API ignores the mangled payload. Pass the dict, set Content-Type to application/json, and use email/token as the auth username for token auth.

Context: Stack Overflow #38923106 (accepted answer, 4 votes): the asker's macro updates via the Zendesk API silently did nothing. The accepted answer spotted double-encoding: they passed an already-formatted JSON string to requests' json parameter, which encodes its argument again. The fix is to pass a plain dict and let requests encode it once.