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!


    • Recent Topics

    • Adding hyperlinks in CRM emails time automatically

      It may just be me, but when I am writing an email to a lead, I find inserting a hyperlink very time consuming. Granted, I can use templates but there are a ton of scenarios where I might want to put a link in to an website that wouldnt require me to go though the effort of creating a template.  Ideally, the crm would identify that I that a string of text is a URL and insert the hyperlink automatically, just like microsoft outlook or gmail. Has anyone else had this same experience and found a way
    • Enhance "Applications Usage" with Date Filters, Historical Analytics & App-Level Breakdown

      Hello Zoho Creator Team, We are writing to request a critical enhancement to the Applications Usage section to improve our ability to monitor, analyze, and manage our platform consumption over time. While the current view of today’s usage is helpful for
    • External File Share - Allow delete

      Hi Team, when I share an external link and give it edit rights the external user can add but not delete files and folders. what am i doing wrong?
    • Where is the Global Search field?

      I am looking for an alternative to SF.com. Zoho CRM seems to be work fine, and be customizable in terms of the fields and reports. But there's one big thing missing and it's going to prevent us from using it: there's no global search box at the top of
    • How to notify all members on any updates to zoho crm?

      Hi, I am using the free version of zoho CRM and currently seeing this will work for our company. We are a small company and wanted to be more informed about all the changes in zoho. 1. How do I s et notifications that go to the team for any and all changes
    • How to change the format for phone numbers?

      Mobile phone numbers are currently formatted (###) ###-####.  How can I change this to a more appropriate forms for Australia being either #### ### ### or (#)### ### ###?
    • Unattended Access on Android without Play Store

      I'm testing Zoho Assist for remote config and maintenance of our IoT devices. The devices are running Android 8.1 and do NOT have Google Play Store installed, nor can it be installed. I've been able to install Zoho Assist on the devices and load the enrollment
    • Open Sans Font in Zoho Books is not Open Sans.

      Font choice in customising PDF Templates is very limited, we cannot upload custom fonts, and to make things worse, the font names are not accurate. I selected Open Sans, and thought the system was bugging, but no, Open Sans is not Open Sans. The real
    • Is it possible to embed Zoho Bookmarks in the Cliq sidebar?

      Is there any way that each Zoho user can access their bookmarks (that live in https://bookmarks.zoho.eu/ which is technically a part of Zoho Mail) directly within Cliq? As a widget, or an item in the sidebar? My team does not use Mail, it uses Cliq all
    • Show Attachments in the customer portal

      Hi, is it possible to show the Attachments list in the portal for the particular module? Bests.
    • 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.
    • Navigate with Ease: Announcing Improvements to Your Zoho CRM for Everyone's Setup Experience

      Hello Everyone, We’re thrilled to announce new enhancements to the Setup Menu in our Zoho CRM for Everyone system, designed to simplify your workday and streamline your overall experience. What's New? Addition of a Setup Homepage Faster Search in Setup
    • Zoho Projects Webhook fails with HTTP Error 0

      Hello Zoho Community, I am pulling my hair out over this one. I have setup a very basic http(s) server that always responds "ok" and code 200 to incoming GET requests. It will accept any parameters, and any path. Really, all it does is say "ok," and log
    • ZOHO Campaignで表のカラムの幅を調整したい。

      表を作成した際、個々のカラムの幅を調整したいのですが、方法が分かりません。 どなたかご存じの方ご教示ください。
    • Auto-upload Creator Files to WorkDrive

      Hi everyone, I’m working on a workflow that uploads files from Zoho Creator to specific subfolders in Zoho WorkDrive, as illustrated in the attached diagram. My Creator application form has two multi-file upload fields, and I want—on successful form submission—to
    • Exciting Updates to the Kiosk Studio Feature in Zoho CRM!

      Hello Everyone, We are here again with a series of new enhancements to Kiosk Studio, designed to elevate your experience and bring even greater efficiency to your business processes. These updates build upon our ongoing commitment to making Kiosk a powerful
    • Kaizen #129 : Client Script Support for Blueprints

      Hello everyone! Welcome to another week of Kaizen. Today, let us discuss about how you can use Client Script during a Blueprint transtion to meet your requirements. This Kaizen post will provide solution for the post - Need non-mandatory fields in blueprint
    • Search Bar Improvement for Zoho Commerce

      Hey everyone, I've been using Zoho Commerce for a bit now, and I think the search bar could really use an upgrade. Right now, it doesn't show products in a dropdown as you type, which would make finding items a lot faster. On Shopify, for example, you
    • Making digital signatures accessible to all: Introducing accessibility controls in Zoho Sign

      Hi there! At Zoho Sign, we are committed to building an inclusive digital experience for all our users. As part of our ongoing efforts to align with Web Content Accessibility Guidelines (WCAG), we’re updating the application with support that will go
    • Account Owner Field From Accounts Module to be Displayed in Contacts module

      I have a field in the Accounts Module in the CRM called "Account Owner" i want that field to be also mapped into the Contacts Module custom single line field called "Account Manager".
    • Update a field in the ZOHO Form, basis numeric value in another field in the same form

      I am trying to create a questionnaire in ZOHO, where clients need to answer 10 questions, and basis response, values are assigned. I have created a total score field where the sum of the values is stored. But i am unable to create a rule whereby another
    • How to update "Lead Status" to more than 100 records

      Hello Zoho CRM, How do I update "Lead Status" to more than 100 records at once? To give you a background, these leads were uploaded or Imported at once but the lead status record was incorrectly chosen. So since there was a way to quickly add records in the system no matter how many they are, we are also wondering if there is a quicker way to update these records to the correct "Lead Status". I hope our concern makes sense and that there will be a fix for it. All the best, Jonathan
    • Meet up de Zoho en Bilbao

      Buenos días comunidad! Estamos estudiando hacer un Meet up en Bilbao desde zoho y varios Partners. Para que la experiencia sea excelente, queremos saber cuantas pesonas se vendrían a Bilbao al evento. Y para que sea lo mas útil posible, que temas dentro
    • Picklist reference value in REST

      picklist options can be configured to have a different reference value than the displayed one, should be helpful in things like multilanguage: https://help.zoho.com/portal/en/kb/crm/customize-crm-account/translations/articles/translations is there a way
    • In Zoho inventory Converting sales return to cerdit note from using Api from Creator Error details: {"code":-1,"message":"Invalid Sales Return ID."}

      In Zoho inventory Converting sales return to cerdit note from using Api from Creator Error details: {"code":-1,"message":"Invalid Sales Return ID."} this is button Function used in the Creator map Inventory.Create_Credit_note(int CRE_ID) { return_value
    • Marketing Tip #2: Recover lost sales with abandoned cart emails

      Did you know most online shoppers don’t complete checkout? Automated cart recovery emails are an easy way to bring them back. A simple reminder can recover sales you’d otherwise lose. Try this today: Enable abandoned cart emails in Zoho Commerce and set
    • Billing Management: #9 Usage Billing in IoTs

      We live in a world where connectivity has become a lifestyle rather than a luxury. From smart thermostats that adjust your home's temperature to GPS trackers monitoring end-to-end fleets and sensors that optimize energy grids, the Internet of Things has
    • {"code":1038,"message":"JSON is not well formed"}

      Today this began failing: sales_order_data = zoho.books.createRecord("salesorders",books_organization_ID,order_data); with this error message. {"code":1038,"message":"JSON is not well formed"} This code has been running for two years. Here is the input
    • How can I migrate Shared Mailbox from Zoho Mail to Team Inbox?

      I am unable to migrate mails from my shared mailbox in Zoho Mail to Team Inbox. I am the super admin of my Zoho One plan and yet I am getting an error saying only admins can do this? I don't understand the issue.
    • Remember all the ways we've posted?

      The world celebrates World Postal Day in 2025 with the theme “#PostForPeople: Local Service. Global Reach". The story of the “post” is a story of human connection itself, evolving from simple handwritten notes carried over long distances to instant digital
    • Add Support for Authenticator App MFA in Zoho Desk Help Center

      Hello Zoho Desk Team, We hope you are doing well. We would like to request an enhancement related to security for the Zoho Desk Help Center (customer portal). Currently, the Help Center supports MFA for portal users via SAML, JWT, SMS authentication,
    • Can no longer upload my own Notebook cover

      I've had Notebook for over a year and have been able to create my own notebook covers, but when I tried to upload my own cover for a new notebook today, the upload feature has suddenly been starred, requiring me to upgrade my account. When did this
    • Zoho Desk - Cannot Invite or Register New User

      Hi who may concern, we encountered a problem that we cannot invite user or the visitor cannot register for a user at all through our help center portal, with the snapshot shown as below and the attachement. It always pops up that "Sorry, Unable to process
    • Custom domain issue

      I recently changed records for my support area custom domain for a few months, I then wanted to come back to Zoho, but now I can't connect it and I can't login as it's having an SSL issue. I cannot get a good response from support, as I've been notified
    • How do you generate personalized certificates and save them in dynamic folders using Writer's mail merge?

      Zoho Writer's mail merge feature can help you enhance the certificate management process. It's a great way to save time and effort! Merge certificates and maintain a well-organised repository with personalised certificates stored in separate folders for
    • Zoho Editor

      Zoho PDf Editor is not working I am clicking on EDIT PDf then it again bringing me back to the same page. again and again.
    • The present is a "present"

      The conversation around mental health has been gaining attention in recent years. Even with this awareness, we often feel stuck; the relentless pace of modern life makes us too busy to pause, reflect, and recharge. In the world of customer support, this
    • Market cap

      Market cap formula?? Kaise nikale
    • Need Help to setup plugs along with codeless bot buidler. To send sms OTPs to users via Zoho Voice and to verify it

      Need Help to setup plugs along with codeless bot buidler. To send sms OTPs to users via Zoho Voice and to verify it. I get leads from our website and we need to make sure those are not junk. So we are using proactive chat bot and we need mobile OTPs to
    • Direct Integration Between Zoho Cliq Meetings and Google Calendar

      Dear Zoho Team, We’d like to submit the following feature request based on our current use case and the challenges we’re facing: 🎯 Feature Request: Enable meetings scheduled in Zoho Cliq to be automatically added to the host's Google Calendar, not just
    • Next Page