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 #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

      • Need Customer Item Inward Module along with QC

        Need Customer Item Inward Module along with QC 1. Using Transfer Orders hit the item balance sheet 2. Items without inventory it becomes difficult for tracking purpose. 3. Custom Modules become tedious to capture multiple items, item subforms are not
      • Zoho CRM Quotes – Subform and PDF/Writer Limitations

        Hello, I am encountering the following limitations in Zoho CRM Quotes: Custom product images cannot be uploaded in the subform – the image upload field cannot be added; only the file upload field is available. File upload placeholders cannot be used in
      • Apple Messages for Business in Omnichannel communications?

        Hello, Apple launched "Apple Messages for Business" but Zoho CRM or Zoho Desk don't appear in the list of possible integrators. Zoho already promotes https://www.zoho.com/crm/omnichannel.html Omni Channel integration, but Apple Messages does not yet appear.
      • Possible to Turn Off Automatic Notifications for Approvals?

        Hello, This is another question regarding the approval process. First a bit of background: Each of our accounts is assigned a rank based on potential sales. In Zoho, the account rank field is a drop-down with the 5 rank levels and is located on the account
      • Will be possible to create a merge mail template for products?

        Hi, we would need to create a mail merge template for products (native) module. Will be possibile? or do you have a smart solutions to merge products data with a mail merge? thanks Chris
      • Maximum incoming email (attachment size) limit

        I see that the maximum size of received emails can now be set to 20MB, however I'd still like to see it be larger. It's embarrassing when a client sends me an email with a large attachment and I can't receive it. 50, even 100 MB seems reasonable these
      • [Free Webinar] Learning Table Series - Multi-currency management in Zoho Creator

        Hello everyone, We’re excited to invite you to another edition of the Learning Table Series webinar. As you may already know, we've moved to a purpose-based approach in the Learning Table Series this year. Each session now focuses on how a Zoho Creator
      • Outlook/Hotmail Blocking Zoho SMTP IPs (S3150)

        We are currently facing a serious deliverability issue with Zoho SMTP while sending transactional OTP emails for our production application. Emails sent to Outlook / Hotmail addresses are being rejected with the following error: 550 - 5.7.1 Unfortunately,
      • Outlook is blocking incoming mail

        Outlook is blocking all emails sent from the Zoho server. ERROR CODE :550 - 5.7.1 Unfortunately, messages from [136.143.169.51] weren't sent. Please contact your Internet service provider since part of their network is on our block list (S3150). It looks
      • LESS_THAN_MIN_OCCURANCE - code 2945

        Hi I'm trying to post a customer record to creator API and getting this error message. So cryptic. Can someone please help? Thanks Varun
      • Ranking by group in report

        Dears, I am new to Zoho Analytics and I would like to ask you guys help to creating a ranking column. Report type: Pivot Matter: I want to create a ranking column on the right of Percentage. This ranking is group by column Type, and ranking by Final Score/Percent.
      • How do I add a project template to a pre-existing project?

        Help....How do I add a project template to a pre-existing project? Right now I have to delete the old project, make a new one and add the project template at the time of creating the new project.
      • How to add line breaks in zoho.cliq.postToUser(...) message?

        In a CRM function using Deluge I'm sending this message and attempting to add some line breaks but they are ignored. Is there another way to add these breaks? My message: message: New urgent task\nDescription \nThis is a fake description.\n A new line?
      • Passing the image/file uploaded in form to openai api

        I'm trying to use the OpenAI's new vision feature where we can send image through Api. What I want is the user to upload an image in the form and send this image to OpenAI. But I can't access this image properly in deluge script. There are also some constraints
      • Users may not pick the fields to be shown as columns in the Choose Account window when creating a new Deal record

        Hi there, by talking with other users I found out that I, as an Admin, am the only one who can pick fields to be shown as columns in the Choose Account window when creating a new Deal record. In fact, if other users click on the "Add Column" symbol on
      • {Action Required} Re-authenticate your Google Accounts to Continue Data Sync

        Hello Users! To align with Google’s latest updates on how apps access files in Google Drive, we’ve enhanced our integration to comply with the updated security and privacy standards, ensuring safer and more reliable access to your data. With this update,
      • Why is the ability Customize Calls module so limited?

        Why can't I add additional sections? why can't I add other field types than the very limited subset that zoho allows? Why can I only add fields to the outbound/inbound call sections and not to the Call Information section?
      • Report Template - How to remove page break after each record?

        Hi, We have report template for a list report. It looks good at screen. But when printing, it creates a page break after each record. How to remove the it? So we can print multiple records in same page. Please look at the attached screenshots. Report Template Report Print Preview
      • Calendar report with order options and more quick view templates

        I think many of us regularly work with calendar-style reports. It would be great to be able to customize the quick view with new templates and have options to sort the entries for each day of the calendar by different criteria. I think this is an interesting
      • Sender Email Configuration Error.

        Hello Team, Hope you are all doing well. We are in the process of creating the Zoho FSM environment in the UAE. When we try to add the sender email address “techsupportuae@stryker.com”, we receive the error message: “Error occurred while sending mail
      • Shall we play a game?

        Presenting the very first game created using ZOHO Creator: Tic-Tac-Toe (or noughts and crosses) I made this to challenge myself and employ some of the new features of ZOHO Creator. I must admit that the code is very literal and not too elegant. There are plans to improve on the machine AI and streamline the code over time. Currently the code makes extensive use of functions for the machine "AI" - there are 12 of these.   The machine AI can be tricked, so to counteract that I made it exceedingly arrogant
      • CRM notes

        I want to be able to add notes to a task that do not necessarily get rolled up into an account or contact.   For example, I tasks to work on a Court Order for John Doe divorce account.  There might be lots of updates (in the form of notes) that employees
      • Confluence export to zoho learn

        Hello Is there any known way to export Confluence spaces to zoho learn ?
      • Zoho People API, Inactive users

        Hi, I would like to export using the Zoho People API using Fetch Leave Records API V2 | Zoho People API. However it only pulls active user's leaves. I want all users, active and former employees records.
      • Empty folders are now appearing in the sidebar...

        ...and the folder list is now auto-collapsed by default with no way to change. Neither of these recent updates are useful or user-friendly. ==================== Powered by Haiku https://www.haiku.co.uk ====================
      • Client Script | Update - Client Script Support For Custom Buttons

        Hello everyone! We are excited to announce one of the most requested features - Client Script support for Custom Buttons. This enhancement lets you run custom logic on button actions, giving you greater flexibility and control over your user interactions.
      • Zoho CRM for Everyone's NextGen UI Gets an Upgrade

        Hello Everyone We've made improvements to Zoho CRM for Everyone's Nextgen UI. These changes are the result of valuable feedback from you where we’ve focused on improving usability, providing wider screen space, and making navigation smoother so everything
      • Create custom rollup summary fields in Zoho CRM

        Hello everyone, In Zoho CRM, rollup summary fields have been essential tools for summarizing data across related records and enabling users to gain quick insights without having to jump across modules. Previously, only predefined summary functions were
      • Monthly Webinar - Getting Started with Zoho LandingPage

        Are you building your first landing page and want a little guidance? Join our monthly Getting Started with Zoho LandingPage webinar and learn how landing pages fit into your marketing strategy, drive lead generation, and improve conversions. Here’s what
      • View all email threads directly from record's History and Interactions

        Greetings all, We've introduced the ability to view complete email thread conversations directly from records' History and Interactions sections, along with email delivery status and sentiment insights on the Interactions page—which makes it easier for
      • Marketing Tip #22: Check website and navigation for broken links

        Do you inspect your online store frequently? If not, here's your reminder to do it now. Broken links frustrate customers and make your store feel unreliable. Whether it’s a missing product page, an outdated menu item, social media accounts, or a broken
      • Is there a way to show contact emails in the Account?

        I know I can see the emails I have sent and received on a Contact detail view, but I want to be able to see all the emails that have been sent and received between all an Accounts Contacts on the Account Detail view. That way when I see the Account detail
      • Custom function return type

        Hi, How do I create a custom deluge function in Zoho CRM that returns a string? e.g. Setup->Workflow->Custom Functions->Configure->Write own During create or edit of the function I don't see a way to change the default 'void' to anything else. Adding
      • push notification to Cliq when user is @mentioned in CRM notes

        push notification to Cliq when user is @mentioned in CRM notes. Currently users that is @mentioned gets an email to be notified. User/s that is @mentioned should get a Cliq notification.
      • How to make entries for restaurant sales in Zoho Books?

        Hello, I'm new to Zoho Books. I need to understand how to record our restaurant sales in Zoho Books. We can't raise invoices for each bill from the daily sales report generated by our POS (duplicated effort). We need a means of entering cumulative sales
      • Creating Restaurant Inventory Management on Zoho

        Hi,  We run a small cloud kitchen and are interested to use Zoho for Inventory and Composite Item tracking for our food served and supplied procured to make food items.  Our model is basically like subway where the customer can choose breads, veggies,
      • Sending emails via Books

        Anyone else getting similar problems recently ??..... Hi, Your message to the following recipient was not delivered. Please find the details below.  Bounce Details: Bounced Address : someone@google.com Bounce Reason : other ; Status : 5.0.0 (undefined status) ; Daignostic-Code : smtp;542 someone@google.com Rejected ; Bounced Time : Sep 05, 2017 06:37 PM BST Regards, Zoho Team The email addresses were fine only a few days ago but are now being rejected ?
      • Integrate with WooCommerce using Wordpress Plugin

        We’re thrilled to announce a powerful update to the Zoho Marketing Automation WordPress plugin with WooCommerce integration! This enhancement enables new possibilities for businesses running online stores using WooCommerce, empowering them to merge seamless
      • How do I sync multiple Google calendars?

        I'm brand new to Zoho and I figured out how to sync my business Google calendar but I would also like to sync my personal Google calendar. How can I do this so that, at the very least, when I have personal engagements like doctor's appointments, I can
      • Zoho Subscriptions -- Zoho Commerce integration

        Is there integration between Zoho Subscriptions and Zoho Commerce? I would like to create subscription plans in Zoho Subscritpions and list them for on my Zoho Commerce store.
      • Next Page