Kaizen 216 - Actions APIs : Email Notifications

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 operating in a vacuum.
What happens when a high-value deal is finally flagged, or a new social media post is published? How does the team know to take the next crucial step? How does the system connect with your team? Through Automatic Actions-the vital link between automation and people.   
The actions include:
  1. sending email notifications
  2. assigning tasks to users
  3. updating fields
  4. communicating with third-party applications by sending instant web notifications, etc.
In this post we will focus on Email Notifications.

After bringing structure and visibility to workflows using the custom admin dashboard, the system administrators at Zylker seek to include Workflow Actions so that details of the actions associated with each workflow can be managed from the dashboard itself. Including Email Notification details to Zylker's dashboard ensure the right people receive clear, actionable email alerts at the perfect moment.
This update to the dashboard will allow system admins to:
  1. audit the existing email notifications,
  2. create new email notifications,
  3. update existing email notifications, and
  4. clean up inactive and unwanted email notifications.

STEP 1: Discover and audit existing email notifications

To get details of email notifications in the system the admins use GET email notifications API. This gives us the required information about email notifications in the system. 

Request URL

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

Response JSON

{
    "email_notifications": [
        {
            "template": {
                "name": "VP Alert - High Value Deal",
                "id": "6660682000001292005"
            },
            "reply_to_address": {
                "resource": {
                    "id": "5843104000000424686"
                },
                "type": "user"
            },
            "created_time": "2025-02-26T14:35:51+05:30",
            "lock_status": {
                "locked": false
            },
            "editable": true,
            "module": {
                "api_name": "Deals",
                "id": "6660682000000002181"
            },
            "related_module": null,
            "deletable": true,
            "recipient_count": "3",
            "source": "crm",
            "created_by": {
                "name": "Alex Rivera",
                "id": "6660682000000501002"
            },
            "feature_type": "workflow",
            "modified_time": "2025-07-06T16:15:58+05:30",
            "associated": true,
            "name": "VP Alert - High Value Deal",
            "modified_by": {
                "name": "Alex Rivera",
                "id": "6660682000000501002"
            },
            "id": "6660682000000000353",
            "from_address": {
                "resource": {
                    "id": "5843104000000424686"
                },
                "type": "user"
            }
        },
   //more records omitted for brevity
    ],
    "info": {
        "per_page": 200,
        "count": 2,
        "page": 1,
        "more_records": false
    }
}


STEP 2: Create new email notifications


The admin seeks to create a new email notification when a deal is lost. For creating the email notification first the admin should create an email template in Zoho CRM. 
Lost Deal Email Template

For creating an email notification, admin uses Create Email Notification API.


Request URL

POST {api-domain}/crm/v8/settings/automation/email_notifications

Input JSON

 {
  "email_notifications": [
    {
      "template": {
        "name": "Lost Deal",
        "id": "5843104000006629014"
      },
      "module": {
        "api_name": "Deals",
        "id": "5843104000000002181"
      },
      "related_module": null,
      "feature_type": "workflow",
      "bulk_email": false,
      "recipients": {
        "to": [
          {
            "details": {
              "api_name": "${!Deals.Owner}",
              "id": "5843104000000002555"
            },
            "type": "merge_field"
          },
          {
            "details": {
              "api_name": "${!Deals.Owner.Reporting_To}",
              "id": "5843104000000256015"
            },
            "type": "merge_field"
          },
          {
            "resource": {
              "name": "Patricia Boyle",
              "id": "5843104000000424672"
            },
            "type": "user"
          }
        ]
      },
      "name": "LostDealNotification"
    }
  ]
}

Response:

{
    "email_notifications": [
        {
            "code": "SUCCESS",
            "details": {
                "id": "5843104000006646001"
            },
            "message": "alert created successfully",
            "status": "success"
        }
    ]
}

Key Fields:

1. Basic Fields
  1. name: A unique identifier for your notification (e.g., "LostDealNotification")
  2. feature_type: Set to "workflow" for automation-triggered notifications from workflow. 
  3. template: The ID and name of the email template you created earlier
  4. module: The ID and API_name of the module this  email notification applies to.
  5. bulk_email: bulk_email field indicates whether the email notification will be sent a single mass email with all recipients displayed. When this key is set as true, you can add recipients in CC and BCC
2. Recipients 
The recipients object determines who receives the notification. The possible recipients to an email notification are indicated by the to, cc and bcc keys. These  type field inside these keys indicate the type of recipient, with possible values including merge_field, group, role, role_and_subordinate, territory, territory_and_subterritory, emails, user (applicable for team modules), and profile (applicable for team modules).
You can use three main strategies to add recipients:

  1. A. Dynamic Fields (Merge Fields) 
           Use "type": "merge_field" to dynamically pull email addresses from the record:

{

  "type": "merge_field",

  "details": {

    "api_name": "${!Deals.Owner}" // Sends to the deal owner

  }

}
  1. B. Specific Users or Groups or Roles or Territories

          Use these options to send notifications to specific people

{

  "type": "user",

  "resource": {

    "id": "5843104000000424672"  // Patricia Boyle's user ID

  }

} 

  1. C. Direct Email Addresses

          Use "type": "emails" for fixed email addresses:

{

  "type": "emails",

  "details": {

    "emails": ["customer.success@zylker.com"]

  }

}

STEP 3: Updating an email notifications  

Zylker noticed a troubling pattern in their sales analytics. They were experiencing a much higher deal loss rate compared to the same period last year. The management brought in Mark Stevens, a Sales Strategist who specializes in analyzing lost deals. His first request was simple: "I need to see every lost deal as it happens to spot patterns in real-time."

Rather than creating new work flow rules or actions, the admin simply updates the existing email notification for lost deals to include Mark.

Request URL to update the lost deal email notification

POST {api-domain}/crm/v8/settings/automation/email_notifications/5843104000006646001

Input JSON

{
    "email_notifications": [
        {
            "recipients": {
                "to": [
                    {
                        "details": {
                            "api_name": "${!Deals.Owner}",
                            "id": "5843104000000002555"
                        },
                        "type": "merge_field"
                    },
                    {
                        "details": {
                            "api_name": "${!Deals.Owner.Reporting_To}",
                            "id": "5843104000000256015"
                        },
                        "type": "merge_field"
                    },
                    {
                        "resource": {
                            "name": "Patricia Boyle",
                            "id": "5843104000000424672"
                        },
                        "type": "user"
                    },
                   {
                        "details": {
                            "email": ["mark.stevens@zylker.com"]
                        },
                        "type": "emails"
                    }
                ]
            }
        }
    ]
}

Response:

{
    "email_notifications": [
        {
            "code": "SUCCESS",
            "details": {
                "id": "5843104000006646001"
            },
            "message": "alert updated successfully",
            "status": "success"
        }
    ]
}

After analyzing two weeks of lost deal notifications, Mark identified a pattern in the lost deals: over 80 percent of the recent losses were concentrated in the one industry - healthcare. He found that healthcare prospects consistently raised concerns about HIPAA compliance and data security protocols and that Zylker's sales team were not addressing them effectively. He made suggestions to train the sales team so that they can confidently address these specific requests.

STEP 4: Deleting email notifications  

Any unwanted or redundant email notification can be deleted using Delete Email Notifications API.

Request URL to delete an email notification: 

DELETE {api-domain}/crm/v8/settings/automation/email_notifications/5843104000006645001

Request URL to delete multiple email notifications

DELETE {api-domain}/crm/v8/settings/automation/email_notifications?ids=5843104000006645001,5843104000006645002
However, notifying alone is not sufficient. It should be followed with actionable tasks. In the next post, we will explore Workflow Tasks APIs.
We hope that you find this post on Actions - Email Notifications 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



Idea
Previous Kaizen : Kaizen #213 - Workflow APIs - Part 1, Part 2, Part 3 | Kaizen Directory
    • 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

    • New 2026 Application Themes

      Love the new themes - shame you can't get a little more granular with the colours, ie 3 different colours so one for the dropdown menu background. Also, I did have our logo above the application name but it appears you can't change logo placement position
    • ZOHO.CRM.UI.Record.open not working properly

      I have a Zoho CRM Widget and in it I have a block where it will open the blocks Meeting like below block.addEventListener("click", () => { ZOHO.CRM.UI.Record.open({ Entity: "Events", RecordID: meeting.id }).catch(err => { console.error("Open record failed:",
    • Workflow Rule - Field Updates: Ability to use Placeholders

      It will be great if you can use placeholder tags to update fields. For example if we want to update a custom field with the client name we can use ${CONTACT.CONTACT_FIRSTNAME}${CONTACT.CONTACT_LASTNAME}, etc
    • Need a Universal Search Option in Zohobooks

      Hello Zoho, Need a Universal Search Option in Zohobooks to search across all transactions in our books of accounts. Please do the needful Thanks
    • Implement Date-Time-Based Triggers in Zoho Desk

      Dear Zoho Desk Support Team, We are writing to request a new feature that would allow for the creation of workflows triggered by specific date-time conditions. Currently, Zoho Desk does not provide native support for date-time-based triggers, limiting
    • Why is my Lookup field not being set through Desk's API?

      Hello, I'm having trouble setting a custom field when creating a Ticket in Zoho Desk. The endpoint I'm consulting is "https://desk.zoho.com/api/v1/tickets" and even though my payload has the right format, with a "cf" key dedicated to all custom fields,
    • How exactly does "Reply assistance" work in Zoho Desk? What context is sent to the LLM?

      Hi, Im trying to better understand the technical behavior of the feature "Reply assistance" in Zoho Desk, and I couldn’t find detailed information in the current documentation. Specifically, I have questions about what data is actually being sent to the
    • Deletion Workflows

      Hello, Unless I missed it, we can't create deletion workflows. My usecase is to auto-delete junk leads. We have field called lead status, and an agent qualify all our new leads. When it's a junk lead she chose the correspondant value in the picklist. My goal is that the system delete them automatically. Is that possible? Planed ?
    • URGENTImpossible to book an appointement

      J'essaie plusieurs fois mais aucun créneau n''est disponible Message d'erreur lorsque j'essaie de sélectionner une date
    • Sendpulse SMTP/IMAP Issues

      It’s possible Zoho made some changes on their side. Sometimes, even if your regular password works, Zoho requires an app-specific password for external apps like SendPulse to connect via IMAP. You can create this in Zoho’s security settings and use it
    • Insane mail security

      I cannot access my email... anywhere. For some reason the password for the Mail app on my Mac is being rejected, it worked yesterday but now it doesn't? Ok let's try the web interface. I can access my general Zoho login with the password but if I want
    • UI issue with Organize Tabs

      When looking at the organize Tabs window (bellow) you can see that some tabs are grayed out. there is also a "Add Module/Web Tab" button. When looking at this screen it's clear that the grayed out tabs can not be removed from the portal user's screen
    • Task list flag Internal/External for all phases

      Phases are commonly used in projects to note milestones in the progression of a project, while task lists can be used to group different types of tasks together. It makes sense to be able to define a task list as either internal or external however the
    • HAVING PROBLEM WITH SENDING EMAIL

      Hi all, I'm unable to receive emails on info@germanforgirls.eu. I'm getting an error code 550. 5.1.1. invalid email recipients. Moreso, I would like info@germanforgirls.eu to be the default "send from" email and not solomon@germanforgirls.eu. Kindly see
    • 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.
    • Different Task Layouts for Subtasks

      I was wondering how it would be possible for a subtask to have a different task layout to the parent task.
    • Subscription went to default (@zoho.com) address instead for custom domain

      Hello! So I bought a lite sub to test things out, wanting to use my own domain. However, after passing through all the verification steps (completed now), it seems that the sub I bought was assigned to the default email that I already had with Zoho and
    • Canvas templates and font-family

      i dont understant why its always the smallest things that waste all of my time! why in some videos i see they have tamplates in the Canvas editor and i cant seem to fint it? and why oih why cant i cange the font? i just want simple Arial! help meeeeeeeeee
    • Re: Ca.gory groups and not all email addresses being added to a group emails

      Hi, I have added emails under 'Contacts' into categories but when sending a group email and putting the category name in not all email addresses go onto the email. I have refreshed the page, deleted and redone the info etc with no luck. I only found out
    • IMPORTANT

      Dear Zoho Support Team, I am currently experiencing an issue when trying to send emails from my Zoho Mail account. Each time I attempt to send a message, I receive the following error: "Unable to send message; Reason: 554 5.1.8 Email Outgoing Blocked."
    • Able to Send Emails from Zoho but Not Receiving Emails from Gmail

      Hello, I am experiencing an issue with my shopify domain email setup and would appreciate your help. Current situation: I can successfully send emails using Zoho. I can receive emails from some services (for example, Facebook). However, I cannot receive
    • Antispam validation failed for your domain in Accounts

      I tried adding a domain to zeptomail.zoho.com, but the “add domain” operation failed. The front‑end error reads: “Domain could not be added. Please contact support@zeptomail.com.” The back‑end API returned: ``` { "error": { "code": "TM_3601", "details":
    • Announcing new features in Trident for Windows (v.1.38.5.0)

      Hello Community! Trident for Windows just received a major update, with a range of capabilities that focuses on strengthening and enhancing communication. Let’s dive into what’s new! View complete technical email details. For those who need deeper visibility
    • Windows Desktop App - request to add minimization/startup options

      Support Team, Can you submit the following request to your development team? Here is what would be optimal in my opinion from UX perspective: 1) In the "Application Menu", add a menu item to Exit the app, as well as an alt-key shortcut for these menus
    • Accounting of Amazon

      I have recently started selling on Amazon.in and I am facing issues with different types of transactions: What entry to do in case of return? If I had sent two products and customer returned both the products but I had received only one and got the claim
    • Compose Emails Faster Using Templates and Snippet

      Hello everyone, We have made an enhancement to the Send as Email option in Tickets. Agents can use templates and snippets to draft their response, which helps save time and maintain consistency. The Send as Email page will display the available templates
    • Customize Colors used on graphs and charts according to users desire.

      It would be great if we could customize the graph's colors as we see fit. I hate that yellow is always the default color!
    • Emails not integrating

      My emails from Hubspot did not integrtate over. How do I fix that?
    • Creating meetings from an email

      Hi. Similar to Outlook, it would be helpful if a meeting can be scheduled from an email so that the attendees need not be manually entered every time it's created.
    • Importing into Multiselect Picklist

      Hi, We just completed a trade show and one of the bits of information we collect is tool style. The application supplied by the show set this up as individual questions. For example, if the customer used Thick Turret and Trumpf style but not Thin Turret,
    • 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
    • Zoho Social API for generating draft posts from a third-party app ?

      Hello everyone, I hope you are all well. I have a question regarding Zoho Social. I am developing an application that generates social media posts, and I would like to be able to incorporate a feature that allows saving these posts as drafts in Zoho Social.
    • CRM Percent custom fields: When will it show the % symbol and behave like %?

      1. Actually Percent custom fields fail to show the % symbol. 2. When in formulas Percent fields work like number: 100 x 5% = 5 ideal world 100 x 5% = 500 what happens actually 3. When importing Percent fields the % symbol has to be removed and the data
    • 【Zoho CRM】商談タブへのデータインポート

      Zoho使用前にエクセルで管理していた商談情報を、Zoho一括管理のため、商談タブにインポートしたいのですが、お客さまの氏名だけが紐づけられませんでした。 「Zoho CRMにインポートする項目を関連付ける」のところが画像のようになっています。 (弊社では、「姓」を「★個人データ名」という項目名に変更し、フルネームを入れて使用しています。) どのようにしたら氏名をインポートできるかご存じの方がいらっしゃいましたら、ご教示いただきたく、よろしくお願いいたします。 (投稿先が間違っていましたらご指
    • Deprecation of the Zoho OAuth connector

      Hello everyone, At Zoho, we continuously evaluate our integrations to ensure they meet the highest standards of security, reliability, and compliance. As part of these ongoing efforts, we've made the decision to deprecate the Zoho OAuth default connector
    • 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
    • Let us view and export the full price books data from CRM

      I quote out of CRM, some of my clients have specialised pricing for specific products - therefore we use Price Books to manage these special prices. I can only see the breakdown of the products listed in the price book and the specialised pricing for
    • What's new in Zoho Sheet: Simplify data entry and collaboration

      Hello, Zoho Sheet community! Last year, our team was focused on research and development so we could deliver updates that enhance your spreadsheet experience. This year, we’re excited to deliver those enhancements—but we'll be rolling them out incrementally
    • Changes to the send mail Deluge task in Zoho CRM

      Hello everyone, At Zoho, we continuously enhance our security measures to ensure a safer experience for all users. As part of our ongoing security enhancements, we're making an important update on using the send mail Deluge task in Zoho CRM. What's changing?
    • How to Invoice Based on Timesheet Hours Logged on a Zoho FSM Work Order

      Hi everyone, We’re working on optimizing our invoicing process in Zoho FSM, and we’ve run into a bit of a roadblock. Here’s our goal: We want to invoice based on the actual number of hours logged by our technicians on a job, specifically using the timesheets
    • Next Page