Add Claude in Zoho Cliq

Add Claude in Zoho Cliq



Let’s add a real AI assistant powered by Claude to your workspace this week, that your team can chat with, ask questions, and act on conversations to run AI actions on.

This guide walks you through exactly how to do it, step by step, with all the code you'll need.

Just copy, paste, replace the placeholders and you'll be good to go.


By the end of this guide, you’ll have:

  1. A Claude bot inside Zoho Cliq to have real back-and-forth conversations.
  2. The ability to @mention Claude in any channel and reply to a message and ask Claude to act on it.
  3. A message action to act on messages in Cliq by Claude. Additionally, pre-built actions to review code, generate mind maps, draft a reply for the selected message, or explain it like you’re new.
IdeaBefore you start:
1. A Zoho Cliq account with Developer access.
2. An Anthropic API key
3. Basic comfort with Deluge (optional — all code is provided
😉)

A. How to get an Anthropic API key?



1. To get an Anthropic API key, sign up at the Anthropic Console (console.anthropic.com).
2. Navigate to the API Keys tab, and click Create Key. 
3. You must add credits via the Billing section to activate the key. Copy the key immediately, as it cannot be viewed again.

Alert
Note: In this guide, the API key is pasted directly into the code for simplicity. But never, ever share your API key to others and double-check before sharing screenshots or code.

B. Create a Connection 

Claude needs permission to: Read chat messages and Fetch attachments (like PDFs) when prompted, for that let's create a connection for it.  ⓘ Learn more about connections

1. Go to the Connections module (in Bots & Tools) → Create Connection
2. Add a Connection name, for eg. "readmessageandfile"
3. Select:
ZohoCliq.Attachments.READ
ZohoCliq.Messages.READ
4. Create
Click Create, then authorize the connection. Copy the connection name, you'll paste it into the handlers in the next steps.

How to start

Go to Zoho Cliq → Settings → Bots & Tools 

Claude Bot:




  • Go to Bots → Create Bot.

  • Name it Claude and give it any description of choice.

  • First, let's create a Message handler to handle the conversations first.

  • Click edit code and copy paste the below code in it (follow along the comments to understand what each part does)

Idea

One API endpoint. That's all.


Both the bot and the message action use the same single Anthropic endpoint: POST /v1/messages. The only thing that changes between them is the system prompt and what you put in the messages array. Once you understand that, the rest is just assembly.
Explore API docs →


Message Handler:



What does this do: Fetches last 10 (customizable - but keep message limit small ( around 10–15 to avoid token overuse)) chat messages for additional context and enables natural chat conversations 


  1. info environment;
  2. botUniqueName = "BOT-UNIQUE-NAME";
  3. // Replace with your bot unique name
  4. cliqBaseUrl = environment.get("base_url");
  5. fetchRecentMessages = invokeurl
  6. [
  7. url :cliqBaseUrl + "/api/v2/chats/" + chat.get("id") + "/messages?limit=10"
  8. type :GET
  9. connection:"CONNECTION-NAME"
  10. //Read below how to create a connection, and paste here:
  11. ];
  12. info fetchRecentMessages;
  13. contentList = list();
  14. contentList.add({"role":"user","content":"Act as a conversational assistant. Reply to the message below in a friendly, informative, and well-organized way.\n\nGuidelines:\n- Respond only to the message provided.\n- Do not use memory or external context.\n- Be warm but professional.\n- Be clear and structured (use short paragraphs or bullet points if helpful).\n- Provide helpful details or clarification where useful.\n- If something is unclear, ask a polite follow-up question.\n- If action is needed, suggest a simple next step.\n- Do not include meta commentary.\n- Output only the reply.\n\n\nSTRICTLY USE * FOR BOLD, AND NEVER ** FOR BOLD MARKDOWN."});
  15. allMessages = fetchRecentMessages.get("data");
  16. for each  data in allMessages
  17. {
  18. type = data.get("type");
  19. if(type == "card" || type == "text")
  20. {
  21. getMessage = data.get("content").get("text").replaceAll("\n"," ");
  22. senderID = data.get("sender").get("id");
  23. if(senderID.startsWith("b-"))
  24. {
  25. contentList.add({"role":"assistant","content":getMessage});
  26. }
  27. else
  28. {
  29. contentList.add({"role":"user","content":getMessage});
  30. }
  31. }
  32. }
  33. info contentList;
  34. // Set up API headers
  35. apiHeaders = Map();
  36. apiHeaders.put("anthropic-version","2023-06-01");
  37. apiHeaders.put("Content-type","application/json");
  38. apiHeaders.put("X-Api-Key","INSERT-API-KEY-HERE");
  39. // Don't forget your API key!
  40. model = "claude-sonnet-4-5-20250929";
  41. requestPayload = {"max_tokens":1024,"messages":contentList,"model":model};
  42. // Make API call to Claude
  43. claudeApiResponse = invokeurl
  44. [
  45. url :"https://api.anthropic.com/v1/messages"
  46. type :POST
  47. parameters:requestPayload + ""
  48. headers:apiHeaders
  49. detailed:true
  50. ];
  51. info claudeApiResponse;
  52. if(claudeApiResponse.get("responseCode") == 200)
  53. {
  54. responseBody = claudeApiResponse.get("responseText");
  55. parsedResponse = responseBody.toMap();
  56. claudeMessage = parsedResponse.get("content").get(0).get("text").replaceAll("\n\n","\n").remove("---").remove("#");
  57. if(claudeMessage.length() > 4000)
  58. {
  59. claudeMessage = claudeMessage.subString(0,4000) + "...";
  60. }
  61. info "Claude's Response: " + claudeMessage;
  62. }
  63. else
  64. {
  65. responseBody = claudeApiResponse.get("responseText");
  66. parsedResponse = responseBody.toMap();
  67. claudeMessage = "*" + parsedResponse.get("error").get("type") + "* \n" + parsedResponse.get("error").get("message");
  68. info "API Error: " + claudeApiResponse;
  69. }
  70. responseContent = {"text":claudeMessage,"card":{"title":"Claude says...","icon":"https://uxwing.com/wp-content/themes/uxwing/download/brands-and-social-media/claude-ai-icon.png"}};
  71. info responseContent;
  72. info zoho.cliq.postToBot(botUniqueName,responseContent);
  73. return Map();


⚙️ Replace These Placeholders

BOT-UNIQUE-NAME (ⓘ How to find it?)
CONNECTION-NAME
INSERT-API-KEY-HERE



Mention Handler:



What does this do: This is to allow Claude to be @mentioned in any chat.
  1. userMessageText = "";
  2. fileAction = false;
  3. repliedMessage = false;
  4. if(message_details.get("message").containKey("replied_message"))
  5. {
  6. repliedMessage = true;
  7. replyMessageID = message_details.get("message").get("replied_message").get("id");
  8. messageType = message_details.get("message").get("replied_message").get("type");
  9. if(messageType == "text" || messageType == "card")
  10. {
  11. userMessageText = message_details.get("message").get("replied_message").get("text");
  12. }
  13. else
  14. {
  15. fileType = message_details.get("message").get("replied_message").get("file").get("type");
  16. if(fileType != "application/pdf")
  17. {
  18. return {"type":"banner","text":"Only PDF files are supported for this action","status":"failure"};
  19. }
  20. else
  21. {
  22. fileAction = true;
  23. }
  24. }
  25. }
  26. promptInstruction = "\"### Instructions ⓘ \nProvide a human-digestible, highly organized response (300-500 characters). Break down your output into bite-sized paragraphs and use bolding to guide the reader's eye. *Strictly avoid tables.* Use plenty of white space and only ### headings for a clean look. \n\n ### Formatting Protocol • \n - Bold: *text* \n - Italic: _text_ \n - Strike: ~text~ \n - Underline: __underline__ \n - Headers: ### Title \n - Quote: \"quote\" \n - Blockquote: > text \n - Bullets: Use • or → for lists \n - Emojis: Use ✨, 🚀, or 💡 to highlight key takeaways \n - Separator: --- \n\n ### and replace ** to *";
  27. userPrompt = "";
  28. if(message.trim().length() > 0)
  29. {
  30. userPrompt = "Action: " + message + "\n\n\n" + userMessageText + "\n\n\n" + promptInstruction;
  31. }
  32. else
  33. {
  34. userPrompt = "Action: " + userMessageText + "\n\n\n" + promptInstruction;
  35. }
  36. // Set up API headers
  37. apiHeaders = Map();
  38. apiHeaders.put("anthropic-version","2023-06-01");
  39. apiHeaders.put("Content-type","application/json");
  40. apiHeaders.put("ENTER-APIKEY-HERE");
  41. // Don't forget your API key!
  42. // Check if message is text-only or contains a file
  43. if(!fileAction)
  44. {
  45. // Handle text-only message
  46. requestPayload = {"max_tokens":1024,"messages":{{"content":userPrompt,"role":"user"}},"model":"claude-sonnet-4-5-20250929"};
  47. }
  48. else
  49. {
  50. // Handle message with file attachment
  51. uploadedFile = invokeurl
  52. [
  53. url :message_details.get("message").get("replied_message").get("file").get("url")
  54. type :GET
  55. connection:"ENTER-CONNECTION-NAME"
  56. ];
  57. info uploadedFile;
  58. // uploadedFile = message.get("content").get("file").get("name");
  59. base64EncodedFile = zoho.encryption.base64Encode(uploadedFile);
  60. if(message_details.get("message").get("replied_message").containKey("comment"))
  61. {
  62. comment = message_details.get("message").get("replied_message").get("comment");
  63. userPrompt = userPrompt + "\n" + comment;
  64. }
  65. else
  66. {
  67. userPrompt = userPrompt;
  68. }
  69. mediaType = "application/pdf";
  70. requestPayload = {"max_tokens":1024,"messages":{{"role":"user","content":{{"type":"document","source":{"type":"base64","media_type":mediaType,"data":base64EncodedFile}},{"type":"text","text":userPrompt}}}},"model":"claude-sonnet-4-5-20250929"};
  71. }
  72. info requestPayload;
  73. // Make API call to Claude
  74. claudeApiResponse = invokeurl
  75. [
  76. url :"https://api.anthropic.com/v1/messages"
  77. type :POST
  78. parameters:requestPayload + ""
  79. headers:apiHeaders
  80. detailed:true
  81. ];
  82. info claudeApiResponse;
  83. // Extract the actual text response
  84. if(claudeApiResponse.get("responseCode") == 200)
  85. {
  86. responseBody = claudeApiResponse.get("responseText");
  87. parsedResponse = responseBody.toMap();
  88. claudeMessage = parsedResponse.get("content").get(0).get("text").replaceAll("\n\n","\n").remove("---").remove("#");
  89. if(claudeMessage.length() > 4000)
  90. {
  91. claudeMessage = claudeMessage.subString(0,4000) + "...";
  92. }
  93. info "Claude's Response: " + claudeMessage;
  94. }
  95. else
  96. {
  97. responseBody = claudeApiResponse.get("responseText");
  98. parsedResponse = responseBody.toMap();
  99. claudeMessage = "*" + parsedResponse.get("error").get("type") + "* \n" + parsedResponse.get("error").get("message");
  100. info "API Error: " + claudeApiResponse;
  101. }
  102. responseContent = {"text":claudeMessage,"card":{"title":"Claude says...","icon":"https://uxwing.com/wp-content/themes/uxwing/download/brands-and-social-media/claude-ai-icon.png"}};
  103. info responseContent;
  104. if(repliedMessage)
  105. {
  106. responseContent.put("reply_to",replyMessageID);
  107. }
  108. info zoho.cliq.postToChat(chat.get("id"),responseContent);
  109. return Map();



Message Action
What does it do: Allow Claude to act on any message or file.

Quoteⓘ For files, we've extended this to only PDF file formats for now to keep implementation predictable and to avoid unsupported file formats

What we're adding:
1. When executed on any message, a form opens to prompt:

A. 🔍 Review code
Claude acts like a senior engineer who finds bugs, lists risks, suggest improvements, provides corrected code.



B. ✨ Explain like I'm new
Claude teaches you what it is, why it matters, how it works, an analogy or common mistakes for any concept.


C. 🧠 Make Mindmap

Converts content into a structured ASCII flow chart for explaining system designs, feature breakdowns or general product thinking.


D. 📌 Draft a reply
Give professional, concise business replies to address, asks clarifications, suggests next steps in a human tone. 


How to create:

1. Create a
Message Action, name it Ask Claude and give any description of your choice.



2. Message properties:  Text messages, Attachments, Links
3. Enter code as instructed below:
(Copy the function name and replace it in Line. 14)
  1. info message;
  2. returnForm = false;
  3. if(message.get("type") == "file")
  4. {
  5. fileType = message.get("content").get("file").get("type");
  6. if(fileType != "application/pdf")
  7. {
  8. return {"type":"banner","text":"Only PDF files are supported for this action","status":"failure"};
  9. }
  10. }
  11. inputs = list();
  12. inputs.add({"label":"Choose an action","name":"action","mandatory":true,"type":"radio","options":{{"value":"reviewcode","label":"🔍 Review Code"},{"value":"explainthis","label":"🧠 Make Mindmap"},{"value":"ExplainlikeImnew","label":"✨ Explain like I’m new"},{"value":"Draftreplyforthis","label":"📌 Draft reply for this"}}});
  13. inputs.add({"label":"More instructions","name":"additionalInstructions","placeholder":"You can provide additional instructions if needed.","min_length":"0","max_length":"500","mandatory":false,"type":"textarea"});
  14. return {"type":"form","title":"Ask Claude","hint":"What would you like Claude to do? Choose an action or write your own.","name":"INSERT-FUNCTION-NAME","button_label":"Submit","inputs":inputs,"action":{"type":"invoke.function","name":"INSERT-FUNCTION-NAME"}};
Next, let's create a function and then link it up to the built-Message action to open the form:



Form Function:



1.Go to Functions → Name your function (Eg. askclaude) and add description
2. Select Form function
3. Create



Once created, in the Form Submit Handler, paste this code:
  1. info form;
  2. info message;
  3. // Set up API headers
  4. apiHeaders = Map();
  5. apiHeaders.put("anthropic-version","2023-06-01");
  6. apiHeaders.put("Content-type","application/json");
  7. apiHeaders.put("ENTER-APIKEY-HERE");
  8. // Don't forget your API key!
  9. actionType = form.get("values").get("action").get("value");
  10. promptInstruction = "\"### Instructions ⓘ \nProvide a human-digestible, highly organized response (250-300 characters). Break down your output into bite-sized paragraphs and use bolding to guide the reader's eye. *Strictly avoid tables.* Use plenty of white space and only ### headings for a clean look. \n\n ### Formatting Protocol • \n - Bold: *text* \n - Italic: _text_ \n - Strike: ~text~ \n - Underline: __underline__ \n - Headers: ### Title \n - Quote: \"quote\" \n - Blockquote: > text \n - Bullets: Use • or → for lists \n - Emojis: Use ✨, 🚀, or 💡 to highlight key takeaways \n - Separator: --- \n\n ### and replace all ** to *";
  11. if(actionType == "reviewcode")
  12. {
  13. userPrompt = "🔍 You are a senior engineer. \nReview this code: \n• List bugs or logical errors \n• Note assumptions and risks \n• Suggest improvements \n• Provide corrected code \n• Explain why your version is better\n\n\n" + promptInstruction;
  14. }
  15. else if(actionType == "explainthis")
  16. {
  17. userPrompt = "🧠 You are a systems thinker. \n•Convert the input into a visual flow chart using plain text. \n•Strict Output Rules \n•Output ONLY inside a triple backtick code block \n•Do NOT use Mermaid \n•Do NOT write paragraphs \n•Do NOT explain anything \n•Do NOT use bullet lists outside structure \n•Use ASCII connectors to form a real flow chart \n•Use arrows (→, ↓, ↳, ├──, └──) to show relationships \n•Maintain clear hierarchy and spacing \n•One single root at the top \n•Logical directional flow (top → down) \n•Structure Requirements \n•Root node at top \n•First-level branches below \n•Subpoints indented \n•Cross-links if relevant \n•Clean spacing \n•No duplicated nodes \n•Required Format Example \n•MAIN IDEA \n•Branch 1 -> Subpoint -> Subpoint \n•Branch 2 -> Subpoint ->Subpoint \n•Branch 3 -> Subpoint -> Subpoint\n\n\n" + promptInstruction;
  18. }
  19. else if(actionType == "ExplainlikeImnew")
  20. {
  21. userPrompt = "✨ You are a teacher for beginners. \nExplain: \n• What it is \n• Why it matters \n• How it works (steps) \n• A simple analogy \n• One common beginner mistake\n\n\n" + promptInstruction;
  22. }
  23. else if(actionType == "Draftreplyforthis")
  24. {
  25. userPrompt = "📌 You are a professional responder. \nReply to this message: \n• Directly address main point \n• Ask for clarification if needed \n• Suggest next steps \n• Keep it concise and clear \n• Make sure message in a buisness casual tone, consise, human written.\n\n\n" + promptInstruction;
  26. }
  27. if(form.get("values").get("additionalInstructions").length() > 0)
  28. {
  29. userPrompt = userPrompt + "\n" + form.get("values").get("additionalInstructions");
  30. }
  31. // Check if message is text-only or contains a file
  32. if(message.get("type") == "text" || message.get("type") == "card")
  33. {
  34. // Handle text-only message
  35. userMessageText = message.get("text");
  36. requestPayload = {"max_tokens":1024,"messages":{{"content":userPrompt + "\n\n" + userMessageText,"role":"user"}},"model":"claude-sonnet-4-5-20250929"};
  37. }
  38. else
  39. {
  40. // Handle message with file attachment
  41. uploadedFile = invokeurl
  42. [
  43. url :"https://cliq.zoho" + environment.get("tld") + "/api/v2/files/" + message.get("content").get("file").get("id")
  44. type :GET
  45. connection:"ENTER-CONNECTION-NAME"
  46. ];
  47. info uploadedFile;
  48. base64EncodedFile = zoho.encryption.base64Encode(uploadedFile);
  49. if(message.get("content").containKey("comment"))
  50. {
  51. comment = message.get("content").get("comment");
  52. userPrompt = userPrompt + "\n" + comment;
  53. }
  54. else
  55. {
  56. userPrompt = userPrompt;
  57. }
  58. mediaType = message.get("content").get("file").get("type");
  59. mediaType = "application/pdf";
  60. requestPayload = {"max_tokens":1024,"messages":{{"role":"user","content":{{"type":"document","source":{"type":"base64","media_type":mediaType,"data":base64EncodedFile}},{"type":"text","text":userPrompt}}}},"model":"claude-sonnet-4-5-20250929"};
  61. }
  62. info requestPayload;
  63. // Make API call to Claude
  64. claudeApiResponse = invokeurl
  65. [
  66. url :"https://api.anthropic.com/v1/messages"
  67. type :POST
  68. parameters:requestPayload + ""
  69. headers:apiHeaders
  70. detailed:true
  71. ];
  72. // info claudeApiResponse;
  73. // Extract the actual text response
  74. if(claudeApiResponse.get("responseCode") == 200)
  75. {
  76. responseBody = claudeApiResponse.get("responseText");
  77. parsedResponse = responseBody.toMap();
  78. claudeMessage = parsedResponse.get("content").get(0).get("text").replaceAll("\n\n","\n").remove("---").remove("#");
  79. if(claudeMessage.length() > 4000)
  80. {
  81. claudeMessage = claudeMessage.subString(0,4000) + "...";
  82. }
  83. info "Claude's Response: " + claudeMessage;
  84. }
  85. else
  86. {
  87. responseBody = claudeApiResponse.get("responseText");
  88. parsedResponse = responseBody.toMap();
  89. claudeMessage = "*" + parsedResponse.get("error").get("type") + "* \n" + parsedResponse.get("error").get("message");
  90. info "API Error: " + claudeApiResponse;
  91. }
  92. responseContent = {"text":claudeMessage,"card":{"title":"Claude says...","icon":"https://uxwing.com/wp-content/themes/uxwing/download/brands-and-social-media/claude-ai-icon.png"},"reply_to":message.get("id")};
  93. info responseContent;
  94. info zoho.cliq.postToChat(chat.get("id"),responseContent);
  95. return Map();

When triggered: Opens a form → User selects an action → Adds additional instructions → Submits → Claude processes the selected message


And that's it. You're Claude integration is ready to be used. 



What's Next:

What you built today is just the foundation.

Shape it around how your team actually works. Extend it to turn discussions into action items, review PRs before they’re merged, generate standup updates, extract tasks automatically, or create knowledge snippets from resolved threads.

Start with one real pain point. Solve it well. Then layer more intelligence on top.

The structure is already there. The possibilities are yours.

🔗 Explore Zoho Cliq: Developer Platform
🔗 Explore Anthropic API Docs

Questions? Comments below. 
Looking forward how you'll build and go make it your own. 🚀
    • Sticky Posts

    • Cliq Bots - Post message to a bot using the command line!

      If you had read our post on how to post a message to a channel in a simple one-line command, then this sure is a piece of cake for you guys! For those of you, who are reading this for the first time, don't worry! Just read on. This post is all about how
    • Add Claude in Zoho Cliq

      Let’s add a real AI assistant powered by Claude to your workspace this week, that your team can chat with, ask questions, and act on conversations to run AI actions on. This guide walks you through exactly how to do it, step by step, with all the code
    • Automating Employee Birthday Notifications in Zoho Cliq

      Have you ever missed a birthday and felt like the office Grinch? Fear not, the Cliq Developer Platform has got your back! With Zoho Cliq's Schedulers, you can be the office party-cipant who never forgets a single cake, balloon, or awkward rendition of
    • Automate attendance tracking with Zoho Cliq Developer Platform

      I wish remote work were permanently mandated so we could join work calls from a movie theatre or even while skydiving! But wait, it's time to wake up! The alarm has snoozed twice, and your team has already logged on for the day. Keeping tabs on attendance
    • Customer payment alerts in Zoho Cliq

      For businesses that depend on cash flow, payment updates are essential for operational decision-making and go beyond simple accounting entries. The sales team needs to be notified when invoices are cleared so that upcoming orders can be released. In contrast,
    • Recent Topics

    • How to implement new online payment gateway?

      Hello, Can you tell me how to proceed to implement my local payment gateway? DIBS has an open avaiable API that should be easy to implement into ZOHO BOOKS. http://tech.dibspayment.com/dibs_payment_window
    • Formula working in MS Excel , is not working in Zoho Sheets, Filter fuction which is working in MS sheets per the attached workbook / Daily update.

      Filter function , which is working in MS Excel is not working in Zoho sheets. Please help on function of filter of particular class sheets and extract students name who has more than 3.5 hours of study hours on particular day depending on date in D7 cell.
    • New in Smart Prompt: Record Assistant for contextual assistance, and support for new AI models

      Smart Prompt helps teams stay informed and move faster by providing relevant suggestions where work happens in CRM. With this update, Smart Prompt becomes more adaptable to your organization’s AI preferences. You can now choose which Large Language Model
    • Improved Integration Failure Information (And Notification Options)

      Hi, When an attachment service for example fails, you just get "Field x - Error", I can check the field it is failing on and find nothing wrong, same file size, type, dimensions, etc. so more information as to the actual issue would be helpful. And an
    • Change User Role in a Form

      Hi, When in a form, it would be good (And consistent) to be able to change the user role/permission like you can with Shared Reports, All Entries or the actual User itself, rather than having to delete the users permission and then add it back again with
    • Reassign Partially Saved Entries

      Hi, I would like to be able to go to Partially Saved Entries and like the option to delete them I would like the option to multi-select and be able to reassign them to another user to complete (Such as when a user has left the company). Thanks Dan
    • Increase the "Maximum Saved Entries per User" Options Limit

      Hi, You can create lots of saved entries, yet the Limit when you apply one is 25, we may often expect 32 to be in draft, and therefore want to enforce that, can we increase the limit of this field from 25 to 100 (As you can just turn it off and have more
    • Product Updates in Zoho Workplace applications | December 2025

      Hello Workplace Community, Let’s take a look at the new features and enhancements that went live across all Workplace applications this December. Zoho Mail Block emails without notifying the sender Block emails without sending a rejection notification
    • Zoho CRM for Gmail Extension Not Working in Brave Browser?

      Is anyone able to get the Zoho CRM Chrome Extension working in the Brave browser? They're both built on the Chromium platform and every other Chrome Extension works with the exception of Zoho CRM for Gmail so any ideas here?
    • Set Frozen Cells in the Report Settings

      Hi, It would be nice to be able to set the frozen cells in the report Settings, and have an option if this is fixed or can be changed after loading (On the next load it still goes back to the Settings). Thanks Dan
    • Microsoft Teams now available as an online meeting provider

      Hello everyone, We're pleased to announce that Zoho CRM now supports Microsoft Teams as an online meeting provider—alongside the other providers already available. Admins can enable Microsoft Teams directly from the Preferences tab under the Meetings
    • Tip of the week #26: Import/ Export calendars in Zoho Calendar.

      Any calendar on the web or calendars that you create in any other calendar application can be imported in to Zoho Calendar. This will help you to add the events from the calendars that you import to your Zoho Calendar. You also have the option to export
    • Add Zoho Forms to Zoho CRM Plus bundle

      Great Zoho apps like CRM and Desk have very limited form builders when it comes to form and field rules, design, integration and deployment options. Many of my clients who use Zoho CRM Plus often hit limitations with the built in forms in CRM or Desk and are then disappointed to hear that they have to additionally pay for Zoho Forms to get all these great forms functionalities. Please consider adding Zoho Forms in the Zoho CRM Plus bundle. Best regards, Mladen Svraka Zoho Certified Consultant and
    • Social icons, open in new tab?

      Hello, I have two social icons on my footer, Facebook and Psychology Today. Clicking on the Facebook icon opens a new tab, the Psychology Today icon does not. I would like them both to open a new tab. Am I missing a setting somewhere?
    • Real-Time Screen Annotation During Zoho Cliq Screen Sharing

      Hi Zoho Support Team, Hope you're doing well. We’d like to request the addition of real-time screen annotation tools during screen sharing sessions in Zoho Cliq video calls. 🔍 What We're Looking For: The ability for the presenter—and optionally, other
    • Autofill address using smart fields mapped over the pdf document

      Hi, I'm using mail merge to map smart fields onto PDF documents I plan to distribute for signing. I already have a Zoho Sign subscription. When mapping smart fields from the Employee form, I only see the permanent and current addresses which include the
    • How do I cap employee leave accrual

      HI there, How do I cap an employee's leave accrual? The policy is that you accrue 15 days leave annually (1.25 days a month) and once you reach 15 days, you wont accrue more until you take leave. Thank you!
    • Open sub form from a button as a popup form

      Is there a way within a form to use similar code as below to show a button in the form when clicked opens the subform for data to be added to the record being viewed in the form OpenUrl("#Form:<Customer_Delivery_Address>?<Delivery_Address>=" + input.ID,"popup
    • Dont have backup option in setting

      Hi guys. I started using zoho book a week ago. I bought premium package yet I don't have backup option in setting. I hope anyone can help me find a solution. Thanks in advance
    • Making Tags Mandatory

      When creating an expense, is it possible to make the Tags field mandatory?  I see the option in settings to make other fields mandatory, like Merchant, Description, Customer, etc, but nothing about Tags. Thanks! Kevin
    • Is there a plan to integrate zoho voice with zoho books?

      Hello, Is there a plan to integrate zoho voice with zoho books? Right now we are using the Twilio SMS integration into zoho books, but have recently decided to switch to zoho voice for calls and sms. Is there a plan to integrate zoho voice natively into
    • Pass variables to Zoho Desk via URL to create a fast new ticket landing page

      We are integrating our phone system into Zoho Desk. Currently when a helpdesk agent answers the phone, a soft client opens a new tab with zoho desk at the new case page. https://desk.zoho.com/support/companyname/ShowHomePage.do#Cases/new We would like
    • Zoho Books Extension: What Happens If Custom Fields Already Exist?

      When developing Zoho Books extensions, what happens if the target Zoho Books organization already has a custom field with the same API name as one defined in the extension? I’m asking because we originally created an on-Books version of this functionality,
    • Modular Permission Levels

      We need more modular Permissions per module in Books we have 2 use cases that are creating problems We need per module export permission we have a use case where users should be able to view the sales orders but not export it, but they can export other
    • Free Webinar on 21 January: Looking back at Zoho Mail in 2025

      Hello Zoho Community! Curious about how Zoho Mail evolved in 2025? Wondering how these updates can make your everyday email work simpler? We’ve got a session you won’t want to miss. In our Zoho Mail 2025 recap webinar, we’ll walk you through the key features
    • Cliq Networks users can see all other network users contact information

      Is there a way to hide user contact information from each user in networks? I would only like the users to see the admin's contact information, not other users. Network users information shared by default
    • Zoho Sheet - Printing - Page Breaks and Printing Customization

      I think the title is descriptive enough in that I cannot find help documentation on a simple task of adding in page brakes for separating pages on print. Thanks
    • Missing the "Find & Merge Duplicates" choice

      Hi, I am missing the "Find & Merge Duplicates" choice. I looked under the "More Actions" menu in Contacts, Accounts, Vendors, and Leads and it is not there. I have full permissions. Please assist me on finding this feature. Thanks!
    • OAuth integration issues

      I'm experiencing persistent OAuth errors when trying to connect Make with Zoho API. I've tried multiple approaches but keep encountering the following issues: First error: 'Invalid Redirect Uri - Redirect URI passed does not match with the one configured'
    • Marketing Tip #16: Ideal sizes and formats for adding images to your online store

      Images can make (or break) your storefront experience. When your banners and product photos follow the right sizes and aspect ratios, your store looks cleaner, loads faster, and feels more trustworthy—especially on mobile. Here are recommended image sizes
    • Improve WhatsApp Module in Zoho CRM

      The current WhatsApp module UI in Zoho CRM feels cluttered and complex, especially when handling high volumes of conversations. It would be great to enhance the WhatsApp module UI/UX by adopting a clean and simplified interface similar to Bigin CRM’s
    • Blueprint transitions on locked records

      We use the ability to automatically lock records (quotes, sales orders, etc.) based on criteria, such as stage. For instance, if a quote has been sent to a client, the quote is then locked for further edits. Our ideal quote stage process is: Draft>Sent>Won.
    • Enhance productivity with the revamped Zoho Sheet View

      Hello folks, For some time now, you've been able to use the Zoho Sheet View to quickly edit multiple records or to insert a batch of new records. Its tabular interface allows users to engage in these tasks productively. Despite this, the existing Sheet
    • No OR Filter for Views with a Related Modules Criteria

      We would like to create a Deal View where the User can see all their deals. For that, we would need an OR to connect the criteria. One of the Fields is a "multiselect User", these (Related Modules Criteria) can only be Filter with an AND. Even between
    • Good news! Calendar in Zoho CRM gets a face lift

      Dear Customers, We are delighted to unveil the revamped calendar UI in Zoho CRM. With a complete visual overhaul aligned with CRM for Everyone, the calendar now offers a more intuitive and flexible scheduling experience. What’s new? Distinguish activities
    • Chat to Lead

      Can I convert a Chat to a Lead?
    • Limit maximum entries for subform - depending on fields entry

      Hi Zoho! I have a form with a subform in it. I'd like to have limitation for the row number depending on an entry in a drop-down field in the main form (If the field in the main form is marked "Answer1" - Limit the entries to 1 row, if the field is "Answer2" to have 2 rows limitation, "Answer3" = no limitation at all) Can this be done? Thanks Ravid
    • Save HTML Snippet Page as PDF with Dynamic Data in Zoho Creator (Working Solution)

      Hi Zoho Creator Community 👋, I faced a common challenge while working with HTML Snippet Pages — I needed to generate a PDF with dynamic data and save it back into the record automatically. Here’s the working solution that might help others. Use Case
    • Make Camera Overlay & Recording Controls Visible in All Screen-Sharing Options

      Hi Zoho WorkDrive Team, Hope you are doing well. We would like to request an improvement to the screen-recording experience in Zoho WorkDrive. Current Limitation: At the moment the recording controls are visible only inside the Zoho WorkDrive tab. When
    • Rebranding Options for Zoho One

      We need the addition of rebranding and white-labeling settings directly within the Zoho One Admin Panel. This feature should allow organizations to customize the unified portal with their own logo, brand colors, and custom domain mapping (e.g., portal.company.com).
    • Next Page