Hello Everyone,
Welcome back to yet another post in the Kaizen Series!
As you already may know, for the Kaizen #200 milestone, we asked for your feedback and many of you suggested topics for us to discuss. We have been writing on these topics over the past few weeks. One of the feedbacks asked us to cover "more on ZDK CLI". In this post, we will discuss building an Event Management System in Zoho CRM Using
ZDK CLI.
Consider the case of Zenith, a Zoho CRM partner who is also partner for Zoho's competing products. Zenith is hosting a conference in which their representatives are inviting speakers from Zoho and also other competing products. The attendees of the conference will be either external attendees or leads or contacts of Zenith. For this purpose existing meetings module of Zoho CRM (previously called Events) can not be used as it is not a good fit for this case. Custom modules and fields are required for this. In this post, we’ll discuss how to create a Event Management System that is complimentary to Zoho CRM using ZDK CLI.
Why Use ZDK CLI?
ZDK CLI allows developers to:
- Create and edit CRM metadata (modules, fields, roles, profiles, and widgets)
- Define relationships between modules (lookups, multi-select lookups)
- Push and sync metadata changes to sandbox.
- Resolve conflicts when multiple users work on the same metadata.
This makes it ideal for building reusable CRM systems such as event management.
Initial Setup
As the initial setup, initialize the ZDK CLI project directory using zdk init command and create a new ZDK Project folder "Zenith".
Then, login to the sandbox environment for Zenith using zdk auth:login command.
When you execute zdk auth:login, you can either select any org that is already signed in or select NEW LOGIN to visit the login page and select the sandbox org you will be working on.
After logging in to Zoho select the sandbox environment and give required permissions.

For the current beta release, ZDK CLI is exclusively available for Sandbox environment and is not operational in Production environments.
You will be redirected to the terminal after successful login and you can start working on ZDK CLI.
Change the api_version to 8 in zdk-project.json file.
Step 1: Define the Modules
For an event management use case, we will need the following custom modules:
- Conference – Stores details of each event.
- Attendees – Tracks participants, whether leads, contacts, or external.
- ConferenceAttendees (Linking Module, not created) – Connects conferences and attendees with registration status.
- Venues – Captures details of event locations.
- Speakers – Stores details of invited speakers.
This has been visualized in the data model below.
To create a module, use the command
This creates the json file for module metadata : Conference.modules-meta.json in the path Zenith/crm/meta/modules/Conference
Conference.modules-meta.json content
{ "singular_label": "Conference", "plural_label": "Conferences", "api_name": "Conference", "profiles": [ { "api_name": "Administrator" } ], "display_field": { "api_name": "Conferences" }, "show_as_tab": true } |
Similarly create modules Attendees , Venues, and Speakers modules
Step 2: Customize Fields
To create a field, use the command
Conference module:
Conference modules's fields are:
- Attendees (multiselectlookup to Attendee module)
- Speakers (multiselectlookup to Speakers module)
- Venue (lookup to Venue module)
- Date (datetime)
- Duration(double)
- Description (textarea)
- Status (picklist: Planned, Ongoing, Completed)
Attendees field
Let us check how to create the field attendees of type multi-select lookup (to Attendee module)
The json file Attendees.fields-meta.json created in the path Zenith/crm/meta/modules/Conference/fields will look like this
To provide dependent details for the multi select lookup, add the multiselectlookup json object to the Attendees.fields-meta.json file as below:
{ "field_label": "Attendees", "display_name": "Attendees", "api_name": "Attendees", "type": "used", "data_type": "multiselectlookup", "multiselectlookup": { "connected_details": { "module": { "api_name": "Attendee" }, "field": { "field_label": "AttendingConference" } }, "linking_details": { "module": { "plural_label": "Conferences_X_attendees" } } } } |
Speakers (multi-select lookup to Speakers module)
Similar to Attendees field, create Speakers field and modify the json file Speaker.fields-meta.json created in the path Zenith/crm/meta/modules/Conference/fields:
{ "field_label": "Speaker", "display_name": "Speakers", "api_name": "Speakers", "type": "used", "data_type": "multiselectlookup", "multiselectlookup": { "connected_details": { "module": { "api_name": "Speaker" }, "field": { "field_label": "AttendingConference" } }, "linking_details": { "module": { "plural_label": "Speakers_X_attendees" } } } } |
Venue (lookup field to Venue module)
Similarly, create the Venue field with type as "lookup" The json file Venue.fields-meta.json created in the path Zenith/crm/meta/modules/Conference/fields will look like this
To provide dependent details for the lookup, add the lookup json object to the json as below.
{ "field_label": "Venue", "display_name": "Venue", "api_name": "Venue", "type": "used", "data_type": "lookup" "lookup": { "display_label": "Venue", "api_name": "Venue", "module": { "api_name": "Venue" } } }
|
Description (textarea)
After create a textarea field Description using zdk meta:create fields command, add textarea json object to the field meta json file as below :
{ "field_label": "Description", "display_name": "Description", "api_name": "Description", "type": "used", "data_type": "textarea", "textarea": { "type": "rich_text" } }
|
The possible values for text area are small, large and rich_text.
Status (picklist)
After create a picklist field Status using zdk meta:create fields command, add pick_list_values json array to the field meta json file as below:
{ "field_label": "Status", "display_name": "Status", "api_name": "Status", "type": "used", "data_type": "picklist", "pick_list_values": [ { "display_value": "Planned", "actual_value": "Planned" }, { "display_value": "Ongoing", "actual_value": "Ongoing" }, { "display_value": "Completed", "actual_value": "Completed" } ] } |
Date and duration fields of type datetime and double does not require any edits to the created meta.json file.
Attendees Module
Similarly, add fields for attendees modules
- Phone (phone)
- Company (text)
- EventsAttended (multi-select lookup to Conference module)
- Attendee Type (picklist with options Lead, Contact, External)
- Leads (lookup to Lead module)
- Contacts (lookup to Contact module
Venue Module
- Location (text)
- Capacity (integer)
- Contact erson (text)
- ContactNumber(phone)
- Description(textarea)
Speakers Module
- Phone (phone)
- Company (text)
- SpeakerStatus (picklist with options Confirmed, Pending, Canceled)
Step 3: Create a Custom Role
To create a field, use the command
This ensures event managers have the right access without interfering with other CRM operations.
Pushing changes to the sandbox environment
Once all changes are done execute
zdk org:push and zdk org:push result --{jobId} command to deploy the changes to the sandbox environment. Once the changes are verified in your sandbox environment you can deploy it to the production environment.

You can extract this
metadata zip file, that is created using
zdk org:export command to your own ZDK project directory and try pushing the changes to your sandbox environment.
Building the Event Management System for "Zenith" illustrates the core strength of ZDK CLI. It brings software engineering best practices to Zoho CRM customization. By defining modules/fields/roles as json files directly or creating them using the command, the source truth of the metadata is available in local system. The same can be tracked via version control systems like GIT for better collaboration among the team.
Recent Topics
STOCK history in zohosheets
is it possible to get historical stock value using stock function in zoho sheets? i could not see from and to period in the helper document.
Auto sync Photo storage
Hello I am new to Zoho Workdrive and was wondering if the is a way of automatically syncing photos on my Android phone to my workdrive as want to move away from Google? Thanks
Agent password reset
Hi Zoho support, I would like to ask if there is a way the admin can reset a password of an agent? Regards
Can receive but not send messages in Zoho Mail
Hello! I was able to configure my email client successfully in that I can receive messages just fine. However, when I send messages out, they seem to go out fine (I don't receive any errors or anything), but the recipient does NOT receive those messages.
Mail is sent twice!
Been using Zoho for a while now. Installed Zoho for someone else and some weird things are happening. Mails are being sent twice. He is using Thunderbird as an email client. I already read about email being duplicated in the sent folder. But in my case
Can't login IMAP suddenly
Since this evening I'm getting the error: You are yet to enable IMAP for your account. Please contact your administrator... IMAP always been enabled in my account and was workign fine for the past 7 years. Already tried turning IMAP off and on again.
Sending of username did not succeed: Mail server pop.zoho.com responded: User already specified
I am having issues receiving emails from Zoho in Thunderbird. I am getting the above error. The first error tells me Authentication failed, and prompts me to enter in my password. Then I get the above error. I can receive emails when I log in online to
Bug tracking
Hi, does anyone know how to track errors during picking or packing? This way I can keep track and see how to improve and prevent errors in this area.
Migration of corporate mail environment from Yandex 360 to Zoho mail
I have to migrate a corporate mail environment with an existing domain from Yandex 360 to Zoho mail. It is vital to migrate all users with all the data. I have read the article on this topic using MacMister Email Backup Software just now and have some
I'm unable to send mail pthrough Zoho SMTP programmatically
This has been working for years, but today it's been offline all day long. I see nothing anywhere on your site about this. I'm not the only one experiencing this. Downdetector has a spike of reports today
Can no longer send email via Django site
This was working fine as of 11/7/25. Now I am unable to send user verification emails from a Django site on a AWS lightsail sever. When a user attempts to register the following error occurs. I have also attempted to send a test email via the shell and
unable to send email but able to receive email
my email address is info@securityforceservices.ca
Login to server failing
When trying to retrieve my mail, I am getting this error message -- Login to server pop.zoho.com with username (my email address) failed. It gives me the option to retry, enter password, or cancel. Then I get this message -- Sending of username did not
Configuration failed: 200 response not received for POST request.
Hello, I am trying to set up a webhook to connect with an Salesforce but I receive the following error from Zoho: Configuration failed: 200 response not received for POST request I have tried testing it on webhook.site as well and receive the same error
Zoho Migration Assistant not working
Hello, I am trying to use you Migration assistant to migrate emails from Rediff to Zoho. I am stuck in the first step. After downloading the migration tool, I copied the link to verify user credentials, however, after pasting the link in the browser,
Paid Support Plans with Automated Billing
We (like many others, I'm sure) are designing or have paid support plans. Our design involves a given number of support hours in each plan. Here are my questions: 1) Are there any plans to add time-based plans in the Zoho Desk Support Plans feature? The
Scheduled Reports - Do not send empty report
Hello, We are intensively using reports in the CRM, especially for sales managers. When data is empty, they still receive an email. Can you add an option to avoid sending the report when data is empty?
Contacts Missing — PeopleSync/Zoho Mail
English: In our company we use ManageEngine Mobile Device Manager (MDM), Free edition, to manage corporate mobile devices. Our usage policy does not allow personal Google accounts on these devices; therefore, Google account sync is blocked through MDM.
Best way to integrate Zoho with mobile app for managing customer requests with real-time notifications?
Hello, I'm building a solution for a travel company where customers submit requests through a website, and the sales team manages these requests through a mobile app. The Requirement: Customers fill a form on the website (name, email, number of children,
Kaizen #57 - Mass Update API in Zoho CRM
Hello everyone! Welcome back to yet another post in the Kaizen series. This week, we will discuss the Mass Update API in Zoho CRM. In this post, we will cover the following: 1. Introduction 2. Mass Update Records API 3. Schedule Update and Get Status
Getting Attachments in Zoho Desk via API
Is there a way to get attachments into Zoho Desk via an API? We have a process by which a zoho survey gets sent to the user as a link in a notification. The survey has several upload fields where they can upload pdf documents. I've created
Multiple currencies - doesn’t seem to work for site visitors / customers
I am trying to understand how the multiple currency feature works from the perspective of the website visitor who is shopping on my Zoho Commerce site. My site’s base currency is US Dollars (USD) but my store is for customers in Costa Rica and I would
Pincode based Product Restriction
we have different types of products. 1) Very bulky items like plywood. 2) Too delicate items like glass These type of products we want to sell to local customers. Other products we want to supply all over India. There should be an option to restrict products
Can multiple agents be assigned to one ticket on purpose?
Is it possible to assign one ticket to two or more agents at a time? I would like the option to have multiple people working on one ticket so that the same ticket is viewable for those agents on their list of pending tickets. Is something like this currently
Related Lists filter
I have Contacts showing in our Accounts module. I customized the Contacts module with an Employment Status field, with the following picklist options: "Primary Contact", "Secondary Contact", "Active Staff(not a main contact)", and "No longer employed".
Standalone custom function not generating logs
Why dont't standalone custom functions generate logs when the're called from another function? I have some functions (workflow, buttons and blueprint) that have common parts, so I put that part in a standalone function which is called from the others.
Add "Reset MFA" Option for Zoho Creator Client Portal Users
Hello Zoho Creator Team, We hope you are doing well. We would like to request an important enhancement related to Multi-Factor Authentication (MFA) for client portal users in Zoho Creator. Currently, Creator allows us to enforce MFA for portal users,
Support Bots and Automations in External Channels
Hello Zoho Cliq Team, How are you? We actively use Zoho Cliq for collaboration, including with our external developers. For this purpose, external channels are a key tool since they work seamlessly within the same interface as all of our other channels
Urgent Security Feature Request – Add MFA to Zoho Projects Client Portal Hello Zoho Projects Team,
Hello Zoho Projects Team, We hope you are doing well. We would like to submit an urgent security enhancement request regarding the Zoho Projects Client Portal. At this time, as far as we are aware, there is no Multi-Factor Authentication (MFA) available
Creator HTML page refresh
Hi, I have added around 5 different html snippets in single creator page. I understand, I can refresh the entire page from page script using Navigational URLs https://help.zoho.com/portal/en/kb/creator/developer-guide/others/url-patterns/articles/navigational-urls
Zoho Desk - Custom Module Related List Columns on Tickets
I have a custom module in Zoho Desk called Asana Tasks, each task has a lookup to a Ticket. On the Ticket I want to see the columns of the Asana Tasks in the related list . Is there a way to do this? Right now it just has the name of the record and I
What is your opinion of the new UI?
Hi Everyone, I would like to see what everyone thinks of the new Zoho One Dashboard. I don't get it, but perhaps I'm missing something. What are your thoughts?
What are the OAuth scopes needed to access the Zoho MCP server?
I think I'm authenticating with the MCP server endpoint successfully using a bearer token but I can't successfully initialize an MCP session. I'm using the official MCP Python sdk (https://github.com/modelcontextprotocol/python-sdk). I get as far as here
cant upload images in signature- urgent help needed. ta!
HI, I have been trying to insert the company logo in the signature. i have tried it several times since yesterday, the longest I waited was 1 hour and 12 minutes for the pop up window to upload a 180 KB .jpg file. what am i doing wrong.. an urgent reply will be appreciated, Ta
Account blocked for IMAP use
Hello, My email client (Evolution) can't sync mail anymore. It gives the error: "Your account is temporarily blocked for IMAP use. This may happen if you exceed the maximum number of simultaneous IMAP connections allowed. Kindly try again after some time."
Is SMTP included in the free plan?
My client has a Zoho Mail Free 14 day trial that ends tomorrow. She has set up a domain email address with SMTP on a third party app and is wondering if it will continue working once her plan downgrades to the free forever plan. Thanks
Zoho mail issue.
I have verified my domain ohhoexpress.online by adding necessary TXT and MX records. But when I am sending email to any external email id, it is showing as zohomail.com. Also while I am sending mail to internal mail id, it is saying user not found whereas
My email is blocked from sending
I get this message when I try to send any message .. > Unable to send message, Reason 554 5.1.8 Email Outgoing Blocked We have urgent emails to send and the issue continues to persist from yesterday. Please help us with this issue as soon as possibl
[WEBINAR] Smooth year-end closure with Zoho Books (KENYA)
Hello there, This webinar is for all Kenyan businesses looking to wrap up their financial year smoothly! Join our free session to learn how Zoho Books can simplify your year-end process. What to expect from this webinar: - All the latest updates in Zoho
cannot recieve or send emails
we are not recieving or cannot send emails.Shows sysytem error
Next Page