I notice you are using the header “Content-Type:application/x-www-form-urlencoded” which isn’t listed in the documentation around refresh listed on this page:
https://devdocs.zoom.us/docs/oauth-with-zoom
It appears to have solved our problem, so you may want to update the docs accordingly. Also on that page, the refresh token section makes reference to the revoke endpoint, which we noticed, but could be quite misleading for folks.
Thanks!
Craig