I am trying to connect n8n to Zoho’s api using built-in Oauth 2.0
After trial and error. I got reported back that n8n doesn’t refresh the token with the correct grant type
“We have checked the reported issue with our backend team, and our developers have identified that the issue is occurring because the grant_type parameter is not set to refresh_token.”
This is a known behavior of how n8n handles OAuth2, but it is typically a setup/configuration issue rather than a bug. n8n does support the refresh_token grant type, but Zoho’s API is notoriously strict about how the refresh request is formatted (specifically requiring the grant_type to be in the request body and not the query string, and requiring specific client credentials).
Depending on which credential block you are using, here is how to resolve this. See which applies:
1)If you are using the built-in Zoho node, ensure you have selected the correct Zoho API (e.g., Zoho CRM, Zoho Books) as they have different scopes.
2)If you are using the HTTP Request node with Generic OAuth2, configure the credential exactly as follows:
Scope: (Ensure you have the exact scopes required, e.g., ZohoCRM.modules.ALL)
Auth URI Query Parameters: Add access_type=offline and prompt=consent.
CRITICAL: Without access_type=offline, Zoho will not issue a refresh token, and n8n will fail to refresh the session, leading to the error you received.
Hi @taamtera
n8n does support the refresh_token grant, so this is not a missing feature. Zoho’s token endpoint is the outlier: its own docs list grant_type, client_id, client_secret and refresh_token as query string parameters for /oauth/v2/token and state the endpoint does not accept them sent as a body object, which is why Zoho’s backend team sees no grant_type on the refresh call.
The reliable route is to stop depending on the credential’s automatic refresh and run it yourself. Get the refresh token once, store it, then refresh with an HTTP Request node POSTing to your data centre’s accounts URL with the parameters in the query string:
n8n does support the refresh-token grant. The current OAuth client builds the token request body with refresh_token and grant_type: refresh_token. The built-in Zoho credential uses the authorization-code flow, requests access_type=offline, sends client authentication in the body, and exposes the region-specific Zoho token URL.
Do not try to select refresh_token as the credential’s initial Grant Type. It is the refresh step within an authorization-code credential, not a separate setup option.
The missing detail is your n8n version and exact credential type. If this is the built-in Zoho credential, confirm its Access Token URL matches your Zoho data center. Reconnect the credential so n8n stores a fresh offline refresh token, then retry.
If Zoho still records a token request without grant_type on the current n8n version, that is a reproducible bug. Include the version, credential type, token endpoint host, plus a redacted Zoho request log in the report. Do not include tokens or client secrets.