Getting 400 error when trying to refresh a token (client secret missing)

You don’t need a the headers

I wonder if sending headers and HTTP post body has confused the API and it’s ignored your POST body because of the header

The API call to refresh is just

POST https://id.twitch.tv/oauth2/token
    --data-urlencode
    ?grant_type=refresh_token
    &refresh_token=<your refresh token>
    &client_id=<your client ID>
    &client_secret=<your client secret>

No headers needed, so remove that