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. 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
Custom item field won't allow decimal.
Hello, I have a custom item field that needs to be able to have a value with a decimal place such as 6.7 or 6.18. I have tried custom formatting the input format but can not get the correct syntax to allow this. Is this possible in Zoho?
Free webinar: Zoho Sign unwrapped – 2025 in review
Hey there! 2025 is coming to an end, and this year has been all about AI. Join our exclusive year-end webinar, where we'll walk you through the features that went live in 2025, provide answers to your questions, and give you a sneak peek on what to expect
HubSpot CRM to Zoho Creator Integration
I'm trying to create an integration between HubSpot CRM and Zoho Creator with HubSpot being the push source (if a contact is created or updated in HubSpot, it pushes the information to Zoho Creator). I have two questions: 1- Is it best to use Zoho Flow
Custom Fields
There is no way to add a custom field in the "Timesheet" module. Honestly, the ability to add a custom field should be available in every module.
Gain control over record sharing with portal users through our new enhancement: criteria-based data exposure
Dear Customers, We hope you're well! Portals is a self-service avenue through which your clients can access and manage their direct and related data in Zoho CRM. This empowers them to be more independent and enables them to experience a sense of transparency
Best-practice setup in Zoho One for managing combined candidate pools and exporting anonymised CVs
We are new users of the Zoho One bundle and operate a consulting and engineering company. Our workforce model includes a mix of permanent employees, active job applicants, and freelance/independent consultants. All three groups need to be searchable,
Meet Canvas' Grid component: Your easiest way to build responsive record templates
Visual design can be exciting—until you're knee-deep in the details. Whether it's aligning text boxes to prevent overlaps, fixing negative space, or simply making sure the right data stands out, just ironing out inconsistencies takes a lot of moving parts.
hard-bounced email list
Hi, Below pops up when I try to send an Email to some of my customer. Please guide me how to take it out from hard-bounced list? I am not sure how they were marked in hard-bounced list
Register the 'Contact Role' addition and change as a Potential edition so it can trigger Workflows
We are trying to use "Contact Roles" in Potentials. Contact Roles are special and different than the other Related lists, so, it may have a special behavior. Something to keep in mind is that you will never have 100 Contact Roles as you can have 100 Tasks, Calls, or any other Related list. In our case we will have 2 in average and up to 4 or 5 maximum. The problem is that we need to bring information from 3 key Contact Roles to the Potential and adding a Contact to the Contacts Roles area never trigger
Can I change the format of the buttons in the email templates?
Hi all! We have been working hard trying to brand our email templates, and have some way to go yet. One of the things we can't seem to edit is the green ${Cases.CUSTOMER_PORTAL_BUTTON} button and the font of the View Ticket text. Is there any way of doing
Best practice to structure reporting to include events covering multiple months / quarters.
Hi, I'm new to Zoho, have some experience of more "enterprise" tools, looking for some input from the community. I'm looking to create a report that includes events that cover a long period, each event has a start / end date and I'm struggling undertanding
Marketing Tip #11: Turn features into benefits that sell
We all love talking about our products, but here’s a secret: customers don’t just buy features, they buy benefits. Instead of just saying "Made from 100% organic cotton," try "Soft, breathable comfort that lasts all day." Benefits tell shoppers how your
Zoho Sheet - Printing - Page Breaks and Printing Customization
I think the title is descriptive enough in that I cannot find help documentation on a simple task of adding in page brakes for separating pages on print. Thanks
Synchronise item image between Zoho Commerce and Zoho Books/Inventory/CRM
Here is a blindingly simple idea to tie several Zoho products together. Zoho - please include a method to synchronise the item image (or images) from one Zoho application to another. For example, if you upload an item image in Zoho Inventory, a user should
How do I migrate from zoho mail to Office 365?
The manual migration of Zoho Mail to Microsoft 365 typically requires using IMAP to move emails and configuring Microsoft Outlook to sync Zoho Mail. This approach can be error-prone, especially if there are multiple accounts or large email archives. Moreover,
New Update: Convert External Users in Bulk in Zoho Directory
Greetings to all Zoho Directory users out there! We’re excited to introduce a new update that makes user management in Zoho Directory even more efficient; you can now convert external users in bulk! Earlier, admins could convert only one external user
New Update: Convert External Users in Bulk in Zoho One
Greetings to all Zoho One users out there! We’re excited to introduce a new update that makes user management in Zoho One even more efficient; you can now convert external users in bulk! Earlier, admins could convert only one external user at a time.
How to edit form layout for extension
I am working on extension development. I have created all the fields. I want to rearrange the layout in Sigma platform. But there is no layout module in Sigma. How can I achieve this for extensions other than Zet CLI and putting the fields into widget
Website not properly connecting with Zoho Creator app portal (embed & data sync issue)
Hello Zoho Community, I’m currently facing an issue while trying to connect my external website with a Zoho Creator app portal. I have a tool-based website ( https://mygardencalculator.com/ ) where users interact with calculators and dynamic content.
日本語フォントの選択肢拡充についての要望
日本語フォントの選択肢がとても少ないと感じたことはありませんか? 多くのアプリ(たとえば Invoice)ではフォントが1種類しかなく、正直あまり使いやすい・見た目が良いとも言えません。 そろそろ、もっと多くの日本語フォントを追加してほしい、そしてすべてのアプリで同じフォント選択肢を使えるようにしてほしいと、私たちユーザーが声を上げる時期だと思います。 ご存じのとおり、現状ではアプリごとにフォント周りの仕様にほとんど一貫性がありません。 みなさん、一緒に要望を出していきましょう!
Does anyone know how to setup Zoho Desk or Zoho CRM as a custom outgoing/incoming Call Centre?
I need to setup a call center so I can setup agents to make phone calls across Canada to market our services. I am trying to figure out the most reliable and cost efficient way to do this? I am currently paying for two phone services and neither seem
Display actual mileage on an invoice
My users are creating expenses in Zoho expense. For example, they expense 10 miles and get paid 7 dollars (10 miles * IRS rate of .70). If I look at the expenses in Zoho Books, it does show them at 10 miles at .70 cent When I add these expense to an invoice
Prevent Unapproved Quotes from Exporting to Zoho CRM Finance Module
Is it possible to prevent unapproved quotes in Zoho Books from being exported from Zoho Finance module inside Zoho CRM?
Integration with...
Dear Zoho Commerce team, Please could you consider the integration within Zoho Commerce / Inventory and Qapla'? (https://www.qapla.it/en/) This app is better than Aftership in many ways: - Aftership integration require PRO plan and price start from more
Unable to Create Zoho Booking via the Book Appointment API
Its giving the below error { "response": { "errormessage": "Error setting value for the variable:customer_details\n null", "status": "Error" } } Request: POST Url: https://www.zohoapis.in/bookings/v1/json/appointment attached Zoho-oauthtoken
Consultant-Only Booking Page
Zoho Bookings does not allow for Meeting Type OR Workspace-Wide booking pages to be turned off. This is detrimental to organizations that have territory-based or assigned accounts, because if prospects can go to these booking pages and either select the
Request for Auto PO - Min–Max based Automated Purchase Feature
Dear Zoho POS Team, I’m writing to request a feature enhancement that would significantly streamline inventory management for businesses using Zoho POS — particularly supermarkets, FMCG retail, and multi-store operations like ours. Feature Requested:
Export Invoices to XML file
Namaste! ZOHO suite of Apps is awesome and we as Partner, would like to use and implement the app´s from the Financial suite like ZOHO Invoice, but, in Portugal, we can only use certified Invoice Software and for this reason, we need to develop/customize on top of ZOHO Invoice to create an XML file with specific information and after this, go to the government and certified the software. As soon as we have for example, ZOHO CRM integrated with ZOHO Invoice up and running, our business opportunities
issue with deluge script
i used chat gpt to build this script and I am getting 2 errors which I cannot figure out how to fix: void monthly_sales_order_generation() { try { // ---------------- CONFIG ------------------- analytics_url_1 = "https://analytics.zoho.com/api/<workspaceID>/report/<reportID1>/data";
Introducing LinkedIn Apply Connect for Zoho Recruit
Attract up to 3x more qualified candidates and hire more efficiently with LinkedIn Apply Connect. Let candidates fill-in job applications without any redirections, gain deeper insights with applicant highlights within Zoho Recruit, and keep candidates
Recruit paid support?
Hi all, Could anyone who has paid support package advise if it provides value for money with regards to support response times? Exploring the idea as unfortunately when we have faced issues with Recruit it has been a 7+ day timescale from reporting to
Ticket Status email
Good day, This was discussed in the past, but it would be helpful if we could have the system assign a custom response to a status. We have various statuses for tickets, e.g. "closed due to no response", or "Pending Status", it would be helpful for the
Future Orders - Due Date
Hi In my role, I can receive tickets where the work required is requested months in advance. Using a Future Orders option, which I believe was setup under the On Hold status type, hides the Due Date, in all views/ticket etc. Whilst I understand the reasoning
Introducing Withdrawal Reasons for Offers
We’re excited to introduce a new enhancement to the Offer module that brings more clarity and accountability to every withdrawn offer. The Withdrawal Reason update ensures that each withdrawal — manual or automatic — is backed by a clear explanation,
Zoho Creator customer portal users
Hi, I'm in a Zoho One subscription with our company. I'm running a project now that involves creating a Zoho Creater application and using the Zoho Creator Customer Portal. At most we need 25 customer portal users. In our Zoho One plan we only get 3
GPS tracking only or Check out facility
Dear Team, Zoho CRM is quite robust CRM but till date i was waiting for the feature of having GPS tracking of Sales employees which is a common demand by all customers for thier field sales executives. We cover them by saying that CRM provides Checkin
Appraisals on Employee Information Profile
Is it possible to show completed appraisals on each employee's "Employee Information" page? I would presume at the bottom - similar to the "Related Lists" concept in Zoho CRM. Obviously view access would be limited to employee and appropriate other roles
Kaizen #220: Actions API - Webhooks APIs - Part 2
Hello all!! Welcome back to the follow-up Kaizen post of Kaizen #219: Actions API - Webhooks APIs - Part 1. In the previous week, we covered how to configure a basic Webhook and how to include Headers, Body, and URL Parameters using both the POST Webhook
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
Manage your invoices from Bigin's mobile app (iOS)
Hello everyone! We're happy to announce that users can now integrate Zoho Books with the latest version of Bigin's iOS app. Zoho Books can be integrated with Bigin only via the web application. Users can view the Zoho Books tab in the detail pages of
Next Page