UNKNOWN ERROR when updating or creating accounts with Zoho CRM node

Describe the problem/error/question

Two types of nodes - Zoho create account and Zoho CRM update account - are producing an error message. I’m trying to understand how to troubleshoot it. I have tried recreating the nodes. I have also restarted the cloud instance. We have been able to use a standalone Zoho CRM node to update a record in the instance, and queries to pull records from Zoho are also working in the same pipeline.

What is the error message (if any)?

ERROR: UNKNOWN ERROR - check the detailed error for more information

NodeApiError: UNKNOWN ERROR - check the detailed error for more information
at Object.zohoApiRequest (/usr/local/lib/node_modules/n8n/node_modules/n8n-nodes-base/dist/nodes/Zoho/GenericFunctions.js:43:15)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at Object.execute (/usr/local/lib/node_modules/n8n/node_modules/n8n-nodes-base/dist/nodes/Zoho/ZohoCrm.node.js:222:40)
at Workflow.runNode (/usr/local/lib/node_modules/n8n/node_modules/n8n-workflow/dist/Workflow.js:653:28)
at /usr/local/lib/node_modules/n8n/node_modules/n8n-core/dist/WorkflowExecute.js:590:53

Please share your workflow

Share the output returned by the last node

This is an item, but it’s empty.

Information on your n8n setup

  • n8n version: 0.221.2
  • Database (default: SQLite): SQLite
  • n8n EXECUTIONS_PROCESS setting (default: own, main):
  • Running n8n via (Docker, npm, n8n cloud, desktop app): cloud
  • Operating system:

I worked around this for now using HTTP nodes. But the Zoho node should just work. The same nodes work out of context when not connected to the previous workflow nodes. Thinking it might be how data is formatted vs what Zoho is expecting.

Please be informed that you could send an email from the respective Account record in CRM and the Zoho CRM field’ will have the particular Account’s information to update the record in Zoho CRM . You could add an Email field in your Accounts module to store the email address to which you wish to send an email.

Thanks for the support @voncile . My preference is to avoid relying on emails for any automation. For now the HTTP node is sufficing. I will continue to test though.

Can you please share your method of using http node + Zoho. I am really struggling to set it up with OAuth via http node. What application you used for to register in Zoho API Console ?

Hi @Mohdlatif - Our use case is creating and updating account records via the HTTP node, but it would be similar to other objects.

We use the Server-based Application Client Type.

Here is an example of the create node:

the JSON string would look something like:

    "data": [
            "Account_Name" : "{{ $node["Set"].json["name"] }}",
            "Lead_Source" : "{{ $node["Set"].json["source"] }}"

Thank you @hndmn for sharing your workflow.

My use case is a bit different.

I am creating contacts in Zoho Contacts

I have setup the Server-based Application. Got my client ID and Client Secret.

I managed to create a contact via HTTP request, here is my configuration.

Then, I have to login to Zoho with my Username and Password.

What I am struggling with:

After 60 minutes, I have to login manually or I will be presented with


Based on Zoho Documentation, to request a new token I have to make a post request and include the authorization code that was obtained from Authorization Request.

I do not really know how to get the Authorization Request from step 1 so I can request a fresh token. I do not want to manually log in each time.

Do you know any way to solve it ?

I just ran into this, too. The fix for me was to open the credential and change the following setting. This then let me run the query every time.


Thank you, I will give it a test now and after 60 minutes, and hopefully it goes well.

Thanks again.

This may not be the resolution, after all. I am experiencing the INVALID_TOKEN error again. I am following the discussion at https://community.n8n.io/t/the-access-token-is-invalid-or-has-expired/11229/5. access_type=offline was one of the recommendations, but apparently more is needed.

On https://www.zoho.com/crm/developer/docs/api/v2/auth-request.html it says to use this as a parameter.

Enter access_type as online or offline. If you want to generate the refresh token, set this value as offline.

I think I have cracked it. Will give it some tests within this hour and share it once it worked.

@hndmn I did this and it worked well. The token refresh each time it gets expired.

  • First, you need to connect your n8n to zoho, create an empty http request and select Query Auth 2 API authentication and enter your info; client_id, client_secret, scrope, etc.
  • Run Execute Command and find Zoho Refresh Token that within your selected scope.
  • Duplicate refresh_token node ( Paste the token from step 2 into the correct filed) and use it generate a new access token.
  • Copy the access token and paste into Supabase ( Free & Fast Database )
  • Connect your Supabase account
  • Thats it.

1 Like

Thanks for this @Mohdlatif! I’m going to keep investigating for a way to do this without involving my database, but good to know there is a solution.

Just to circle back here for those it may help. Ultimately for us the best method was creating an environment variable to store a refresh token. We follow the api docs to generate a refresh token using a ‘Self Client’.


That results in a refresh token eventually. Add that as an environment variable in your instance, along with variables for the client id and client secret. Then in workflows you can have a node that fetches a new token by referencing those env variables.

For us this works because our workflow runs once per day, so a new token is always required. You might need to modify it if you run more frequently.

1 Like

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.