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

    • Zoho OAuth Connector Deprecation and Its Impact on Zoho Desk

      Hello everyone, Zoho believes in continuously refining its integrations to uphold the highest standards of security, reliability, and compliance. As part of this ongoing improvement, the Zoho OAuth default connector will be deprecated for all Zoho services
    • Introducing Workqueue: your all-in-one view to manage daily work

      Hello all, We’re excited to introduce a major productivity boost to your CRM experience: Workqueue, a dynamic, all-in-one workspace that brings every important sales activity, approval, and follow-up right to your fingertips. What is Workqueue? Sales
    • Contact data removes Account data when creating a quote

      Hi, Our customer has address fields in their quote layout which should be the address of the Account. They prefill the information, adding the account name - the address data is populated as per what is in the account - great. However when they then add
    • [Free Webinar] Learning Table Series - Streamlining incident management process with 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
    • Unattended - Silent

      How can I hide the tray icon / pop up window during unattended remote access for silent unattended remote access?
    • How to apply customized Zoho Crm Home Page to all users?

      I have tried to study manuals and play with Zoho CRM but haven't found a way how to apply customized Zoho CRM Home Page as a (default) home page for other CRM users.. How that can be done, if possible? - kipi Moderation Update: Currently, each user has
    • 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,
    • Cliq iOS can't see shared screen

      Hello, I had this morning a video call with a colleague. She is using Cliq Desktop MacOS and wanted to share her screen with me. I'm on iPad. I noticed, while she shared her screen, I could only see her video, but not the shared screen... Does Cliq iOS is able to display shared screen, or is it somewhere else to be found ? Regards
    • Text snippet

      There is a nice feature in Zoho Desk called Text Snippet. It allows you to insert a bit of text anywhere in a reply that you are typing. That would be nice to have that option in Zoho CRM as well when we compose an email. Moderation Update: We agree that
    • Marketing Tip #18: Make your online store mobile-friendly to improve traffic

      Most online shoppers browse on their phones first. If your store is hard to read, slow to load, or tricky to navigate on mobile, they’ll bounce fast. A mobile-friendly store doesn’t just look nice; it improves engagement, reduces drop-offs, and helps
    • [Need help] Form closed. Please contact your form administrator for further assistance.

      https://forms.zohopublic.com/cceinfoifly1/form/CCE2025CCEFocusGroupRegistrationForm2025Fall/formperma/s_8XcLETTbFxZ_TAS4r_W6W5UBl8o5oxEnIX35IBKg4 I checked we didn't exceed the usage limit and form availability is enabled, Please help us enable this form
    • Zoho People. Updating TabularData

      I am trying to update tabular data in the record. I always have the same response. I have checked many times. Section ID is correct. May be something wrong with request structure itself. Can someone help me. Body content type: form urlencoded query params
    • Email was sent out without our permission

      Hi there, One customer just reached out to us about this email that we were not aware was being sent to our customers. Can you please check on your end?
    • Automatically CC an address using Zoho CRM Email Templates

      Hi all - have searched but can't see a definitive answer. We have built multiple email templates in CRM. Every time we send this we want it to CC a particular address (the same address for every email sent) so that it populates the reply back into our
    • Uplifted homepage experience

      Hello everyone, Creating your homepage is now much easier, more visual, and more impactful. Until now, your homepage allowed you to display custom views, widgets, analytic components, and Kiosk. With the following improvements, the homepage is now a smarter,
    • What are the create bill API line item requiered fields

      While the following documentation says that the line items array is requiered it doesn't say what if any files are requiered in the array. Does anyone know? API documentation: https://www.zoho.com/inventory/api/v1/bills/#create-a-bill I'm trying to add
    • Transfer ownership of files and folders in My Folders

      People work together as a team to achieve organizational goals and objectives. In an organization, there may be situations when someone leaves unexpectedly or is no longer available. This can put their team in a difficult position, especially if there
    • Problem Adding Facebook Account

      Hi, I'm new here, I'm having trouble setting up my Facebook account as a social channel. I think the issue is down to how my Facebook is set up, which is pretty confusing. I have a personal Facebook account (let’s called it A) which is my main Facebook
    • Free Webinar: Zoho Sign for Zoho Projects: Automate tasks and approvals with e-signatures

      Hi there! Handling multiple projects at once? Zoho Projects is your solution for automated and streamlined project management, and with the Zoho Sign extension, you can sign, send, and manage digital paperwork directly from your project workspace. Join
    • Customer ticket creation via Microsoft Teams

      Hi all, I'm looking to see if someone could point me in the right direction. I'd love to make it so my customers/ end users can make tickets, see responses and respond within microsoft teams. As Admin and an Agent i've installed the zoho assist app within
    • Is there a way to update all the start and end dates of tasks of a project after a calendar change?

      Hi! Here's my situation. I've built a complete project planning. All its tasks have start dates and due dates. After completing the planning, I've realized that the project calendar was not the right one. So I changed the project calendar. I now have
    • How to update task start date when project start date changes?

      Hi there, When the start date of a project changes, it's important to update the start dates of the tasks associated with that project to reflect the new timeline. Is there a way to shift the start date of all project tasks when the start date of a project
    • Issue with Picklist Dropdown Not Opening on Mobile

      Hello I am experiencing an issue with picklist values on mobile. While the arrow is visible, the dropdown to scroll through the available values often does not open. This issue occurs sporadically, it has worked occasionally, but it is very rare and quite
    • using the client script based on the look up filed i wnat to fetch the record details like service number , service rate

      based on selected service look up field iwant to fetch the service serial number in the serice form how i achive using client script also how i get the current date in the date field in the on load of the form
    • Zoho Books/Square integration, using 2 Square 'locations' with new Books 'locations'?

      Hello! I saw some old threads about this but wasn't sure if there were any updates. Is there a way to integrate the Square locations feature with the Books locations feature? As in, transactions from separate Books locations go to separate Square locations
    • Add zoho calendar to google calendar

      Hi I keep seeing instructions on how to sync Zoho CRM calendar with google calendar but no instructions on how to view Zoho calendar in my google calendar.
    • Zoho Commerce - How To Change Blog Published Date and Author

      Hi Commerce Team, I'm discussing a project with a client who wants to move from Woo Commerce / Wordpress to Zoho Commerce. They have around 620 blog posts which will need to be migrated. I am now aware of the blog import feature and I have run some tests.
    • Add RTL and Hebrew Support for Candidate Portal (and Other Zoho Recruit Portals)

      Dear Zoho Recruit Team, I hope you're doing well. We would like to request the ability to set the Candidate Portal to be Right-to-Left (RTL) and in Hebrew, similar to the existing functionality for the Career Site. Currently, when we set the Career Site
    • Does zoho inventory need Enterprise or Premium subsrciption to make Widgets.

      We have Zoho One Enterprise and yet we can't create widgets on inventory.
    • Writing by Hand in "Write" Notes

      Hi there! I just downloaded this app a few moments ago, and I was wondering if there was a way to write things by hand in "Write" mode instead of just typing in the keyboard. It would make things a bit more efficient for me in this moment. Thanks!
    • Remove the “One Migration Per User” Limitation in Zoho WorkDrive

      Hi Zoho WorkDrive Team, Hope you are doing well. We would like to raise a critical feature request regarding the Google Drive → Zoho WorkDrive migration process. Current Limitation: Zoho WorkDrive currently enforces a hard limitation: A Zoho WorkDrive
    • How do I add todays date to merge field

      I don't see any selection of todays date when creating a letter.  Surely the date option of printing is standard? John
    • Handling Agent Transfer from Marketing Automation Journey to SalesIQ WhatsApp

      We are currently using Marketing Automation for WhatsApp marketing, and the features are great so far We have a scenario where, during a campaign or journey, we give customers an option to chat with our sales team. For this, we are using SalesIQ WhatsApp
    • Comment to DM Automation

      Comment to DM automation feature in Zoho Marketing Automation, similar to what tools like ManyChat offer. Use case: When a user comments on a social media post (Instagram / Facebook), the system should automatically: Send a private DM to the user Capture
    • ZMA shows as already connected to Zoho CRM, but integration not working

      When I try to connect ZMA with Zoho CRM, it shows as already connected, but the integration doesn’t seem to be working. I’ve attached the screen recording for reference.
    • Crossbeam

      Does anyone use Crossbeam with their Zoho CRM? I'm looking for a way to import Crossbeam partner leads into Zoho CRM. If so: - What's your experience been like? - Are you able to automatically import Crossbeam leads > Zoho CRM? How? - What doesn't work
    • Automatic Email Alerts for Errors in Zoho Creator Logs

      Hello, We would like to request a feature enhancement in Zoho Creator regarding error notifications. Currently, Zoho Creator allows users to view logs and errors for each application by navigating to Zoho Creator > Operations > Logs. However, there is
    • Can you default reports/charts to report the current week?

      Our data table maintains two years of data. Management wants certain report to automatically filter the report to the latest calendar week. I know I can do this manually with filters but I want the report to automatically default to the latest calendar
    • How can I check all announce?

      Hiii, May I ask how can I check all the announce based on broadcast date instead of reply date based So that I will not will miss out any new function
    • Recurring Automated Reminders

      Hi, The reminders feature in Zoho Books is a really helpful feature to automate reminders for invoices. However, currently we can set reminders based on number of days before/after the invoice date. It would be really helpful if a recurring reminder feature
    • Next Page