Kaizen 214 - Workflow APIs - Part 2

Kaizen 214 - Workflow APIs - Part 2


Welcome back to another week of Kaizen!

Last week, we discussed how Zylker Cloud Services used the Workflow APIs to discover and audit all the automations in their CRM, listing every workflow, checking triggers, and understanding their automation limits. This week, we take the next step: understanding what configurations are valid before creating or updating workflows via APIs.

 Step 4: Workflow Rule Configurations API 

When you work in the CRM UI, creating workflows feels straightforward. The interface shows only valid triggers and actions. Try adding an unsupported action, and it simply will not appear. This is because the UI enforces hundreds of rules behind the scenes.

With APIs, these validations must be handled manually. That is where the Workflow Rule Configurations API comes in. It gives all the valid triggers and actions for a given module, preventing errors before they happen.

 Why this API matters 

Consider two examples:

  • You want to create a workflow for the Products module based on a Scoring Rule update. The UI hides this option because scoring rules are not supported for Products.

  • You try to add a Field Update action for a Record Delete trigger. This is invalid, as the record no longer exists. The UI prevents it, but via API, you would get an error if you try to create or update the workflow with this configuration.

The Configuration API removes this guesswork, allowing you to fetch and respect valid triggers and actions.

Sample Request:

GET {api-domain}/crm/v8/workflow_configurations?module=Deals

Sample Response:

{

    "workflow_configurations": {

        "related_triggers_details": [

            {

                "api_name": "Notes",  // The API name of the related module that can trigger workflows

                "module": {  // Details about the related module

                    "singular_label": "Note",  

                    "plural_label": "Notes",  

                    "api_name": "Notes",     

                    "name": "Notes",          

                    "id": "4876876000000002197"

                },

                "name": "Notes",  // Module name

                "triggers": [  // Available triggers for this related module

                    {

                        "api_name": "create",

                        "deprecated": false,

                        "name": "Create",     

                        "scheduled_actions_supported": true,  

                        "actions": [  // List of supported actions for this trigger

                            "add_tags",

                            "remove_tags",

                            "email_notifications",

                            "tasks",

                            "create_record",

                            "create_connected_record",

                            "add_meeting",

                            "webhooks",

                            "functions",

                            "flow"

                        ]

                    },

                    // ... other triggers (create_or_edit, edit, delete) omitted for brevity

                ]

            }

        ],

        "triggers": [  // Primary triggers for the Deals module itself

            {

                "api_name": "score_increase",  

                "deprecated": false,     

                "name": "ScoreIncrease",   

                "scheduled_actions_supported": false,  // Indicates whether scheduled actions are allowed for this trigger

                "actions": [  // Only these instant actions are supported

                    "field_updates",

                    "assign_owner",

                    "add_tags",

                    "remove_tags",

                    "email_notifications",

                    "tasks",

                    "webhooks",

                    "functions",

                    "circuits",

                    "flow"

                ]

            },

            // ... other triggers omitted for brevity ...

        ],

        "actions": [  // Details about available workflow actions

            {

                "is_clickable": true,                   

                "associate_action": false,       

                "limit_per_action": null,           

                "api_name": "schedule_call",       

                "supported_in_scheduled_action": true,   

                "name": "ScheduleCall",                 

                "limit": 1                               // Maximum instances per workflow

            },

            {

                "is_clickable": true,

                "associate_action": true,

                "limit_per_action": null,

                "api_name": "tasks",               

                "supported_in_scheduled_action": true,  

                "name": "Task",

                "limit": 5                            

            },

            // ... other actions omitted for brevity ...

        ]

    }

}

 

 Interpreting and using the Workflow Configuration API 

The configuration response might look complex, but it gives us all the information we need about configuring Workflow Rules in Zoho CRM, for the specific module.

 4.1 "What can trigger my Workflow?" 

The triggers array shows all the supported triggers for that specific module.

"triggers": [

    {

        "api_name": "create",

        "deprecated": false,

        "name": "Create",

        "scheduled_actions_supported": true,

        "actions": [

            "field_updates",

            "assign_owner",

            "add_tags",

            "remove_tags",

            "email_notifications",

            "tasks",

            "create_record",

            "create_connected_record",

            "add_meeting",

            "webhooks",

            "functions",

            "circuits",

            "flow"

        ]

    },

.

.

    // ... other triggers omitted for brevity ...

    {

        "api_name": "score_increase",  

        "deprecated": false,     

        "name": "ScoreIncrease",   

        "scheduled_actions_supported": false,

        "actions": [

            "field_updates",

            "assign_owner",

            "add_tags",

            "remove_tags",

            "email_notifications",

            "tasks",

            "webhooks",

            "functions",

            "circuits",

            "flow"

        ]

    }

]

 

The response lists all available triggers for the module. For each trigger type, you get:

  • Trigger conditions: When the workflow will be triggered (on create, edit, score change, etc.)

  • Action compatibility: Which actions can be used with each trigger type

  • Scheduled actions support: Whether scheduled actions are supported for that trigger or not.

For instance, the score_increase trigger triggers the workflow when the score of a record is increased. The scheduled_actions_supported key is false for this trigger, which means that this specific trigger type doesn't support scheduled actions. This directly translates to API behaviour: attempting to configure a Workflow Rule via API with a scheduled action for the score_increase trigger will result in an error.

This API constraint is visibly enforced in the CRM interface. When configuring a score-based trigger in the UI:


The UI proactively prevents invalid configurations by hiding unsupported options. This is the pain point that Workflow Rules Configuration API solves when you work on your workflows via APIs.

4. 2. "What can my Workflow actually do?" - Understanding Actions 

The actions array defines the execution capabilities of your workflows. For each action type, you get important information like:

  • Limits per action instance: Maximum number of items that can be processed within a single action instance

  • Instance limits: How many times this specific action can be added to a condition in the Workflow rule.

  • Scheduled action support: Whether the action can be added as a scheduled action.

 

For example, in the add_tags action:

{

    "is_clickable": true,

    "associate_action": false,

    "limit_per_action": 10,        // Maximum 10 tags per Add Tags action

    "api_name": "add_tags",

    "supported_in_scheduled_action": true,

    "name": "AddTags",

    "limit": 1                      // Maximum one Add Tags action per workflow

}

 

From this data, it is clear that within a single Add Tags action, you can select up to 10 specific tags to add. Similarly, you can only include one Add Tags action instance in the entire workflow rule. Also, this action cannot be used as a scheduled action.

This has direct implications for API users:

  • Attempting to configure a workflow that adds more than 10 tags in one action will result in an error

  • Trying to add two separate Add Tags actions to the same workflow will fail

  • Adding a Add Tags action under scheduled actions section will also result in an error.

 

In the UI, these constraints are proactively taken care of.  As seen in the GIF, if you add fewer than 10 tags, clicking Add Tags again only lets you edit the existing action. Also it lets you add only up to 10 tags in an action. And if you have already added an action with 10 tags, the Add Tags option will no longer be available. Either way, the system prevents any possibility of adding a second Add Tags action, regardless of tag count.

This UI experience is what the Workflow Rules Configuration API replicates for developers. By checking these limits before making API calls, you can build workflows using APIs with the same confidence and error-free experience that UI users have.

 4.3. “What can trigger my Workflow from a related module?” – Understanding related triggers 

The related_triggers_details array shows how changes in related records can trigger workflows in your primary module. For example, in the Deals module, for the Notes related trigger:

"related_triggers_details": [

    {

        "api_name": "Notes",  // The API name of the related module

        "module": {  // Detailed information about the related module

            "singular_label": "Note",     

            "plural_label": "Notes",    

            "api_name": "Notes",        

            "name": "Notes",           

            "id": "4876876000000002197"  

        },

        "name": "Notes", // Module name

        "triggers": [  // Available triggers for this related module

            {

                "api_name": "create", // Trigger when related records are created

                "deprecated": false,  

                "name": "Create",  

                "scheduled_actions_supported": true,  

                "actions": [ // Supported workflow actions for this trigger

                    "add_tags",

                    "remove_tags",

                    "email_notifications",

                    "tasks",

                    "create_record",

                    "create_connected_record",

                    "add_meeting",

                    "webhooks",

                    "functions",

                    "flow"

                ]

            },

            // ... other triggers (create_or_edit, edit, delete) omitted for brevity

        ]

    }

]

 

For each related module, you get:

  • Module information: Details about the related module that can trigger workflows.

  • Available triggers: The actions on the related record (create, edit, delete, etc) that can trigger the workflow.

  • Supported actions: For each trigger, the actions that are supported for that specific trigger.

For instance, the Notes related trigger allows you to create workflows that execute when notes are added to deals. The configuration shows that when a note is created, your workflow can perform actions like sending email notifications, creating tasks, triggering webhooks, and more.

If you try to include an unsupported trigger or unsupported action, the API call will fail. For example, adding a field_updates action for a Notes create trigger . The configuration API response clearly shows that field_updates is not among the supported actions for Notes-related triggers.

The API also gives us important differences between trigger-action configurations. For example, while field_updates action is supported for the create trigger for the main module (Deals), the same action is not supported for the related module (Notes) create trigger. These distinctions would otherwise only be discovered through API errors.


In the UI, this limitation is enforced. When setting up a workflow triggered by Notes, the "Field Updates" action does not appear in the available actions list.

By checking the related_triggers_details section before making API calls, you can discover exactly which actions are supported for each related module trigger, thus avoiding configuration errors while creating or updating Workflow rules.

 Conclusion 

The Workflow Configuration API transforms how we approach automation development through APIs. Instead of discovering constraints through failed API calls, we can now design workflows with the right configuration, without any trial-and-error methods. It gives us complete visibility into all valid trigger-action combinations before a single line of code is written, enough information to build automations triggered by related records, and limit awareness to respect action constraints before they become API errors.

For Zylker, this means we can now confidently proceed with updating the old Workflow rules and creating new ones. In our next post, we will put this knowledge into action.

We hope that you found this post useful. If you have any questions or feedback, let us know in the comments below, or write to us at support@zohocrm.com. We would love to hear from you!


    • Sticky Posts

    • 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
    • Kaizen #152 - Client Script Support for the new Canvas Record Forms

      Hello everyone! Have you ever wanted to trigger actions on click of a canvas button, icon, or text mandatory forms in Create/Edit and Clone Pages? Have you ever wanted to control how elements behave on the new Canvas Record Forms? This can be achieved
    • Kaizen #142: How to Navigate to Another Page in Zoho CRM using Client Script

      Hello everyone! Welcome back to another exciting Kaizen post. In this post, let us see how you can you navigate to different Pages using Client Script. In this Kaizen post, Need to Navigate to different Pages Client Script ZDKs related to navigation A.
    • Recent Topics

    • Cliq iOS can't see shared screen

      Hello, I had this morning a video call with a colleague. She is using Cliq Desktop MacOS and wanted to share her screen with me. I'm on iPad. I noticed, while she shared her screen, I could only see her video, but not the shared screen... Does Cliq iOS is able to display shared screen, or is it somewhere else to be found ? Regards
    • Service op locatie organiseren met Zoho FSM: waar lopen organisaties tegenaan?

      Bij organisaties met service teams op locatie merken we vaak dat de complexiteit niet zozeer in de planning zelf zit, maar in wat er rond die planning gebeurt. Denk aan opvolging na interventies, consistente servicerapporten, en het bijhouden van installaties
    • Workflow Down/Bug

      We have a workflow that sends an email to one of our internal departments 10 minutes after a record is created in a custom module. The workflow actually works correctly. However, we have now noticed that on January 8, between 3:55 p.m. and 4:33 p.m.,
    • Introducing Assemblies and Kits in Zoho Inventory

      Hello customers, We’re excited to share a major revamp to Zoho Inventory that brings both clarity and flexibility to your inventory management experience! Presenting Assemblies and Kits We’re thrilled to introduce Assemblies and Kits, which replaces the
    • Automate pushing Zoho CRM backups into Zoho WorkDrive

      Through our Zoho One subscription we have both Zoho CRM and Zoho WorkDrive. We have regular backups setup in Zoho CRM. Once the backup is created, we are notified. Since we want to keep these backups for more than 7 days, we manually download them. They
    • Does the ability exist to make tax on the customer profile mandatory?

      I am reaching out to inquire about the possibility of making the "Customer Tax" field mandatory when creating a new customer in Zoho. We want to ensure that all customers have their tax information recorded to maintain compliance with our internal processes.
    • CRM gets location smart with the all new Map View: visualize records, locate records within any radius, and more

      Hello all, We've introduced a new way to work with location data in Zoho CRM: the Map View. Instead of scrolling through endless lists, your records now appear as pins on a map. Built on top of the all-new address field and powered by Mappls (MapMyIndia),
    • How to apply customized Zoho Crm Home Page to all users?

      I have tried to study manuals and play with Zoho CRM but haven't found a way how to apply customized Zoho CRM Home Page as a (default) home page for other CRM users.. How that can be done, if possible? - kipi Moderation Update: Currently, each user has
    • Send Whatsapp with API including custom placeholders

      Is is possible to initiate a session on whatsapp IM channel with a template that includes params (placeholders) that are passed on the API call? This is very usefull to send a Utility message for a transactional notification including an order number
    • IMAP mail after specify date

      Hi My customer's mail server is on premise and mail storage is very huge. So It never finish sync. and finally stop sync. Cloud CRM have a option like zoho mail sync mail after some date.
    • email association with CRM

      Why is it 2024 (almost 2025) and Zoho has not figured out how to integrate email with CRM? It is so inconsistent at associating emails within CRM. I am an attorney. I have clients and work with other attorneys. Attorney John Doe is associated with multiple
    • Fix the speed

      It takes ages to load on every step even though my dataset is quite small.
    • Credit Note for Shipped and Fatoora pushed invoices

      We have shipped a Sales Order and created an Invoice. The Invoice is also pushed to Fatoora Now we need to create a credit note for the invoice When we try it, it says we need to create a Sales Return in the Zoho Books, we have already created a Sales
    • Whatsapp Connection Status still "Pending" after migration

      Hello, I migrated my WhatsApp API to Zoho from another provider a day ago. So far the connection status is still “Pending”. There is a problem? How long does it usually take?
    • FSM - Timesheet entires for Internal Work

      Hi FSM Team, Several of my clients have asked how they can manage internal timesheets within Zoho FSM. Since their technicians already spend most of their day working in FSM, it would be ideal if they could log all working hours directly in the FSM app.
    • Add a way of clearing fields values in Flow actions

      It would be great if there was an option to set a field as Null when creating flows. I had an instance today where I just wanted to clear a long integer field in the CRM based on an action in Projects but I had to write a custom function. It would be
    • Role Management

      I am creating an analytics dashboard for a company that will be utilized by its various departments such as Finance, Marketing, and HR. My goal is to design the dashboard with separate tabs for each department. Additionally, I plan to implement role-based
    • Link Contacts to Billed Accounts

      Hello, I want to do a survey on all my customers of 2025. For that I want to select all contacts linked to accounts who where billed in 2025. How to I create this link to I can then use Zoho Survey with this database of contacts?
    • Highlight a candidate who is "off limits"

      Hello: Is there a way to highlight a candidate who is "off limits"?  I would like to have the ability to make certain candidate and / or Client records highlighted in RED or something like that.   This would be used for example when we may have placed a candidate somewhere and we want everyone in our company to quickly and easily see that they are off limits.  The same would apply when we want to put a client or former client off limits so no one recruits out of there. How can this be done? Cheers,
    • Announcing new features in Trident for Windows (v.1.37.5.0)

      Hello Community! Trident for Windows just received a major update, with a range of capabilities that strengthen email security and enhance communication. This update focuses on making your mailbox safer and your overall email experience more reliable.
    • Early Payment Discount customize Text

      Hi, I’m currently using Zoho Books and am trying to customize the standard “Early Payment Discount” message that appears in the PDF invoice template. I’ve reviewed the documentation here: https://www.zoho.com/books/help/invoice/early-payment-discount.html
    • Automatic Matching from Bank Statements / Feeds

      Is it possible to have transactions from a feed or bank statement automatically match when certain criteria are met? My use case, which is pretty broadly applicable, is e-commerce transactions for merchant services accounts (clearing accounts). In these
    • Deprecation of SMS-based multi-factor authentication (MFA) mode

      Overview of SMS-based OTP MFA mode The SMS-based OTP MFA method involves the delivery of a one-time password to a user's mobile phone via SMS. The user receives the OTP on their mobile phone and enters it to sign into their account. SMS-based OTPs offer
    • How to Customize Task Creation to Send a Custom Alert Using JavaScript in Zoho CRM?

      Hello Zoho CRM Community, I’m looking to customize Zoho CRM to send a custom alert whenever a task is created. I understand that Zoho CRM supports client scripts using JavaScript, and I would like to leverage this feature to implement the alert functionality.
    • DKIM Now Mandatory - Changes to Zoho Forms Email Policies

      Hello Zoho Forms Users, This post is to inform you about an important update regarding the authentication of all email domains in your Zoho Forms account. This year, we are doubling down on our commitment to deliver a secure, seamless, and empowering
    • Ability to assign Invoice Ownership through Deluge in FSM

      Hi, As part of our process, when a service appointment is completed, we automated the creation of the invoice based on a specific business logic using Deluge. When we do that, the "Owner" of the invoice in Zoho FSM is defaulted to the SuperAdmin. This
    • Call description in notes

      When completing a call, we type in the result of the call in the description. However, that does not show up under the notes history on the contact. We want to be able to see all the calls that have taken place for a contact wihtout having to go into
    • Please can the open tasks be shown in each customer account at the top.

      Hi there This has happened before, where the open tasks are no longer visible at the top of the page for each customer in the CRM. They have gone missing previously and were reinstated when I asked so I think it's just after an update that this feature
    • Mapping a new Ticket in Zoho Desk to an Account or Deal in Zoho CRM manually

      Is there any way for me to map an existing ticket in Zoho desk to an account or Deal within Zoho CRM? Sometimes people use different email to put in a ticket than the one that we have in the CRM, but it's still the same person. We would like to be able
    • Email Address for Contact not Populating

      When I click "Send Mail" from a Contact's page, their email address does not auto populate the "To" field. How do I make this happen?
    • New in CRM: Dynamic filters for lookup fields

      Last modified on Oct 28, 2024: This feature was initially available only through Early Access upon request. It is now available to all users across all data centers, except for the IN DC. Users in the IN DC can temporarily request access using this form
    • Why hybrid project management might be the best fit for you?

      Project management techniques are designed to equip teams with proven methods for easy and efficient project execution. While management teams may have apprehensions about adopting the hybrid method of project management, we’ve compiled the top reasons
    • Allow all Company Users to view all projects, but only owner/admins can change projects

      I was wondering if there was a permission setting I could adjust to allow all our company users to see all projects created. Then, only the project owners and admins with the change permission. Thanks
    • Fail to send Email by deluge

      Hi, today I gonna update some email include details in deluge, while this msg pops up and restrict me to save but my rules has run for one year. I dont care why zoho suddenly add this useless limit, but can you tell me how to use one of our admin account
    • Seeking help to be able to search on all custom functions that are defined

      Hello I have a lot of custom functions defined (around 200) and i would like to search some specific strings in the content of those. Is there a way to accomplish that? If not, is there a way to download all existing custom functions in some files locally
    • Totals for Sales Tax Report

      On the sales tax report, the column totals aren't shown for any column other than Total Tax. I can't think of a good reason that they shouldn't be included for the other columns, as well. It would help me with my returns, for sure. It seems ludicrous
    • Add Bulk Section / Grid Layout Duplicate Feature in Zoho Forms Builder

      Currently in Zoho Forms, users can only duplicate individual fields. There is no option to duplicate an entire section or two-column/grid layout with all internal fields. This becomes inefficient when building structured forms such as Family Details,
    • Leistungsdatum in Rechnungen (Zoho Books)

      Hallo, ist es irgendwie möglich den Leistungszeitraum in der Rechnung aufzuführen? Beste Grüße Aleks
    • Zoho Trident Windows - Streams Not Visible

      Namaste We’re having an issue with Streams not being visible in Trident (Windows), which is important for us as we share many emails internally. It appears that the feature to show Streams above the Inbox folder, as seen in the default mailbox view, is
    • Sales IQ Chat Widget is Only Displaying Last Name

      Can anyone suggest why the widget is only displaying "last name"?! We have the latest version of the wordpress plugin installed. Thanks Thanks!
    • Next Page