Kaizen #8 - Handling Recurrence and Participants in the Events Module via API

Kaizen #8 - Handling Recurrence and Participants in the Events Module via API

Hello everyone!

We are back this week with an exciting post—Handling recurrence and participants in the Events module through API.

First things first—What is the Events module?
"Events" is a part of the Activities module in Zoho CRM. 
An event is an activity that happens at a given place and time. You can find Events on the user's Zoho CRM's home page, Activities home page, Calendar, and in other related records.

What are the types of Events?
Events are of two types—Recurring and non-recurring events.
Recurring events: These events repeat/recur at a set frequency. You can set them to repeat by day, week, month, or by year. You can also set them to repeat a fixed number of times. 
Non-recurring events: These are one-time events.
Both these events can also be all-day events.

Now, let us see how to handle a recurring event and add/update participants via API.

1. Creating a Recurring Event through API
You must use the Insert Records API to insert a record in the Events module.

Request URL: {{api-domain}}/crm/v2/Events
Request method: POST

Sample input to create a recurring event that repeats every two weeks

{
    "data": [
        {
            "All_Day": false,
            "Event_Title": "Kaizen_9_Weekly",
            "Start_DateTime": "2020-02-02T10:00:00+05:30",
            "End_DateTime": "2020-02-02T11:00:00+05:30",
            "Participants": [
                {
                    "type": "contact",
                    "participant": "3652397000001281003"
                },
                {
                    "type": "lead",
                    "participant": "3652397000000415063"
                },
                {
                    "type": "user",
                    "participant": "3652397000000186017"
                }
            ],
            "Recurring_Activity": {
                "RRULE": "FREQ=WEEKLY;BYDAY=SU;INTERVAL=2;UNTIL=2020-03-15"
            },
            "Remind_At": "2020-02-01T09:45:00+05:30",
            "Who_Id": {
                "id": "3652397000000649013",
                "name": "Patricia Boyle"
            },
            "Venue": "Chennai",
            "$se_module": "Accounts",
            "What_Id": "3652397000000624046",
            "$send_notification": true
        }
    ]
}


Mandatory keys
The following table lists the mandatory fields you must specify while creating a recurring event. Not including any one of these fields results in the MANDATORY_NOT_FOUND error.

Key
Data Type
Description
Event_Title
String
Title of the event. Accepts a maximum of 255 characters, alphanumeric, and special characters. 
Start_DateTime
DateTime
The date and time (in ISO8601 format) at which the event begins. 
End_DateTime
DateTime
The date and time (in ISO8601 format) at which the event ends. 
Recurring_Activity
JSON Object
JSON Object that contains information about the recurrence pattern of the event in the key "RRULE".

Other Keys

Key
Data Type
Description
All_day
Boolean
Represents if the event takes place all day.
Participants
JSON Array
Contains the ID and type of each participant in individual JSON objects. Possible participant types are "lead", "contact", "user", and "email".
Remind_At
DateTime
The date and time in the current user's time zone (in ISO8601 format) at which a reminder is sent to the participants. 
Who_Id
JSON Object
The name and ID of the contact that the event is related to; that contact may or may not be a participant of the event.
What_Id
JSON Object
The name and ID of the Account, Deal, Product, Quote, Invoice, Campaign, Vendor, Case, Purchase Order, or Sales Order that the event is created for.
$se_module
String
The API name of the parent module given in the key "What_Id". This key is mandatory when you include the "What_Id".
Venue
String
The place where the event takes place. Accepts a maximum of 255 characters, alphanumeric, and special characters.
$send_notification
Boolean
Represents if you want to send invitations to the participants of the event. The value true sends out invitations, and false does not. 

We will now discuss the Participants and RRULE keys in detail.

1.1 Participants
The Participants key is a JSON array of participant JSON objects. You can add four types of participants to an event—lead, contact, user, and email. 
You must include each of these participant types as individual JSON objects inside this array as shown below.

"Participants": [
        {
            "type": "contact",
            "participant": "3652397000001281003"
        },
        {
            "type": "lead",
            "participant": "3652397000000415063"
        },
        {
            "type": "user",
            "participant": "3652397000000186017"
        },
        {
            "type": "email",
            "participant": "carissa-kidman@yahoo.com"
        }
]

Where, 
type - The type of participant. The possible values are lead, contact, user, email
participant -  The record ID of the lead, contact, or user.

1.2 RRULE
RRULE is the key in the Recurring_Activity JSON object that determines the recurrence pattern of the event. 
RRULE holds multiple key-value pairs for different types of recurring events (i.e Daily, Weekly, Monthly, Yearly). You must separate each key-value pair by a semicolon.

Mandatory key-value pairs for RRULE
Key
Possible Values
Description
FREQ
DAILY, WEEKLY, MONTHLY, YEARLY
Frequency; represents how often the event repeats. 
INTERVAL
1–99
The gap between each event. For example, for a weekly recurring event, if the INTERVAL value is 2, the gap between the first and the next event will be two weeks. 
COUNT
1–99
The number of events you want to create. For example, if the COUNT value is 3, three events will be created. 

Note
You must specify FREQ and (INTERVAL or COUNT) in RRULE.

Other key-value pairs in RRULE
Key
Possible Values
Description
BYMONTHDAY
1–31
The day of the month the event repeats on. Applicable only for  monthly and yearly events.
BYDAY
SU, MO, TU, WE, TH, FR, SA
The day of the week the event repeats on. Applicable for daily, weekly, monthly, and yearly events.
BYSETPOS
1, 2, 3, 4, -1 
The week of the month the event repeats in.
Applicable only for monthly and yearly events.
1 - Event repeats every first week of the month
2 - Event repeats every second week of the month
3 - Event repeats every third week of the month
4 - Event repeats every fourth week of the month
-1 - Event repeats every last week of the month.
UNTIL
Date in yyyy-MM-dd format
The date until which the event must repeat.

Therefore, according to the sample input given at the beginning of the post, the event starts on Feb 2, 2020 at 10:00 AM and ends the same day at 11:00 AM.

According to  "RRULE":"FREQ=WEEKLY;BYDAY=SU;INTERVAL=2;UNTIL=2020-03-15", the event occurs every Sunday, with an interval of 14 days (2 weeks), and recurs until Mar 15, 2020.
Therefore, the sequence is as shown below.
  1. The event begins on Feb 2, 2020.
  2. The first recurring event happens on Feb 16, 2020.
  3. The second recurring event happens on Mar 1, 2020.
  4. The last recurring event happens on Mar 15, 2020.
Therefore, the response will have four JSON objects—one for the first event as specified in the Start_DateTime key, and one for each recurring event.

Note
You can only create one set of recurring events using the RRULE in a single API call.

A few other examples of RRULE:
  • "RRULE": "FREQ=MONTHLY;COUNT=3;BYDAY=WE;BYSETPOS=2".
    This RRULE creates three events that recur every Wednesday in the second week of the month.
  • "RRULE": "FREQ=MONTHLY;INTERVAL=2;COUNT=3;BYMONTHDAY=14".
    This RRULE creates three events that recur on the 14th day of the month, and repeat once in two months.

2. Updating an Event
You must use the Update Specific Record API to update an event.
In this section, we will discuss
  1. Adding a participant to an event
  2. Updating all future events
2.1 . Adding a participant to an event
Details you need to add a participant to an event
  1. The event's record ID. You can obtain this from the response you received while creating the event.
  2. The ID of the participants that are added already. The GET Specific Event response will have a unique ID for each participant in the "Participants" JSON array.
The sample input is as follows.

{
    "data": [
        {
            "All_Day": false,
            "Event_Title": "Kaizen_10_Weekly",
            "Start_DateTime": "2020-02-02T11:00:00+05:30",
            "End_DateTime": "2020-02-02T12:00:00+05:30",
            "Participants": [
                {
                    "type": "contact",
                    "participant": "3652397000001281003",
                    "id": "3652397000001326102"
                },
                {
                    "type": "lead",
                    "participant": "3652397000000415063",
                    "id": "3652397000001326100"
                },
                {
                    "type": "user",
                    "participant": "3652397000000186017",
                    "id": "3652397000001326098"
                },
                {
                    "type": "email",
                    "participant": "john-butt@gmail.com"
                }
            ],
            "Remind_At": "2020-02-01T10:45:00+05:30",
            "$send_notification": true
        }
    ]
}
As you can see, a new participant of type email and email ID john-butt@gmail.com is added. Since the ID of the existing participant with the email ID carissa-batman@yahoo.com is not specified, it gets deleted.

Note
  • participant is the record ID of the participant (lead, contact, or user).
  • ID is the unique ID of the participant for that event.
  • While adding a participant, you must specify the IDs of other participants for the event. Otherwise, only the new participant is added, while the rest are deleted.

2.1 . Updating all future events
While updating an event, you can choose to update all future events with the new change.
Use the boolean key update_all_future_events. The value true updates all future events, and the value false updates only that particular event.
Here is a sample input.

{
    "data": [
        {
            "All_Day": false,
            "Event_Title": "Kaizen_10_Weekly",
            "Start_DateTime": "2020-02-02T11:00:00+05:30",
            "End_DateTime": "2020-02-02T12:00:00+05:30",
            "Participants": [
                {
                    "type": "contact",
                    "participant": "3652397000001281003",
                    "id": "3652397000001326102"
                },
                {
                    "type": "lead",
                    "participant": "3652397000000415063",
                    "id": "3652397000001326100"
                },
                {
                    "type": "user",
                    "participant": "3652397000000186017",
                    "id": "3652397000001326098"
                },
                {
                    "type": "email",
                    "participant": "carissa-kidman@yahoo.com"
                }
            ],
            "Remind_At": "2020-02-01T10:45:00+05:30",
            "update_all_future_events": true,
            "$send_notification": true
        }
    ]
}

Points to Note
While creating recurring events,
  • You must specify either COUNT or INTERVAL in the RRULE. Otherwise, the system creates 365-day events.
  • For WEEKLY recurring events, you must include BYDAY in RRULE. Otherwise, the system creates 365-day events that recurs weekly.

While updating a recurring event,
  • You must specify the record ID of the event you want to update. 
  • You must set the value of the key update_all_future_events to true to update all future events. Otherwise, the system updates only that event and the other recurring events that you created previously will remain unaltered.
  • While adding a participant, you must specify the IDs of other participants. Otherwise, only the new participant is added, while the rest are deleted.
  • You cannot update RRULE through the API.
  • You cannot update check-in related information through the API.

We hope you found this post useful. Please reach out to us if you have questions, or let us know in the comment section.
Cheers!
















    • Sticky Posts

    • 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
    • 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
    • Recent Topics

    • Create Canvas list view templates from images powered by Zia

      Currently available for all paid editions of Zoho CRM in the US, EU, IN, JP & CN DCs. Designing a personalized CRM interface just got even easier. In today’s fast-evolving digital landscape, AI is transforming the way we work by automating complex tasks
    • Painfully Slow Zoho mail

      Since yesterday Zoho Mail seems to have starting functioning very slowly and having a few bugs. It's slow to open mails, slow to send, slow to change between email accounts. Sometimes clicking on a particular folder (eg Sent folder) stops working and
    • "Wrong password or login" Problem to configure Zoho on MAIL App on my Macbook

      Hi, I'm having problems to configure my e-mail on my MAIL App(Macbook pro). My e-mail is hari@trespontoum.net Actually was working perfectly, and still working on my Iphone. My MAIL App prompt me that my login or password is wrong. I tried to change 3
    • "User already exist in your org"

      Hello, I've just read a discussion about this issue, which didn't solve my problem. I'm trying to add the following emails: sales@kiss-my-boutique.co.uk returns@kiss-my-boutique.co.uk orders@kiss-my-boutique.co.uk I'm getting an error message each time I try and add them. None of them are primary or secondary emails and none of them have been created as users before. I know this as when I try and login and do 'forgot my password' all I get is an error message saying 'user invalid'. Please advise.
    • Operation Not Permitted

      Hi, I have problem in adding user after verifying the domain but it seems like error appeared which is "operation not permitted". For your information, I had delete other domain before did it.
    • Email forwarding setup fails

      I'm trying to set up email forwarding from my Zoho email to my gmail address. I followed the directions to set up email forwarding here: https://www.zoho.com/mail/help/email-forwarding.html. I did only steps 1-6. After doing this, rather than setting
    • Shopify store email issues- Not getting emails

      Hi We have migrated from Microsoft outlook to Zoho back in March, we have a shopify store, the domain is hosted on namesilo, not shopify, I have seen some people here complaining about not getting emails from customers who fill out the contact form on
    • How do I fix this? Unable to send message; Reason:554 5.1.8 Email Outgoing Blocked.

      How do I fix this? Unable to send message; Reason:554 5.1.8 Email Outgoing Blocked.
    • Invoice Discount Account

      Is there a way to change the account used for Discounts applied to an invoice? The current Discount account (ZB native account) type is an "Income" type. I would like to change it to "Other Income", but that is not possible, I am assuming because it contains
    • Need Inactive accounts to be visible in Reports in Zoho Books

      I N=need Inactive accounts to be visible in Reports in Zoho Books to do recons of the accounts but when i see the same they are not visible in the Accountant - Account Transactions report
    • javax.mail.authenticationfailedexception 535 authentication failed

      Hi, I am facing 535 authentication failed error when trying to send email from zoho desktop as well as in webmail. Can you suggest to fix this issue,. Regards, Rekha
    • Phantom Opening Balance

      While experimenting w/ creating a composite item, Zoho added funds to Petty Cash and added Bank Account equal to previous day's balance. I'm unable to undo the adding of funds. Attaching screenshots of both bank account and petty cash transactions.
    • Importing customer comments and multiple shipto addresses

      I am evaluating Zoho Books and have most of my data imported with two exceptions: (1) Import customer comments - in my current system I have several comments of different types, and I need to bring these into Zoho. Preferably Books customer records, but
    • Detailed Account Reports - Add Running Balance

      When one clicks into an account from a report (say P/L or Balance Sheet), the default reports have the Debit, Credit, and then the Amount. The Amount column (last one) is duplicate information. It would be far better and fit more peoples' use cases if
    • How to Billed from two different GST Numbers

      How to Billed from two different GST Numbers. Suppose ABC & Co had GST registration in Delhi and Haryana and Zoho account is created with Delhi GST Registration number. Now i also want to issue invoice from Haryana GST Registration number. How can i proceed ?
    • Zoho IP blocked by SpamHaus

      ERROR CODE :550 - 5.7.0 Your server IP address is in the SpamHaus SBL-XBL database, bye
    • IMAP Communication Problems - IMAP Down Again

      We are experiencing the same problems over the last week or so that were supposedly 'solved' according to this thread. Zoho Imap Down Again This is affecting attempts to use IMAP on multiple ISPs and users so is definitely narrowed down to Zoho problems.
    • Can't login to Zoho mail

      I'm logged into Zoho but when I try to go in zoho mail I get: Invalid request! The input passed is invalid or the URL is invoked without valid parameters. Please check your input and try again. I just set up my mx records and stuff with namecheap a few
    • Hotmail is STILL blocking the zoho mail IP

      Greetings, as I already mentioned in my last message, my Zoho IP has been blocked by Hotmail for more than 15 days. Although someone said that the issue was "solved," it still isn't, and this amount of time seems neither normal for a "serious" company,
    • Keyboard shortcut M key

      I'm trying to customize my keyboard shortcuts and assign the "m" key. But it says the key is already assigned. I've looked through all my shortcuts and can't see any assigned "m". When I select an email and press the M key, nothing happens. What is the
    • Manage customer access across multi-brand help centers

      Hello everyone! Managing customer's access across multiple brands has been streamlined with the ability to invite, reinvite, approve, reject, and deactivate contacts individually for each help center brand . This enhancement gives administrators precise
    • White Label certificate

      Hi all, About 72 hours ago, we fulfilled all steps for white labeling (CNAME to point to mail.cs.zohohost.eu), but since then the configuration page is now stuck at "generating certificate" since 3 days. When I execute an NSLOOKUP mail.webfoundry.be it
    • Unusual activity detected from this IP. Please try again after some time

      When i try to create new addresses on my account i am getting this error, it has been 24 hours now and i am still getting this error can anyone help
    • How to add a new domain in my account?

      Probably zoho has the worst UI in the market. Cannot add a new domain to manage a new email address.
    • Ability for admin to access or make changes in zoho form without asking for ownership

      Currently in zoho form only form owner can make the changes in the form and if someone else has to make changes then we have to transfer the ownership to them and even admin also cant access it . So i think admin must have the ability or option to access
    • Report sorting not working

      I make extensive use of Summary reports and Pivot Tables. Most of these reports are structured such that I have several columns of "information" data that I want displayed, followed by one or more "Data" summarizations. For example, I have the following
    • New Enhancements in Wizards

      Dear All, Wizards help you break a long form into a series of smaller forms on different screens, making it less overwhelming. We are thrilled to introduce a couple of enhancements to wizards in Zoho CRM: Enhancements for conditional rules in Wizards
    • Find and Merge Duplicates to trigger webhook

      My sales team uses the Find and Merge Duplicates feature often to cleanup records in the CRM. We use webhooks to signal to our internal tools database when new Contacts are created, updated, or deleted, in order to keep our DB in sync with Zoho CRM. However,
    • Charting the 2025 Voyage: Zoho Invoice's Year in Review

      2025 has been a year of progress, productivity, and purposeful growth for Zoho Invoice. From expanding into new regions to refining everyday workflows, each update was designed to help businesses stay compliant, get paid faster, and work with confidence.
    • How to Hide System-DefinedTemplates in Service Report

      Is there any option available to hide system-defined templates? these templates are causing confusion for field users.
    • WhatsApp Report in Bigin CRM

      Reporting feature for Bigin CRM’s integrated WhatsApp that provides insights such as: Number of WhatsApp conversations closed Number of messages sent and received Number of conversations replied to Response and closure metrics for WhatsApp chats More
    • Issue with Azure DevOps Integration in Zoho Flow

      Hello, All workflows between Zoho Flow and Azure DevOps have stopped working for several days now. Upon further investigation, it seems that the connection to Azure DevOps is no longer directly supported. Indeed, Microsoft has deprecated the Azure DevOps
    • Narrative 16: Simplify with workflows

      Behind the scenes of a successful ticketing system: BTS Series Narrative 16: Simplify with workflows What is a workflow? A workflow organizes business tasks in a defined sequence that makes each step clear to all participants. This ensures work is completed
    • Zoho Invoice Customer Login Portal

      Are there any plans for a customer portal to Zoho Invoice, ala Freshbooks?  I would like customers that I invoice to be able to login to review invoices and invoice history.  I have not switched from Freshbooks for this very reason.
    • Random Leads are being created

      Hi, Every few days I am getting random leads that are being created with no form interactions at all. The email addresses are from obvious spam, such as 'Easymerchantsx'. When I look at the timeline, there is a Visit record and then a Lead Created record,
    • Print a price list or price book

      Hi Community. Am I right in concluding that Zoho has no functionality to print a price list from either Zoho CRM, Zoho Inventory or Zoho Books? I won't get stuck on the fact that Zoho doesn't sync price books between Zoho CRM and Books/Inventory (more
    • Bar Chart -- sort X-axis

      Hi! I created a bar chart ("Top 10 Products by Revenue") X-axis: Product Name Y-axis: Revenue Filter: Revenue - Top 10 Here's a picture: http://screencast.com/t/ZTJlZTdkNz The x-axis is sorted alphabetically by Product Name. How can I force it to sort numerically by Revenue?
    • ZoHo Flow Custom Function not Processing JSON

      JSON is being escaped and converting all the quotes in the JSON to '"' Here's the Code: void InsertRowInE123EligibitySheet(map input) { rawData = get("data",""); decodedData = rawData.htmlDecode(); data = decodedData.toMap(); sheet_id = "ID GOES
    • Managing functions

      Can someone let me know if there are any plans to improve the features for managing functions in CRM? I have lots of functions and finding them is hard. The search only works on the function name and the filter only works on function type. I have created
    • Zoho FSM - Service Appointment Trouble Adding Field Agent

      Hello, I just started using Zoho FSM and I'm currently adding older work orders from prior Field Service application I use. The work order that im trying to add is from an earlier date, and when I try to add a field agent to a service appointment it does
    • Next Page