Kaizen 213 - Workflow APIs - Part 1

Kaizen 213 - Workflow APIs - Part 1


Welcome to another week of Kaizen!

If you have ever managed complex business processes, you know that Workflows are the quiet backbone of any well-run business process. They keep things moving; assigning owners, sending alerts, keeping deals on track, and much more. But until now, you could not manage them via APIs. That changes with the release of Workflow APIs.

In this series, we will work through a real-world scenario together, showing you how to transition from manually managing workflows to governing them using APIs. We’ll look at Zylker Cloud Services, an IT solutions provider trying to bring order to its growing CRM automations.

The use case: Scaling the sales process at Zylker Cloud Services 

Zylker’s sales process touches multiple teams and modules like Leads, Deals, Calls, Appointments, etc. Over time, different team members created their own workflows. The result is familiar to anyone who has scaled fast:

  • Multiple versions of what should be the same process

  • Old, unused workflows still running.

Now, Zylker wants to bring structure and visibility to this automation sprawl. Their system administrators are building a custom admin dashboard to monitor and manage CRM workflows, without needing deep CRM expertise.

They want to:

  • Display a real-time list of all workflows with their status

  • Gain insights into workflow distribution across modules

  • Identify inactive or outdated workflows that may need cleanup.

However, the CRM UI only allows viewing one workflow at a time. There is no consolidated view to see all workflows, their triggers, and their status across modules. That makes auditing and governance tedious and error-prone, especially at scale.

This is exactly what the Workflow APIs solve. With this, they can:

  • Audit all existing workflows.

  • Review how and when they trigger.

  • Identify which modules and actions are supported before creating new rules or updating existing ones.

  • Update existing rules and create new rules.

  • Delete the rules that are no longer needed.

You can not build a dynamic admin dashboard or an automated audit system for Workflows through just clicks. But you can do this now, with Workflow APIs.

STEP 1: Discover and audit existing workflows

Before changing anything, we need to understand what we are working with. How many workflows do we have? What do they do? How many more can we create?

To get a complete inventory of Workflow rules, we can use the GET Workflow Rules API. This API returns a list of all the Workflow Rules configured for the CRM account.

Sample Request:

GET {api-domain}/crm/v8/settings/automation/workflow_rules

This initial audit acts like a master list, giving us an overall picture. It helps understand the scope of the automation landscape and identify obvious redundancies, like multiple workflows with similar names or purposes.

Sample Response:

{

    "workflow_rules": [

        {

            "created_time": "2024-01-15T14:20:30+05:30",

            "execute_when": {

                "details": {

                    "trigger_module": {

                        "api_name": "Deals",

                        "id": "4876876000000002181"

                    },

                    "repeat": false

                },

                "type": "create_or_edit"

            },

            "editable": true,

            "module": {

                "api_name": "Deals",

                "id": "4876876000000002181"

            },

            "deprecated": false,

            "deletable": true,

            "description": "Alert VP of Sales for high-value opportunities",

            "source": "crm",

            "created_by": {

                "name": "Matthew Mayers",

                "id": "4876876000001360001"

            },

            "last_executed_time": null,

            "modified_time": "2024-01-23T12:23:12+05:30",

            "name": "VP Alert - High Value Deal",

            "modified_by": {

                "name": "Matthew Mayers",

                "id": "4876876000001360001"

            },

            "lock": {

                "locked_by": null,

                "message": null,

                "status": false

            },

            "id": "4876876000016390024",

            "category": "default",

            "conditions": [

                {

                    "sequence_number": 1,

                    "instant_actions": {

                        "actions": [

                            {

                                "related_details": null,

                                "name": "VP notified",

                                "details": {

                                    "module": {

                                        "api_name": "Deals",

                                        "id": "4876876000000002181"

                                    }

                                },

                                "id": "4876876000016390063",

                                "type": "field_updates"

                            },

                            {

                                "related_details": {

                                    "best_time": true

                                },

                                "name": "High value deal alert",

                                "id": "4876876000016390015",

                                "type": "email_notifications"

                            }

                        ]

                    },

                    "scheduled_actions": [

                        {

                            "execute_after": {

                                "period": "business_days",

                                "unit": 1

                            },

                            "id": "4876876000016390074",

                            "actions": [

                                {

                                    "related_details": null,

                                    "name": "Confirm VP follow-up",

                                    "id": "4876876000016390067",

                                    "type": "tasks"

                                }

                            ]

                        }

                    ],

                    "criteria_details": {

                        "relational_criteria": {

                            "module_selection": null,

                            "criteria": null,

                            "module": null

                        },

                        "criteria": {

                            "group_operator": "AND",

                            "group": [

                                {

                                    "comparator": "equal",

                                    "field": {

                                        "api_name": "Amount",

                                        "id": "4876876000000002557"

                                    },

                                    "type": "value",

                                    "value": "50000"

                                },

                                {

                                    "comparator": "equal",

                                    "field": {

                                        "api_name": "Stage",

                                        "id": "4876876000000002565"

                                    },

                                    "type": "value",

                                    "value": "Negotiation/Review"

                                }

                            ]

                        }

                    },

                    "id": "4876876000016390025"

                }

            ],

            "status": {

                "active": true

            }

        },

        {

            "id": "4876876000012015001",

            "name": "Lead Assignment - North Region",

            "module": {"api_name": "Leads"},

            "status": {"active": true},

            "execute_when": {"type": "create"},

            "last_executed_time": "2025-10-14T11:56:20+05:30"

            // ... other keys omitted for brevity

        },

        {

            "id": "4876876000012020001",

            "name": "Lead Assignment - South Region",

            "module": {"api_name": "Leads"},

            "status": {"active": true},

            "execute_when": {"type": "create"},

            "last_executed_time": "2025-10-14T10:30:15+05:30"

            // ... other keys omitted for brevity

        }

        // ... additional workflows

    ],

    "info": {

        "per_page": 200,

        "count": 71,

        "page": 1,

        "more_records": false

    }

}


The response gives us a comprehensive overview of all configured workflows. For each rule, we get the metadata including its unique ID, name, description, the module it operates on, its activation status, and details about when it triggers. We also get audit information like creation timestamps and which user made changes.

Working with large results

When you have hundreds of workflows, pagination helps. The response includes an info object with pagination details:

  • count: The number of workflows on the current page

  • per_page: The maximum number of records per page (default and max is 200)

  • page: The current page number

  • more_records: Indicates if there are additional records to fetch.

If the more_records key is true, we can retrieve the next page by using the page parameter in the request.

While getting all workflows gives you the big picture, we may often want to focus on specific areas. This API offers several parameters to narrow down our search:

Parameter type

Description

module
string

Filters workflows by the primary module they operate on.

trigger_module
string

Filters by related modules that can trigger workflows. Use this when you want workflows that are triggered by changes in related records.
Note: Requires the module parameter.
For example: module=Leads&trigger_module=Notes - Get lead workflows triggered by note activities

execute_on
string

Filters by the specific action that triggers the workflow.
Note: Requires the module parameter.

status_active
Boolean

Filters by activation status to see only active or inactive workflows. Useful for audits and cleanup operations.

filter
string

Searches workflows by name using a JSON filter.
Note: The value of this parameter must be URL-encoded.

page
integer

Specifies which page of results to return. Use this for pagination when you have a large number of workflows.

per_page
integer

Limits the number of workflows returned per page. The default and maximum value is 200.

sort_by
string

Sorts the workflows based on a specific field. The only supported value is modified_time.

sort_order
string

Sorts the workflows in ascending (asc) or descending (desc) order.

include_inner_details
string

Includes the inner details like conditions and actions of the workflows in the response.
Note: Requires the module parameter.

 

For example, to find all active lead workflows containing "Assignment" in their name, use:

https://www.zohoapis.com/crm/v8/settings/automation/workflow_rules?module=Leads&status_active=true&filter={"field":{"api_name":"name"},"comparator":"contains","value":"Assignment"}

 

Here is the API-call-ready version of the same, after URL encoding the filter value:


Now, if you inspect the response closely, you can see that we have two similar workflows: "Lead Assignment - North Region" and "Lead Assignment - South Region." And there is also an older workflow named "VP Alert - High Value Deal."

This workflow was created almost a year ago by a former team member, and it has not been modified for a long time. Is it still relevant? What exactly does it do? What criteria define a "high-value deal," and who exactly gets notified?

To answer these questions and understand the workflow's complete logic, we must examine it closely using the Get a Workflow API. This API returns the full configuration including all conditions, criteria thresholds, and specific actions for an individual workflow.

STEP 2: Inspect a single workflow using Get a Workflow API

Sample Request:

GET {api-domain}/crm/v8/settings/automation/workflow_rules/4876876000016390024

Here, 4876876000016390024 is the unique ID of the Workflow rule whose details we want to fetch, obtained from the response of Get all Workflows API.

Sample Response:

{

    "workflow_rules": [

        {

            "created_time": "2024-01-15T14:20:30+05:30",

            "execute_when": {

                "details": {

                    "trigger_module": {

                        "api_name": "Deals",

                        "id": "4876876000000002181"

                    },

                    "repeat": false

                },

                "type": "create_or_edit"

            },

            "editable": true,

            "module": {

                "api_name": "Deals",

                "id": "4876876000000002181"

            },

            "deprecated": false,

            "deletable": true,

            "description": "Alert VP of Sales for high-value opportunities",

            "source": "crm",

            "created_by": {

                "name": "Matthew Mayers",

                "id": "4876876000001360001"

            },

            "last_executed_time": null,

            "modified_time": "2024-01-23T12:23:12+05:30",

            "name": "VP Alert - High Value Deal",

            "modified_by": {

                "name": "Matthew Mayers",

                "id": "4876876000001360001"

            },

            "lock": {

                "locked_by": null,

                "message": null,

                "status": false

            },

            "id": "4876876000016390024",

            "category": "default",

            "conditions": [

                {

                    "sequence_number": 1,

                    "instant_actions": {

                        "actions": [

                            {

                                "related_details": null,

                                "name": "VP notified",

                                "details": {

                                    "module": {

                                        "api_name": "Deals",

                                        "id": "4876876000000002181"

                                    }

                                },

                                "id": "4876876000016390063",

                                "type": "field_updates"

                            },

                            {

                                "related_details": {

                                    "best_time": true

                                },

                                "name": "High value deal alert",

                                "id": "4876876000016390015",

                                "type": "email_notifications"

                            }

                        ]

                    },

                    "scheduled_actions": [

                        {

                            "execute_after": {

                                "period": "business_days",

                                "unit": 1

                            },

                            "id": "4876876000016390074",

                            "actions": [

                                {

                                    "related_details": null,

                                    "name": "Confirm VP follow-up",

                                    "id": "4876876000016390067",

                                    "type": "tasks"

                                }

                            ]

                        }

                    ],

                    "criteria_details": {

                        "relational_criteria": {

                            "module_selection": null,

                            "criteria": null,

                            "module": null

                        },

                        "criteria": {

                            "group_operator": "AND",

                            "group": [

                                {

                                    "comparator": "equal",

                                    "field": {

                                        "api_name": "Amount",

                                        "id": "4876876000000002557"

                                    },

                                    "type": "value",

                                    "value": "50000"

                                },

                                {

                                    "comparator": "equal",

                                    "field": {

                                        "api_name": "Stage",

                                        "id": "4876876000000002565"

                                    },

                                    "type": "value",

                                    "value": "Negotiation/Review"

                                }

                            ]

                        }

                    },

                    "id": "4876876000016390025"

                }

            ],

            "status": {

                "active": true

            }

        },

        {

            "id": "4876876000012015001",

            "name": "Lead Assignment - North Region",

            "module": {"api_name": "Leads"},

            "status": {"active": true},

            "execute_when": {"type": "create"},

            "last_executed_time": "2025-10-14T11:56:20+05:30"

            // ... other keys omitted for brevity

        },

        {

            "id": "4876876000012020001",

            "name": "Lead Assignment - South Region",

            "module": {"api_name": "Leads"},

            "status": {"active": true},

            "execute_when": {"type": "create"},

            "last_executed_time": "2025-10-14T10:30:15+05:30"

            // ... other keys omitted for brevity

        }

        // ... additional workflows ...

    ],

    "info": {

        "per_page": 200,

        "count": 71,

        "page": 1,

        "more_records": false

    }

}

 

The detailed response gives us a complete blueprint of the workflow. We can now see the exact business logic: the workflow triggers when deals are edited and meet two specific conditions; when the amount equals exactly $50,000 AND the stage is Negotiation/Review.

More importantly, we can see all the actions that execute: an immediate field update to mark deals as "VP notified," an email notification sent at the optimal time, and a follow-up task scheduled for one business day later. Here's what is really interesting about this detail; this workflow has never actually executed, despite being active for nearly a year, because the last_executed_time is null in the response.

Now we are left with some important questions. Is that $50,000 threshold too narrow? What if a $49,000 deal is just as important? And is the VP still the right person to alert? Are there additional stakeholders who should be notified beyond just the VP? These are the type of questions you can start answering once you inspect your workflows closely.

STEP 3: Check limits and distribution

Before making any changes, we must understand our automation capacity and how workflows are distributed across the organization. The Workflow APIs provide two key endpoints for this:

1. Get Workflow limits API

This API provides a comprehensive view of your organization's workflow capacity across multiple dimensions.

Sample Request:

GET {api-domain}/crm/v8/settings/automation/workflow_rules/actions/rules_count

Sample Response:

{

    "rules_count": {

        "scheduled_actions_per_rule_limit": 5,

        "total_rules_limit": 2500,

        "active_rules_configured": 71,

        "rules_per_process_limit": 10,

        "total_actions_per_rule_limit": 50,

        "total_rules_limit_per_module": 125,

        "active_rules_limit": 2000,

        "total_rules_configured": 82,

        "active_rules_limit_per_module": 75

    }

}

 

This response gives the following information:

  • Total Capacity: Zylker has a generous limit of 2,500 total workflows, with only 82 currently configured. This means that they are using just 3 percent of their total capacity.

  • Active Workflows: There are 71 active workflows, well below their 2,000 active workflow limit

  • Module-level Limits: Each module can support up to 125 total workflows, with 75 of those allowed to be active simultaneously.

  • Action Limits: Each condition in the Workflow can contain up to 50 total actions, with a maximum of five scheduled actions.

For Zylker, this is excellent news. Only 71 active workflows out of a 2,000 limit. This means we have substantial room for growth and can confidently create new workflows without worrying about capacity constraints.

2. Get module-wise counts API

This API tells you exactly how many workflow rules you have in each module. It shows both the total number of rules and how many are currently active. This helps you see where your automations are concentrated and where you might be missing opportunities.

Sample request:

GET  {api-domain}/crm/v8/settings/automation/workflow_rules/actions/module_specific_count

Sample Response:

{

    "module_specific_count": [

        {

            "active_rules_configured": 2,

            "module": {

                "api_name": "Products",

                "id": "4876876000000002213"

            },

            "total_rules_configured": 2

        },

        {

            "active_rules_configured": 2,

            "module": {

                "api_name": "Deals",

                "id": "4876876000000002181"

            },

            "total_rules_configured": 2

        },

        {

            "active_rules_configured": 4,

            "module": {

                "api_name": "Contacts",

                "id": "4876876000000002179"

            },

            "total_rules_configured": 5

        },

        {

            "active_rules_configured": 2,

            "module": {

                "api_name": "Appointments__s",

                "id": "4876876000002362026"

            },

            "total_rules_configured": 3

        },

        {

            "active_rules_configured": 4,

            "module": {

                "api_name": "Calls",

                "id": "4876876000000033015"

            },

            "total_rules_configured": 5

        },

        {

            "active_rules_configured": 43,

            "module": {

                "api_name": "Leads",

                "id": "4876876000000002175"

            },

            "total_rules_configured": 51

        },

        {

            "active_rules_configured": 14,

            "module": {

                "api_name": "Emails",

                "id": "4876876000000014163"

            },

            "total_rules_configured": 15

        }

    ]

}

 

Looking at this response, we can see 43 active workflows in Leads but only two in Deals. This tells us that Zylker is heavily focused on lead management but might be missing opportunities to automate their sales process later in the pipeline.

Together, these two APIs give a complete picture of the automation capacity and distribution.

What's next: From understanding to action 

Now that we have our foundation, we are ready to start building and refining.

In the next part of this Kaizen series, we will move from discovery to design. We’ll use the Workflow Configuration, Create, and Update APIs to standardize Zylker’s automation management, create new workflow rules, and update existing ones for consistency and efficiency.

We hope that you find this post on Workflow APIs useful. If you have any feedback, or if there are any pain-points that you would like us to address in our Kaizen series, please let us know in the comments, or reach out to us via support@zohocrm.com. We will be happy to help!

Until we meet again next Friday, Happy coding!

    • Sticky Posts

    • Kaizen #198: Using Client Script for Custom Validation in Blueprint

      Nearing 200th Kaizen Post – 1 More to the Big Two-Oh-Oh! Do you have any questions, suggestions, or topics you would like us to cover in future posts? Your insights and suggestions help us shape future content and make this series better for everyone.
    • Kaizen #226: Using ZRC in Client Script

      Hello everyone! Welcome to another week of Kaizen. In today's post, lets see what is ZRC (Zoho Request Client) and how we can use ZRC methods in Client Script to get inputs from a Salesperson and update the Lead status with a single button click. In this
    • Kaizen #222 - Client Script Support for Notes Related List

      Hello everyone! Welcome to another week of Kaizen. The final Kaizen post of the year 2025 is here! With the new Client Script support for the Notes Related List, you can validate, enrich, and manage notes across modules. In this post, we’ll explore how
    • Kaizen #217 - Actions APIs : Tasks

      Welcome to another week of Kaizen! In last week's post we discussed Email Notifications APIs which act as the link between your Workflow automations and you. We have discussed how Zylker Cloud Services uses Email Notifications API in their custom dashboard.
    • Kaizen #216 - Actions APIs : Email Notifications

      Welcome to another week of Kaizen! For the last three weeks, we have been discussing Zylker's workflows. We successfully updated a dormant workflow, built a new one from the ground up and more. But our work is not finished—these automated processes are
    • Recent Topics

    • MS Teams Flow Integration Question

      Where can I find the chat ID for the "Post message to chat" target?
    • Zoho Flow - Access denied to recover recording from call module - OpenAI

      Hi, I am trying to build a Flow to recover recoding when a new call is saved in my CRM. I have integrated my CRM with ringcentral and the recordings are saved in the event. Trigger: When new module entry Step 2: Fetch module entry (Zoho CRM says "permission
    • Unable to send price in big commerce from zoho flow.

      I am creating a flow from zoho flow to create a product in zoho inventory and sending this to big commerce. But the problem is like when ever i send the price its getting error. it require decimal format value if i am sending ${trigger.sales_rate} the
    • Not sending mail to new lead in zoho flow

      I have created a flow in zoho flow and triggered an action to send email notification when the new lead is created but even after user entering the mail id the email is not going to them
    • Access query string from incoming webhook URL in Zoho Flow

      I have a fairly straightforward use case, but cannot find anything conclusive on this subject. How can I simply access the query string of the incoming webhook request in Zoho Flow? I am attaching the Deal ID to the end of the request like: https://flow.zoho.com/762439902/flow/webhook/incoming?zapikey=1001.0dec2d7dd15080c464a13925275f0129.448c23ee219c545c89f5a178456cfc8b&isdebug=false&dealID=${Deals.Deal
    • Unable to access my Zoho forms account

      For some days now, I haven't had access to my Zoho Forms account. I keep getting an error that says, "You are an inactive user in your organization" via the mobile app and "You don't have permission to access this organization" via the web. I was removed
    • Identify Unused Deluge Functions in Zoho CRM

      Hello Zoho Support Team, I would like to request a feature that helps administrators identify unused or rarely used Deluge functions in Zoho CRM. Currently, Deluge functions are distributed across different areas, and there is no centralized overview
    • User Automation: User based workflow rules & webhooks

      User management is an undeniable part of project management and requires adequate monitoring. As teams grow and projects multiply, manual coordination for updating users & permissions becomes difficult and can give way to errors. User automation in Zoho
    • Update on V2 API End-of-Life Timeline

      Dear Users, Earlier this year, we shared the launch of the V3 APIs and requested users to migrate from the older V2 APIs by December 2025. We have received valuable feedback from our users and partners regarding their migration timelines. We are happy
    • Run a workflow after record merge

      Hello, We are wondering if there is a way to trigger a workflow after two records are merged? We have a sms service that use to text back and forth with Prospects and Contacts. To make it easy for our users, we automatically create them in this other
    • Live webinar | The Evolution of Zoho Show: 2025 Feature Recap

      2025 has been a year of exciting updates and features for Zoho Show. From advanced design and formatting tools to smarter presentation delivery, enhanced collaboration, and AI-powered features—along with the launch of our desktop apps, Show has continued
    • Batch Tracking custom function

      Hi fellow zoho users, We have our ecommerce site setup to shopify. I have some products I want to add batch tracking too, my only issue is that it breaks our shopify workflow (create sales order, invoice, payment, package) because it requires us to manually
    • Include Suggested Articles in New Ticket Email

      When someone creates a new ticket, is there any way to include recommended knowledge base articles (like the ones Zia Suggests) in the email notification to the user? When they're waiting for a reply, it would be nice to have sent them some recommended
    • Sharing my portal URL with clients outside the project

      Hi I need help making my project public for anyone to check on my task. I'm a freelance artist and I use trello to keep track on my client's projects however I wanted to do an upgrade. Went on here and so far I'm loving it. However, I'm having an issue sharing my url to those to see progress. They said they needed an account to access my project. How do I fix this? Without them needing an account.
    • Zoho Flow + QuickBooks Estimates – Line items not created from CRM subform

      Hi everyone, I’m trying to create QuickBooks Estimates from Zoho CRM Quotes using Zoho Flow. I’m aware that Zoho Flow’s native “Create Estimate” action does not support multiple line items, so I followed the community guidance for Invoices using a custom
    • SAP S/4 HANA Integration via ZOHO Flow

      Hi How do I change the SAP Client ID while creating a new connection ? MY client ID is 421. I believe the client id should be an input field for length 3 numbers rather then a drop down to select from a fixed set of values. Thanks
    • VLOOKUP FUNCTION PROBLEM

         Hello, i have a problem with the VLOOKUP  function in my sheet http://public.sheet.zoho.com/public/tonimoreno/indicemasacorporal2 in cell D2. This function doesn't work correctly and always returns the last content of the range. Can you help me?
    • Zoho Flow Completely Broken?

      Since December 13th, 100% of our flows have stopped working completely. Nothing is working or triggering??? I called support & sat on the line with them for 2 HOURS until they finally concluded it was a back-end problem on their end?? Now i'm calling
    • Print / Export full Dashboard page

      Hello Zoho team, It is currently only possible to print/export one component of a dashboard at a time. Requesting the option to print/export a full dashboard page with all components to a pdf or picture. Doing through the browser doesn't give good results.
    • emails duplicated in my outlook client

      Hello I am just new here and I have a litle problem that I do not find how to solve. I sumarise here after. Your help would be very appreciated. I have just recently contracted this zoho mail servicesservices as an initial evaluation yesterday night. I then:   - opened a free account  - created 1 initial email address ..........@domain.com  - created a second email address ..........@domain.com - proceeded with the config instructions (checking the ownership of my domain, changing MX etc... ) as
    • How to check task starting time in zoho mobile app?

      I am using the Zoho mobile app on my iPhone, and I am not able to see the task's starting and finishing times. When opening the Task information / Details, I can only see the Task start date and due date, but not the time. Is there any way to check a
    • Creating an extension in Sigma: Zoho CRM isn't selectable as a service

      I have 2 Zoho accounts which are part of 2 different workplaces. One workplace is able to select 'Zoho CRM' as a service option when creating a new extension, the other one is not. I'm not sure what the exact differences are between them. What do I need
    • List of packaged components and if they are upgradable

      Hello, In reference to the article Components and Packaging in Zoho Vertical Studio, can you provide an overview of what these are. Can you also please provide a list of of components that are considered Packaged and also whether they are Upgradable?
    • RouteIQ for Zoho FSM

      Beste, Zou wel top zijn dat we een RouteIQ hebben voor FSM aangezien we constant moeten zien wat de beste route is voor onze monteurs. Nu moeten we een speciale aparte programma hebben om de beste route te berrekenen voor onze monteurs aangezien de planning
    • Export Tickets from the Help Center

      Hello everyone! We are now allowing end users to export tickets directly from the help center. The ticket export allows users to: Filter tickets by Department, Priority, and Account before exporting. Download files from Export History (Setup > Data administration
    • Is it possible to remove filtering options?

      My CRM has a lot of custom fields that should not be used in filters or views. Fields that are automated and exist only to store temporary values that get used in functions. These create a lot of noise in the list of fields to filter. Isn't there any
    • Function #18: Associate invoice templates automatically based on customer language

      For businesses dealing with a diverse linguistic clientele, it becomes crucial to send out invoices in the customer's preferred language to ensure effective communication. This requirement can be handled in Zoho Books by creating invoice templates in
    • Changing field types

      Question im a Zoho CRM user and curious, if I change a flied type from single or multi line text to a URL field type will i lose the data in the field or will it be converted to website link automatically. Thanks
    • Quote PDF – Header image stopped rendering suddenly

      Hello Zoho Support Team, We are facing an issue with Quote PDF templates in Zoho Books. Previously, images added inside the Quote header HTML were rendering correctly. However, recently the header image is no longer appearing, while header text still
    • Changing Default PDF Name

      Is it possible to change the default name of a PDF? As of right now, all of my quotes are named 'QT_$QuoteNumber' (i,e: 'QT_19803471298374) - would it be possible to change this to: '$CompanyName - $AccountName - $QuoteNumber' for instance?
    • Tip 2: Recursive functions in Deluge: How to dynamically run a function for a specified number of times.

      Hi folks, As part of the Zoho Creator - Tips and Tricks series every fortnight, we are back today with a new tip on Recursive functions.  Let us first quickly understand what Recursive functions are: A function that calls itself one or more times is known as a Recursive function. That is, you can execute a function to perform a particular action a specific number of times. And, at the end of each iteration, a new output is generated. Recursive functions are commonly used by programmers as it enables
    • Function #48: Manage fixed installment payments using Zoho Books

      Hello everyone, and welcome back to our series! Businesses offer installment payment options to their customers, particularly for expensive purchases, to ease the financial burden on them. By breaking down the total cost into smaller, more manageable
    • Spotlight series #6: The Show app for Android TV has a new look!

      Hello everyone! We are delighted to introduce our revamped and redesigned Show app for Android TV.  Smart TVs are exploding in popularity. Android TV alone has over 110 million active monthly devices. Zoho Show, as part of a constant effort to improve
    • Can’t create alias “Email alias already exists”

      Hi, I’m trying to create the following alias for my domain email. contact@ personal@ private@ But I get a email alias already exists. I had a soho account previously which I deleted which I suspect is causing the issue. Can someone assist? Kind Rega
    • Appraisals - Order of Previous Reviews Should Be Newest to Oldest

      The new Zoho People layout generally does a decent job at providing the necessary information for performing appraisals of employee performance. One example of this is the Previous Reviews section: This information is helpful when conducting a review.
    • Paging through API results. a major gap in your documentation.

      There is no way for me. to get all of my data through a single API call. Typically REST APis have mechanisms for paging through API results. But the documentation for the API I am using: https://desk.zoho.com/DeskAPIDocument#Introduction Has no mention
    • Recurring invoices were generated with old template...

      I have recurring invoices setup. Ones generated on 10.20.2025 used the modified template I had used. But for some reason, on the ones created on 11/20/2025, it seems the invoices created reverted to the previous version of the invoice template. Notably,
    • Tip #54- Exploring the Files Icon in Zoho Assist- 'Insider Insights'

      As we’re already in mid-December, it’s a good time to take a closer look at one of the most useful options in the Zoho Assist remote support dashboard—the Files icon. To get started, log in to Zoho Assist using your credentials. Once you’re in, navigate
    • Tip#47: Estimation planner

      Sprint planning becomes easier, smoother, more collaborative and more accurate with the Estimation Planner extension. Most work items involve multiple users, and each user's role and effort vary. To provide an unbiased and fair estimation point to the
    • Time Tracking on Iphone doesn't stop

      When I start a time tracking session the timer starts as expected. However when I hit stop, the timer remains on that project. The only buttons available are discard and start. Start runs the timer more and discard says it will throw away the data from
    • Next Page