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
Warranty Service and Repair in Zoho FSM
Hi There, We are a retail store that sells products and also performs installations and repairs. Our field technicians handle this work. Some repairs are covered by manufacturers, who reimburse us for both parts and labour. In these cases, we perform
Zoho Sheet for Desktop
Does Zoho plans to develop a Desktop version of Sheet that installs on the computer like was done with Writer?
WhatsApp phone number migration
Hi @Gowri V and @Pheranda Nongpiur, Thanks for implementing the promised enhancements to the integration between Zoho CRM and WhatsApp. The previous discussion has been locked, so I'm opening this new one. I am copying below a specific
WebDAV support
I need WebDAV support so that I can upload/download (and modify) documents from my local file system. Is anything planned in his direction?
SPF: HELO does not publish an SPF Record
I am using Zoho mail. Completed all of the required prerequisites from the dashboard to avoid any issues with mail delivery. But when checking on mail-tester.com getting the following error. Can anyone help me solve this?
How do I create an update to the Cost Price from landed costs?
Hi fellow Zoho Inventory battlers, I am new to Zoho inventory and was completely baffled to find that the cost price of products does not update when a new purchase order is received. The cost price is just made up numbers I start with when the product
Price Managment
I have been in discussions with Zoho for some time and not getting what I need. Maybe someone can help explain the logic behind this for me as I fail to understand. When creating an item, you input a sales rate and purchase rate. These rates are just
Regarding the integration of Apollo.io with Zoho crm.
I have been seeing for the last 3 months that your Apollo.io beta version is available in Zoho Flow, and this application has not gone live yet. We requested this 2 months ago, but you guys said that 'we are working on it,' and when we search on Google
Actual vs Minimum
Hi all, I am sure I am not the only one having this need. We are implementing billing on a 30-minute increment, with a minimum of 30 minutes per ticket. My question is, is there a way to create a formula or function to track both the minimum bill vs the
Generate leads from instagram
hello i have question. If connect instagram using zoho social, it is possible to get lead from instagram? example if someone send me direct message or comment on my post and then they generate to lead
Kaizen #234 - Automating Deal Handoff with Zia Assistant API, Workflow, Deluge, and Widget in Zoho CRM
Hello all! Welcome back to a fresh Kaizen week. In this post, we will explore how to automate the deal handoff process in Zoho CRM using Zia Assistant API + Workflow + Deluge + Widgets. Here’s how the final output looks when a deal is reassigned 1. Deal
How do you print a refund check to customer?
Maybe this is a dumb question, but how does anyone print a refund check to a customer? We cant find anywhere to either just print a check and pick a customer, or where to do so from a credit note.
Ability to assign Invoice Ownership through Deluge in FSM
Hi, As part of our process, when a service appointment is completed, we automated the creation of the invoice based on a specific business logic using Deluge. When we do that, the "Owner" of the invoice in Zoho FSM is defaulted to the SuperAdmin. This
Enhancement to ICR’s field prompting: Preferred data extraction using advanced field prompting
Dear Customers, We hope you’re well A quick background Intelligent Character Recognition (ICR) comes as part of Zia’s optical recognition capability called Zia Vision. When we introduced it last April, the data extraction was training-based and was applicable
See a list of all records enrolled in a cadence?
I am looking for a way to see a list of all leads or contact currently enrolled in a cadence. I do not see any way to do this through the cadence UI.
Limitation in chart of accounts
There is a limitation of 4000 accounts in chart of accounts Zoho needs to remove this limit
How do I change the account bank charges are charged to?
I want bank charges charged to my Credit Card Fees account. Is there a way to do this?
Real signature in Zoho Expense PDF report ?
Hello ! Is there a way to put a real signature on the signature line when a PDF report is generated in Zoho Expense? Through Zoho Sign or another way? Can't seem to make it work.
Copy paste settings
Hello all i have 2 organizations running in ZOHO books in one organization i have customised Tax rates, codes and customized templates instead of manually doing again in org 2 can i have some shortcut to copy paste or export and import??
Custom TDS on Vendor Credits via API
Hi, We are using Zoho Books APIs for posting Bills and vendor credits. We are unable to post custom TDS amount posting vendor credits. Can you please share the API spec and Payload that need to be sent for Custom TDS for Vendor Credits.
"Unlink" Advance from Bill without Deleting the Payment Record
I am writing to highlight a significant workflow issue in Zoho Books (India Edition) regarding Vendor Advances and Bills. The Scenario: I recorded an Advance Payment to a vendor. I matched/reconciled this payment in the Banking module. I received a Bill
Advance Payment Record Removed When Deleting Applied Credit from Bill
Hello, So while working with vendor advance payments, I noticed that removing the applied credit from a bill also removes the corresponding entry from the Payments Made section. What I did : Recorded an advance payment to a vendor through Payments Made.
What is the best way to convert MSG file to Word format?
The best way to convert MSG files to Word format is by using a reliable and professional tool Aryson MSG file Converter. Manual methods are often time-consuming and may not preserve email formatting, attachments, or metadata accurately. In contrast, Aryson
Zoho Projects : Task should auto-update to 'In Progress' if timer started
Namaskaram. Right now, if a Task's timer is started, the Task stays in 'Not Started' status. One has to manually update it to 'In Progress'. From a #uxdesign standpoint, it is an unnecessarily two step process to start working on a task. It would be better that, if I start the timer on a task, it should automatically change to 'In Progress' status. Crafted with ❤️ Zoho Gurus | Zoho One Practice Team @ CubeYogi Zoho Authorised Partner | 7+ Yrs | 200+ Projects | 100+ Customers
Invoice template with sales tax totals
Hi everyone, I am trying to edit my invoice template so that only the total sales tax collected for my tax group shows up. Right now, under by sub total, each individual tax shows up and that takes up a lot of unnessary space, so I just want the one
Zoho Delayed Posting & Loss of Article Thumbnails on BlueSky
Hello! I am wondering if anyone else has had the either of the following issues when posting to socials via Zoho and if there is a fix? 1. Post says it is scheduled or it is live when sent off via Zoho but it doesn't show up on socials till some time
Connection Not Secure (Certificate Mismatch) Error
Hi, Just a fyi, when you go to https://bigin.zohocloud.ca/bigin/Home you get a "Your Connection Is Not private" error. (Certificate mismatch to domain.) I get to that page after I have signed up and signed in as a customer and select the Access Bigin
Recording the Investment
Hello, - One Investor Invested to our company, So how do we record investment which we received in our bank in the Zoho books ? - How do we record if we provide shares to the investor in the Zoho books? Thanks
Client and Vendor portal at the same time
We have companies that serve both as clients and vendors and they are linked. However, we have a problem giving them access to the vendor/client portal. If they accept the invitation from the client portal, when we try to invite them to the vendor portal
Integrate Multiple ZohoBooks organization with zoho projects
We have successfully connected our Zoho Books with Zoho Projects for synronizing timesheet data. Our Business specialty is, that the staff of the Main company (A) is working on several projects, but the Clients are sometimes contracted and paying to a
Ways to calculate the difference form two years or months
Hi to everyone I have this request: I need to show the difference or variation from two periods (years or months) whether using a Pivot View or a graph, in this is case is better in a Pivot view. In the pivot view I will have the amount or results from
Career site URL - Suggestion to modify URL of non-english job posting
Hi, I would like to suggest making a few modification to career sites that are not in english. Currently, the URL are a mix of different languages and are very long. It makes for very unprofessional looking URLs... Here is an example of one of our URL
Introducing Contract Settings & Backdated Contracts in Zoho Contracts
We are rolling out updates that give you more control over how contracts are created and managed in Zoho Contracts. From defining default workflows with Contract Settings to aligning agreements with real timelines using Backdated Contracts, these enhancements
Celebrating our customers on International Client's Day
Hi everyone, Every customer is part of our Zoho Desk family, and we wouldn’t want to miss celebrating you on this special day. This International Client's Day, we’d like to take a moment to appreciate every customer who has helped us grow and build meaningful
Faster Ticket Response with use of Snippets in comments
Hello everyone, Responding to tickets often involves repeating the same messages, whether it is sharing updates with customers or leaving notes for internal collaboration. To make this easier and more consistent, we are allowing agents to use snippets
Improving Zoho Creator's email deliverability
Hi all, We're pleased to announce updates to email handling in Zoho Creator to improve the deliverability of the emails sent from the Creator platform. These updates have been designed keeping in mind the fact that emails from domains with strong sender
What's New in Zoho Billing | February 2026
February brings a powerful set of updates to Zoho Billing, from smarter subscription management and flexible payment options to better reporting and more control over your hosted pages. Here's everything that's new this February. Create Subscriptions
Reassign Partially Saved Entries
Hi, I would like to be able to go to Partially Saved Entries and like the option to delete them I would like the option to multi-select and be able to reassign them to another user to complete (Such as when a user has left the company). Thanks Dan
Can we rely on order of returned ids when inserting multiple records?
Hello! API https://www.zoho.com/crm/developer/docs/api/v8/insert-records.html does not mention that the response array will match the input array*, keeping this important information implicit and someone might have doubts to rely on it. (*the response
Displaying only unread tickets in ticket view
Hello, I was wondering if someone might be able to help me with this one. We use filters to display our ticket list, typically using a saved filter which displays the tickets which are overdue or due today. What I'd really like is another filter that
Next Page