Hello everyone!
Welcome back to another week of Kaizen. In last week's 
post in the 
Kaizen series, we discussed how subforms work in Zoho CRM and how to manipulate subform data using Zoho CRM APIs.
In this post, we will discuss how to manipulate a multi-select lookup fields using Zoho CRM APIs.
Multi-select lookup field
The Multi-Select Lookup Field enables you to establish a many-to-many relationship between two different modules in CRM. It allows you to associate multiple records with each other, from two different modules. 
These associations are stored in an individual module called "
Linking Module". Consider there are two modules, 
Employees and 
Skills. The Employees module contains details regarding Zylker's workforce, and the Skills module contains details regarding various skills like Social Media Marketing and Content Marketing.
We want to associate multiple skills to an employee. So, a multi-select lookup can be created in the Employees module. When doing so, similar multi-select lookup field will be automatically created in the Skills module, along with the EmpXSkills linking module by Zoho CRM. The underlying data model is described in the below image.
 The above chart shows the data model representation when you create a multi-select lookup field in a module. Here, there are two lookup fields—one pointing to the Employees module and the other pointing to the Skills module.
The above chart shows the data model representation when you create a multi-select lookup field in a module. Here, there are two lookup fields—one pointing to the Employees module and the other pointing to the Skills module. In the linking module, two lookup fields (lookup fields with api names - Employees and Skills) will be created. The lookup fields, one pointing to Employees and the other pointing to Skills from the linking module, establish a connection between the linking module and its associated module.
How to associate an employee's skills while creating an Employee record through the Insert Records API
API names you need before invoking the API
- The API name of the multi-select lookup field in the modules you want to insert data.
- API names of the lookup fields in the linking module. Eg: here the API Name of the linking module is "EmpXSkills" and the corresponding lookup field api names are "Employees" & "Skills". You can use the Fields Metadata API for Employees and Skills to get these details.
 
Step 1
Know the API name of the multi-select lookup field in the module (In our case, Skills is the multi-select lookup field in the Employees module)
To know the API names of the multi-select lookup fields, make a 
GET - Fields Metadata API call. Among all the Employee's fields, multi-select lookup field can be identified by the json key 
data_type with the value 
multiselectlookup. The corresponding connected module can be found from the json connected_module. Below is the API call & response for such a multi-select lookup field.
Request URL : {api-domain}/crm/v6/settings/fields?module=Employees
Request Method: GET
Sample Response: 
The above highlighted keys are the details of the Multi select lookup field. The corresponding keys are explained below:
| "multiselectlookup": {                 "display_label": "Skills",   //Display label of the MxN field in the Employees module                 "linking_module": {                     "api_name": "EmpXSkills", //API name of the linking module                     "id": "5725767000002166520"                 ...                 "lookup_apiname": "Employees", //API name of the Employee lookup field in the linking module                 "connected_module": {                     "api_name": "Skills", //API name of the connected module                     "id": "5725767000002165263"                 },                 "api_name": "Skills_In_Related_List", //API of the related list of the connected module Skills in the Employees module.                 "connectedfield_apiname": "Employees", //API Name of the multi-select lookup field in the connected module (Skills)                "connectedlookup_apiname": "Skills", //API name of the Skills module lookup field in the linking module.                 "id": "5725767000002166655" //Related List ID             },                 ... | 
Step 2
Using the api_name of the linking module, make a 
GET Fields metadata API call to get the list of 
fields (along with their 
api_name) present in it. It lists all fields of the linking module in the response. 
Sample Request and Response
Search for the "data_type": "lookup" in the response. The lookup fields represent the connected modules in association with the linking module.
For example, in our case, the response will have two lookup fields. One of the lookup fields (with api name Employees) points to the Employees module, and the other one (with api name Skills) points to the Skills module. 
Step 3
To associate records via the MxN field, you need to know the 
IDs of the records in the Skills module. Here is the input body to insert the skills in the 
Employee module with the multi-select lookup field 
Skills. 
Here is the input body to insert a new Employee record and associate a Skills record to it using the MxN field.
Request URL: {{api-domain}}/crm/v6/Employees
Request Method: POST
Sample Input:
| {     "data": [         {             "Name": "Patricia",             "Position": "Marketing Specialist",             "Year_of_Experience": 5,             "Skills": [ //API name of the multi-select lookup field in Employee module                 {                     "Skills": { //API Name of the lookup field pointing to the Skills module in the linking module                         "name": "Marketing",                         "id": "5725767000002149427" //Record ID in the Skills module                      }                 },                 {                     "Skills": {                         "name": "Social Media Marketing",                         "id": "5725767000002149476"                      }                 }             ]         }     ] }
 | 
How to disassociate an employee & skills relation while updating an Employee record through the Update Records API  
Request URL: {{api-domain}}/crm/v6/Employees
Request Method: PUT
Sample Input:
| 
 {     "data": [         {             "id": "7890710000097291",             "Name": "Patricia",             "Position": "Marketing Specialist",             "Year_of_Experience": 5,             "Skills": [                 {                     "_delete": null, //This association in the linking module will be deleted                     "id": "5725767000008126002" //Record created in the linking module                 }             ]         }     ] }
 | 
Sending _delete:null will cause delinking of the association.
How to associate an employee's skills via "Linking Module"
You can associate the relationship between Employees and Skills module by creating records in the Linking module (EmpXSkills). Use the API names for the corresponding lookup fields, Employee (API Name: Employees) and Skills (API Name: Skills) in the input body.
Request URL: {{api-domain}}/crm/v6/EmpXSkills
Request Method: POST
Sample Input
| {    "data": [         {             "Name": "Patricia",             "Employees": {                  "id": "5725767000002161001" //unique record ID in the Employees module. GET your ID here            },              "Skills": {                  "id": "5725767000002149476" //unique record ID in the Skills module. GET your ID here            }         }     ] } | 
The id in the above response is the Primary Key ID of an Employee-Skill association record in the linking module. This ID can later be used to do specific operations like association update or deletion via API.
How to disassociate an employee & skills relationship via "Linking Module"
Use the Delete Records API to delete the record which corresponds to the specific relation between 
Employee and 
Skills module in the 
EmpXSkills module. You can get the record ID for the specific association using the 
Get Records API for the linking module. 
Use the Delete Record API to delete the specific record, thereby deleting the specific association between the Employee and Skills record. Please note that only the association is removed, and not the individual records. 
Sample Request and Response

When to use create/update operation in Employees/EmpXSkills module?
Use "Employees" module: When you want to create/update records in the Employees module, and associate the record with a Skills record in a single API call.
Use "EmpXSkills" module: When you want to associate/disassociate the relationship between existing Employees and Skills records. 
Retrieve data via COQL API and Bulk Read API
There may be situations where you need to fetch records based upon certain conditions.
For example, Zylker's HR team wants to retrieve the list of employees having more than 4 years of experience and are experts in Social media marketing. In this case, they can use Zoho CRM's COQL API or Bulk Read API. Let's see how to achieve this. 
Retrieving MxN data via COQL API
We know that both the Employees and Skills modules' association data is maintained in the linking module. In order to retrieve data from the linking module, query using the API name of the lookup fields in the linking module.
Request URL: {{api-domain}}/crm/v6/coql
Request Method: POST
Sample Input:
| 
 {
     "select_query" : "select Employees.Name as employee_name, Employees.Year_of_Experience as employee_experience, Skills.Name as skill_name from EmpXSkills where Employees.Year_of_Experience > 4 and Skills.Name like '%Social%'" }
 
 | 
From the SQL perspective, above COQL can be interpreted as
| select emp.Name as employee_name, emp.Year_of_Experience as employee_experience, skill.Name as skill_name from EmpXSkills left join Employees as emp on EmpXSkills.Employees = emp.id left join Skills as ski on EmpXSkills.Skills = ski.id where emp.Year_of_Experience > 4 and ski.Name like '%Social%' | 
Sample Response
Retrieving MxN data via Bulk Read API
Bulk Read API allows you to fetch a large set of data i.e., you can fetch a maximum of 200,000 records in a single API call. 
To export linking module records, use its API name.
Request Method: POST
Sample input to export linking module's records:
| {     "callback": {         "method": "post"     },     "query": {         "module": {             "api_name": "EmpXSkills" //API name of the linking module         },         "file_type": "csv"     } } | 
Export linking module records that meet the specified criteria
To export linking module's records based on the given criteria above (similar to the COQL API).
| {     "callback": {         "method": "post"     },     "query": {         "module": {             "api_name": "EmpXSkills"         },         "fields": [             "Employees.Name",             "Employees.Year_of_Experience",             "Skills.Name"         ],         "criteria": {             "group": [                 {                     "field": {                         "api_name": "Employees.Year_of_Experience"                      },                     "comparator": "greater_than",                     "value": "4"                 },                 {                     "field": {                         "api_name": "Skills.Name"                     },                     "comparator": "contains",                     "value": "Social"                 }             ],             "group_operator": "AND"         }     } }
 | 
As the API is an asynchronous API, the response will not be available instantly; the bulk read job is scheduled, and the status can be checked. Once the job is completed, you will be notified in the callback URL. The records are available in a downloadable CSV file or ICS file (for events). See the 
Bulk Read API document to know how to view the status of the scheduled job and download the file, along with more sample requests and responses.
We trust that this post meets your needs and is helpful. Let us know your thoughts in the comment section or reach out to us at support@zohocrm.com
Stay tuned for more insights in our upcoming Kaizen posts!
------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------
Cheers!
Additional Reading:
Kaizen Posts:
- Recent Topics
- Unable to confirm Super Admin assignment — confirmation button not working- I’m trying to change the roles within my organization. I am currently a super admin and would like to add another user as a super admin. When I attempt to confirm the action, a screen appears asking for my password to verify my identity. However, when 
- Delegates should be able to delete expenses- I understand the data integrity of this request. It would be nice if there was a toggle switch in the Policy setting that would allow a delegate to delete expenses from their managers account. Some managers here never touch their expense reports, and 
- Let's Talk Recruit: Meet Zia your all-in-one AI assistant (Part-2)- Welcome back to Let’s Talk Recruit series. In Part 1, we introduced Zia and how AI is reshaping the way recruiters work. This time, we’re taking a closer look at how far Zia has come and how each update continues to simplify your everyday tasks. When 
- Function #9: Copy attachments of Sales Order to Purchase Order on conversion- This week, we have written a custom function that automatically copies the attachments uploaded for a sales order to the corresponding purchase order after you convert it. Here's how to configure it in your Zoho Books organization. Custom Function: Hit 
- How to use Rollup Summary in a Formula Field?- I created a Rollup Summary (Decimal) field in my module, and it shows values correctly. When I try to reference it in a Formula Field (e.g. ${Deals.Partners_Requested} - ${Deals.Partners_Paid}), I get the error that the field can’t be found. Is it possible 
- 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. 
- Marketer’s Space - Get Holiday-Ready with Zoho Campaigns- Hello marketers, Welcome back to another post in Marketer’s Space! Q4 is packed with opportunities to connect with your audience - from Halloween, Black Friday, and Cyber Monday, to Thanksgiving, Christmas, and New Year. In this post, we’ll look at how 
- Personalized demo- can I know more about the personalized demo we are construction company and 
- User Filter not selecting All Items- We are encountering 2 issues when using the user filter. When users are trying to search using the filter option, the OK button is grayed out. Users have to unselect or make a change before it filters properly. 2. When filtering and the OK button works, 
- Can I collect email addresses in a form??- Can I add new subscribers to my email list (hosted in FloDesk) when they check a box and add their email address on a Zoho form? 
- Zoho CRM Android app updates: Kiosk and multiple file upload support for subforms- Hello everyone, We've rolled out new enhancements to the Zoho CRM Android app to bring better mobile CRM experience and efficiency. Let's take a quick look at what's new: Kiosk Multiple file uploads for subforms Kiosk Kiosk is a no-code tool in Zoho CRM 
- Alerts for mentions in comments- We are testing the use of Writer internally and found that when a user is mentioned in a comment, there is no email alert for the mention. Is this something that's configurable, and if so, where can we enable this option? 
- Subform Disabled Fields Should Remain Disabled on Edit/View- Currently, when we disable a subform field using on user input or on add new row, it works perfectly during the initial data entry. However, when the record is saved and reopened for viewing or editing, these disabled fields become editable again. This 
- Weekly Tips: Manage External Images in Zoho Mail- When you receive emails every day, whether from clients, newsletters, or services, many of them contain external images that automatically load when you open the message. While this can make emails look more engaging, it can also impact your privacy and 
- Is it really true that I can't set the default 'deposit to' account in 2025?- I've been using Books for 7 years and the default account has never been a problem. I usually manually reconcile invoices and have never had a thought about which account. It has always been my account. However, I recently noticed that for the past 4 
- Standard Payment Term is not pulled from account to quotation- Hey Team There seems to be something off. I do have "Net 30" as my default payment term in Zoho Books for my customers. If, from the customer overview or quote section, I create a new Quotation, the payment terms field stays blank and doesn't get the 
- OAuth integration issues- I'm experiencing persistent OAuth errors when trying to connect Make with Zoho API. I've tried multiple approaches but keep encountering the following issues: First error: 'Invalid Redirect Uri - Redirect URI passed does not match with the one configured' 
- Zoho Mail Android app update: Manage folders- Hello everyone! In the latest version(v2.9) of the Zoho Mail Android app update, we have brought in support for an option to manage folders. You can now create, edit, and delete folders from within the mobile app. You can also manage folders for the POP 
- Shortcut to fill a range of cells- Good evening: I'm writing because I haven't been able to find a feature that allows you to select a range of cells, type in one of them, and then use a key combination to type in all of them. In Excel, the keyboard shortcut is Ctrl+Enter. I haven't found 
- Get Zoho Mail API working (including DRE Connector, Oauth Token, ZUID, ZOID & ACCOUNT_ID)- Disclaimer: I’m not a professional coder! Do you need to use Zoho Mail API? Me too. It lets you do all sorts of things — like reading the complete header of an email, or forwarding an email with its attachments — which is what I wanted to do. But setting 
- Revenue Deferrals- Does ZOHO books and subscriptions handle Revenue Deferrals?    
- Can I make a website open inside Zoho whenever I log in?- Hi Zoho Team, Every day, I check a few websites for updates, for example, Rojgar--result, where I see the latest government job results and notifications. I was wondering if there’s any option in Zoho to make a website like that open inside Zoho whenever 
- Zoho Analytics & SQL Server - Live connect - Below are the steps I did Created a fresh database and table in my own virtual server Created a new data source connection with live connect I was able to select the tables and created the data source successfully I am getting the error when I try to 
- Kaizen #214 - Workflow APIs - Part 2- Welcome back to another week of Kaizen! Last week, we discussed how Zylker Cloud Services used the Workflow APIs to discover and audit all the automations in their CRM, listing every workflow, checking triggers, and understanding their automation limits. 
- Playback and Management Enhancements for Zoho Quartz Recordings- Hello Zoho Team, We hope you're all doing well. We would like to submit a feature request related to Zoho Quartz, the tool used to record and share browser sessions with Zoho Support. 🎯 Current Functionality As of now, Zoho Quartz allows users to record 
- Zoho CRM Community Digest - September P1 | 2025- Hello Everyone! September's Here! Before we jump into product updates, and community highlights, here's a quick spotlight! Zoho has launched a Professional Sales Rep Certification course on Coursera, tailored for sales professionals to strengthen their 
- Upload my theme.- Hello. I would like to upload my own theme, this one: https://themeforest.net/item/panagea-travel-and-tours-listings-template/21957086 Is it compatible and where I upload it? If not I will hire a developer, what do I have to ask when I search for one? 
- Explore the Redesigned Quotes Module in Zoho Billing- Dear users, We’re excited to introduce a refreshed look for the Quotes details page in Zoho Billing! This update brings you a more efficient user interface experience without changing your existing workflow. We've enhanced layouts with organized tabs, 
- Default/Private Departments in Zoho Desk- 1) How does one configure a department to be private? 2) Also, how does one change the default department? 1) On the list of my company's Zoho Departments, I see that we have a default department, but I am unable to choose which department should be default. 2) From the Zoho documentation I see that in order to create a private department, one should uncheck "Display in customer portal" on the Add Department screen. However, is there a way to change this setting after the department has been created? 
- Product Updates in Zoho Workplace applications | September 2025- Hello Workplace Community, Let’s take a look at the new features and enhancements that went live across all Workplace applications this September. Zoho Mail Attach email as EML file in Compose Effortlessly attach emails as EML file in Compose by simply 
- 🤝 Rencontres, partage et inspiration au Zoho Community Meetup de novembre- Chers utilisateurs, Bonne nouvelle 🎉 : notre Meetup Zoho Community approche, et nous serions ravis de vous y voir ! 📍 Toulouse : le 25 novembre 📍 Lyon : le 27 novembre (🎯 Il ne reste que quelques places !) Que vous soyez débutant ou utilisateur avancé, 
- Need Help Mapping GST Registration Number Field Between Zoho Books & Zoho CRM + Slow Sync Issues- am facing an issue with field mapping between Zoho Books and Zoho CRM. I want to map the GST Registration Number field from the Customer module in Zoho Books to a custom GST field inside the Accounts module in Zoho CRM. However, I am getting a warning 
- Notification received when self-assigning tickets- When I assign tickets in Zoho Desk the relevant agent gets a notification email. When assigning myself a ticket in Zoho Desk, I get a notification email. Now, as I am the person who assigned the ticket to myself, getting a notification in this regard 
- Nouveauté dans Zoho Writer - Création de documents et de modèles assistée par l'IA- Zia, l’assistant IA de Zoho Writer, soutient les utilisateurs dans l’amélioration de leur écriture et la création de contenus : correction orthographique et grammaticale en temps réel, suggestions adaptées au contexte, détection du plagiat, révisions 
- When moments in customer support get "spooky"- It’s Halloween again! Halloween is celebrated with spooky symbols and meanings based on history and traditions, with each region adding its own special touch. While we were kids, we would dress up in costumes along with friends, attend parties, and enjoy 
- Session Expired- I constantly get "Session Expired" and need to relogin or close and open the application again. This gets really frustrating during the day. Is this something that can be solved? This really makes me want to leave the app as it is no go to need to reopen 
- Integrate your Outlook/ Office 365 inbox with Zoho CRM via Graph API- Hello folks, In addition to the existing IMAP and POP options, you can now integrate your Outlook/Office 365 inbox with Zoho CRM via Graph API. Why did we add this option? Microsoft Graph API offers a single endpoint to access data from across Microsoft’s 
- Disable Buttons for Users with Profiles without permission - Hey, I've noticed that users without permission of setting up things in the marketplace, can still see the icon: On a click, you see this: It would be way better, if they couldn't see this menu icon at all. (Aside from the fact that it completely misplaced 
- Mapping a new Ticket in Zoho Desk to an Account or Deal in Zoho CRM manually- Is there any way for me to map an existing ticket in Zoho desk to an account or Deal within Zoho CRM? Sometimes people use different email to put in a ticket than the one that we have in the CRM, but it's still the same person. We would like to be able 
- Zoho製品と生成AIツールの活用について- いつもありがとうございます。 弊社では、Zoho Oneを契約し、CRMを軸として、見込み客の管理から商談、その後の受注や請求の管理、サポート業務(Desk)、業務データのレポーティング(Analytics)などを行っております。 Zohoサービス自体には、Ziaというツールが搭載されているかと存じますが、それ以外の外部の生成AIツールと連携した活用などもできるのでしょうか?具体的には、CopilotなどがZohoに登録されているデータや情報を見て、対話型で必要なデータを提示してくれたり、商談や蓄積されたメモなどを分析してユーザが知見を得られるような活用ができないか、と考えております。 
- Next Page