FAQs on Multi-Select Lookup (MxN) Field in Zoho CRM

FAQs on Multi-Select Lookup (MxN) Field in Zoho CRM

 Nearing 200th Kaizen Post – We want to hear from you!
Do you have any questions, suggestions, or topics you would like us to cover in future posts? Your insights and suggestions help us shape future content and make this series better for everyone. 

Hey everybody!!!
Welcome back to another post in the Kaizen series!
In this post, we will address some of the most frequently asked questions about the Multi-Select Lookup(MxN) field from the Zoho CRM developer community forum.

1. What is a Multi-select lookup field?

A multi-select lookup field in Zoho CRM lets you create a many-to-many relationship between two modules. This means a record in one module can be linked to multiple records in another module and vice versa.
For example, using an multi-select lookup field, you can associate multiple skills with an employee.

2. How does the Mutli-Select Lookup relationship work?

When you create a Multi-Select Lookup between two modules, for example, Employees and Skills, Zoho CRM automatically creates a hidden linking module, which is also known as an MxN module. This module stores the associations between records in the two modules, enabling you to track and manage many-to-many relationships.

For instance, if you link Employees and Skills, a linking module named EmpXSkills will be created.

This linking module is accessible only via API.

Backend Flow of multi-select lookup Relationship



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.

Why you cannot use a lookup field for this use case? 
In Zoho CRM, a lookup field creates a one-to-many relationship between two modules i.e. one record in the source module can be linked to only one record in the target module.

Example :
If you create a lookup field for Skills in the Employees module, each employee can be linked to only one skill. So, use a multi-select lookup field instead of a lookup field when you need to represent complex relationships like one employee - many skills and one skill - many employees.

3. How to create a multi-select Lookup field using Zoho CRM APIs?

To create a Multi-Select lookup field between two modules using Zoho CRM APIs, follow these steps:

Step 1: Identify the Module API Name
Before creating the field, you should know the API names of the Employees and Skills modules. For that, use the Get Module Metadata API.  

Request URL  : {{api-domain}}/crm/v8/settings/modules
Request method : GET



Now, search for the Employees module in the response and note its API name.

Step 2: Use the Create Custom Fields API

To establish a many-to-many relationship between two modules, in our case, Employees and Skills, you need to create a custom field of type multi-select lookup in the Employees module (parent module).  Here, we will associate multiple skills to an employee.

This custom field requires:
  • The related module you want to link to - Skills.
  • A display field from the related module
  • The linking module (EmpXSkills), which stores the actual associations.
Use the Create Custom Fields API to create custom fields.

Request URL : {{api_domain}}/crm/v8/settings/fields?module=Employees
Request method : POST

Sample input :



{
    "fields": [
        {
            "field_label": "Skills", //Name of the field in your module
            "data_type": "multiselectlookup", //Type of the field
            "multiselectlookup": { //This JSON object contains the multi-select lookup relationship details

                "connected_details": { //Details about the module and field you want to link
                    "module": {
                        "api_name": "Skills" //API name of the related module
                    },
                    "field": {
                        "field_label": "Skills" //The field in the related module to display
                    }
                },
                "linking_details": { //Details about the junction or linking module that manages the many-to-many relationship
                    "module": {
                        "plural_label": "EmpXSkills" //Plural label of the junction module
                    }
                }
            }
        }
    ]
}


4. How Do You Find the Linking Module and Field API Names?

To know the API name of the linking module:
Use the Get Modules API and search for "generated_type" : "linking" in the response to identify MxN modules. In our case, EmpXSkills.

Request URL : {{api_domain}}/crm/v8/settings/modules
Request method : GET



To know the field API names in the linking module:
Use the Get Fields Metadata API to retrieve the API names of lookup fields within the linking module.

Request URL : {{api_domain}}/crm/v8/settings/fields?module=EmpXSkills
Request method : GET

5. How do I associate records via a multi-select lookup field using the Insert Records API in Zoho CRM?

To associate records using a multi-select lookup field, you must provide the record IDs from the related module. The association is made through the linking module.

Example :
Associating multiple skills with an employee using the multi-select lookup field.

Request URL : {{api-domain}}/crm/v8/Employees
Request method : POST

Sample input :


{
  "data": [
    {
      "Name": "Patricia",
      "Email": "patricia@mail.com",
      "Position": "Marketing Specialist",
      "Year_of_Experience": 5,
      "Skills": [   // API name of the multi-select lookup field in the Employees module
        {
          "Skills": { // API name of the lookup field in the linking module pointing to the Skills module
            "name": "Marketing",
            "id": "5725767000002149427"  //ID from the Skills module are mandatory to establish the link
          }
        },
        {
          "Skills": {
            "name": "Social Media Marketing",
            "id": "5725767000002149476"
          }
        }
      ]
    }
  ]
}



6. How do I associate an Employee's skills using the linking module in Zoho CRM?

To establish a relationship between the Employees and Skills modules through the linking module, use the Insert Records API to create a record in the linking module, EmpXSkills.

To do this,
  • Use the appropriate lookup field API names to reference the parent module.
  • You must need the record IDs from both the Employees and Skills modules to create the associations.
Request URL : {{api-domain}}/crm/v8/EmpXSkills
Request method : POST

Sample input :


{
  "data": [
    {
      "Name": "Patricia",
      "Employees": {
        "id": "5725767000002161001"  // Record ID from the Employees module
      },
      "Skills": {
        "id": "5725767000002149476"  // Record ID from the Skills module
      }
    }
  ]
}



7. When should I use create/update operations in the Employees module vs the EmpXSkills module?

                Employees Module

               EmpXSkills (linking) Module

Use when you want to create or update an Employee and associate Skills using the Multi-select Lookup field.

Use when you want to create or remove associations between existing Employee and Skill records without modifying the actual Employee or Skill data.

Creating a new employee and assigning their skills at once.

Managing relationships between existing records i.e., linking and unlinking skills to employees.


8. How to update a record in the linking module?

To update a record in the linking module, use the Update Records API.
Request URL : {{api-domain}}/crm/v8/EmpXSkills/5725767000006269044
Request method : PUT

Sample input :


{
    "data": [
        {
            "Skills": {
                "name": "Marketing",
                "id": "5725767000002170035" //Associating another skill with the employee 
            }
        }
    ]
}

In the above sample, we have replaced an existing skill associated with an employee with another Skill in the linking module.This is done by updating the Skills lookup field in the EmpXSkills record.

Please note that in the linking module, Skills is a lookup field, so you can associate only one skill per linking record. But in the Employees module, Skills is a multi-select lookup field, so an employee can be associated with multiple skills.

9. How to unlink records from the parent module as well as the linking module?

Unlink the associated records from the parent module:

Using the Update records API, you can remove an associated skill from an employee, use the "_delete": null key within the multi-select lookup field in the Employee record update.

Request URL : {{api-domain}}/crm/v8/Employees/5725767000006269044
Request method : PUT

Sample input :

{
"data": [
        {
            "Skills": [
               {
                    "Skills": {
                        "name": "Marketing", 
                        "id": "5725767000002170035" // The Skill record you want to unlink
                    },
                    "id": "5725767000007228047", //record ID - The record created in the linking module for the employee with the Marketing skill
                    "_delete" : null 
                }
            ]
        }
    ]
}



Replace an associated record from the linking module:

Use the Update Records API to replace an existing association in the linking module.

Request URL : {{api-domain}}/crm/v8/EmpXSkills/5725767000007228035
Request method : PUT

Sample input :


{
    "data": [
        {
            "Skills": {
                "name": "Java",
                "id": "5725767000005259075" //replacing a new skill 
            }
        }
    ]
}

In the above sample, we have replaced the existing skill with Java.

10. Why am I seeing the error "DUPLICATE_LINKING_DATA"  in the Update Records API

This error occurs when you try to associate records with the parent record that are already linked with the Multi-select lookup field. To resolve this, check the records you are trying to link and make sure your association is only with records that are not already linked.

Know your existing linked records:

Before the Update Records API, use the Get Related Records Data API and search for the multi-select lookup field. In our case, Skills is the multi-select lookup field created in the Employees module. This will return all records already associated.

Example :


The response returns all Skills already linked with that Employee.

Using this way, compare the IDs from the API response with the new records you are about to link, and only proceed with non-duplicate IDs. This avoids duplicate entries and prevents the "DUPLICATE_LINKING_DATA" error.

11. What happens if I delete a record in the linking module?

When you delete a record in the linking module, it only removes the association between the related records in the Employees and Skills modules.

Note :
  • Deleting a linking module record removes only the relationship between two records from the Employees and Skills modules.
  • Deleting an Employee or Skill record deletes all corresponding entries in the linking module as well.

12. How do I query linked records?

Use the COQL API to query multi-select lookup data by specifying the corresponding linking module's API name directly in your query. The linking module is treated as a separate module in Zoho CRM, so you can retrieve associated records by querying it like any other module.

Sample query :


{
  "select_query": "select Skills.Name as skill, Employees.Name as employee from EmpXSkills where Skills.Name like '%Marketing%'"
}


Use the Get Module Metadata API to know the linking module's API name.

13. How do I export multi-select lookup records using the Bulk Read API?

To export multi-select lookup data, linking module records efficiently, use the Bulk Read API with the linking module’s API name.

Request method : POST

Sample Request :


{
    "callback": {
        "method": "post"
    },
    "query": {
        "module": {
            "api_name": "EmpXSkills" //API name of the linking module
        },
        "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"
        }
    }
}


14. Can I import my linking module's data using the Bulk Write API?

Yes. Like the Leads and Contacts modules, you can also import linking module's data into Zoho CRM using the Bulk Write API by directly specifying the linking module’s API name.

If you are importing data that involves both a parent module, Employees and its associated MxN linking module, follow these steps:

1. Create separate CSV files:
  • One for the parent module - Employees
  • One for the linking module - EmpXSkills
2. Zip the files into a single ZIP file.
3. Upload the ZIP in a single Bulk Write API request.
4. Ensure accurate field mappings are provided in the API request body.

Refer to Kaizen #131 - Bulk Write for parent-child records using Scala SDK for more details on handling parent-child records.


15. Can I receive notifications if a multi-select lookup field in a module is modified or updated?

Yes, you can receive notifications when a MxN field is updated using the Notification API. To enable instant notifications for actions performed in a module, use the respective API names of the linking module in the input body.

Request method : POST

Sample input :


{
    "watch": [
        {
            "channel_id": "10000",
            "events": [
                "EmpXSkills.all"  //EmpXSkills represents the API name of the linking module
            ],
            "return_affected_field_values": true  
        }
    ]
}


16. Can I use criteria-based filtering when accessing multi-select lookup data using the Search API?

Yes, you can filter multi-select lookup data using the criteria parameter in the Search API's URL.

Here is an example that fetches records from the EmpXSkills linking module.

Request URL : {{api-name}}/crm/v8/EmpXSkills/search?criteria=((Secondary_Email:equals:patricia@mail.com)and(Skills:equals:Content_Marketing))
Request method : GET

Sample response :



                                                                                                                               x-----------------------------x


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!


Other FAQs in the Kaizen series :


    • Sticky Posts

    • Kaizen #197: Frequently Asked Questions on GraphQL APIs

      🎊 Nearing 200th Kaizen Post – We want to hear from you! Do you have any questions, suggestions, or topics you would like us to cover in future posts? Your insights and suggestions help us shape future content and make this series better for everyone.
    • Kaizen #198: Using Client Script for Custom Validation in Blueprint

      Nearing 200th Kaizen Post – 1 More to the Big Two-Oh-Oh! Do you have any questions, suggestions, or topics you would like us to cover in future posts? Your insights and suggestions help us shape future content and make this series better for everyone.
    • Celebrating 200 posts of Kaizen! Share your ideas for the milestone post

      Hello Developers, We launched the Kaizen series in 2019 to share helpful content to support your Zoho CRM development journey. Staying true to its spirit—Kaizen Series: Continuous Improvement for Developer Experience—we've shared everything from FAQs
    • Kaizen #193: Creating different fields in Zoho CRM through API

      🎊 Nearing 200th Kaizen Post – We want to hear from you! Do you have any questions, suggestions, or topics you would like us to cover in future posts? Your insights and suggestions help us shape future content and make this series better for everyone.
    • Client Script | Update - Introducing Commands in Client Script!

      Have you ever wished you could trigger Client Script from contexts other than just the supported pages and events? Have you ever wanted to leverage the advantage of Client Script at your finger tip? Discover the power of Client Script - Commands! Commands
    • Recent Topics

    • Integrating Chatbot with Zoho Creator Application

      Is it possible to integrate a chatbot with a Zoho Creator application?
    • How to reduce programmatically the image uploaded by user?

      I need a function that will automatically reduce the pixel dimension to 800 x 600 pixels / 180 resolution or (approx. 1.37MB) of image uploaded by user from digital camera, for example, 2271 x 1704 pixels /180 resolution or approx. 11.1MB. After the user selected the image, the function will able to detect if pixels is above 800x600, process the photo (crop/ reduce) and resume upload. Need help...  
    • Dark mode for Zoho Creator / Zoho CRM Code editor

      Hi Team, Is there any plans for Dark mode in Zoho creator / Zoho Crm code editor and development pages in pipeline?
    • Is there a way to make a button scroll down?

      Looking to have a button on a landing page scroll down to another section on the page. Any recomendations outside of coding?
    • Collective-booking event not added to all staff calendars

      We assign two staff to certain events. When the client books this event, it adds it to one staff calendar (the 'organiser') but not the other. How can I ensure all staff assigned to a collective booking get the event in their calendar? (A side note: it
    • ZOHO Android Client

      Hi, I installed the Android app, but it had an issue, so I reinstalled it. I was able to add multiple accounts, but now when I add the next account, it just duplicates the one I already have and will not even allow me to enter the info for another account.
    • I'd like to suggest a feature enhancement for SalesIQ that would greatly improve the user experience across different channels.

      Hello Zoho Team, Current Limitation: When I enable the pre-chat form under Brands > Flow Controls to collect the visitor’s name and email, it gets applied globally across all channels, including WhatsApp, Messenger, and Instagram. This doesn't quite align
    • Enhance Barcode/QR Code scanner with bulk scanning or continuously scanning

      Dear Zoho Creator, As we all know, after each scan, the scanning frame closes. Imagine having 100 items; we would need to tap 100 times and wait roughly 1 second each time for the scanning frame to reopen on mobile web. It's not just about wasting time;
    • Non-depreciating fixed asset

      Hi! There are non-depreciable fixed assets (e.g. land). It would be very useful to be able to create a new type of fixed asset (within the fixed assets module) with a ‘No depreciation’ depreciation method. There is always the option of recording land
    • Managing Rental Sales in Zoho Inventory

      I am aware that Zoho Inventory is not yet set up to handle rental sales and invoicing. Is anyone using it for rentals anyway? I'd like to hear about how others have found work arounds to manage inventory of rental equipment, rental payments, etc. Th
    • Megamenu

      Finally! Megamenu's are now available in Zoho-Sites, after waiting for it and requesting it for years! BUT ... why am I asked to upgrade in order to use a megamenu? First: Zoho promised to always provide premium versions and options for all included Zoho-applications
    • Zoho Flow to Creator 3001 Respoonse

      I have updated my Flows with the new V2 connection to Zoho Creator, but now some Flows do not work. They take in data from a Webhook and are supposed to create a record in Creator, however creator returns a 3001 message along with a failure, but I cannot
    • File Upload to Work Drive While Adding Records in Zoho Creator Application

      Hi I am trying to set a file attachment field in zoho creator form, to enable the user to upload a scanned document from their local pc. The file should be uploaded to zoho workdrive and not to the default zoho creator storage. The file link should be
    • Why not possible to generate?

      Using this https://desk.zoho.com/DeskAPIDocument#TicketCount#TicketCount_Getticketcountbyfield on my ZML script url :"https://desk.zoho.com/api/v1/ticketsCountByFieldValues?departmentId=XXXXXXXXXXX&accountId!=XXXXXXXXX&customField1=cf_country_1:XXXXXX&field=overDue"
    • email

      Hi My crm email is not working, can you check, I have zoho one account.
    • Need option to see Mass Emails & Cadences in Gmail Outbox OR a dedicated Zoho Outbox

      Hi everyone, Right now, when we send 1:1 emails from gmail (with gmail API connected to Zoho CRM), those emails appear both in gmail's sent folder and in Zoho CRM. That works well. But when we send Mass Emails or Cadence emails form Zoho CRM, they are
    • I can't found API for Sales Receipts

      Hello May you please help me to find an API document for Sales Receipts to get data and retrive a custom fields like Invoice and credit notes Regards
    • Kaizen #205 - Answering Your Questions | Managing Picklists and Enabling History Tracking via Zoho CRM APIs

      Hello everyone! Welcome back to another post in our Kaizen series. In this post, we will look at how you can manage picklist fields in Zoho CRM using APIs. This topic was raised as feedback to Kaizen #200, so we are taking it up here with more details.
    • Multiple Vendor SKUs

      One of the big concerns we have with ZOHO Inventory is lack of Vendor Skus like many other inventory software packages offer. Being able to have multiple vendor skus for the same product would be HUGE! It would populate the appropriate vendor Sku for
    • Internally created tickets

      Hi there When tickets are created internally on-behalf of customers - there is nothing to show that the ticket was created by an internal agent. This means, that it's easy for our agents to confuse tickets which were created by internal team members and
    • Automatically change website passwords

      Hi everyone, We just switched to a Professional package to also use the "Automatically change website passwords" function. But I cannot find anything about it, how to use it, anywhere. Does anyone know how I can use this function? Best, Caspar
    • Change Invoice Prices for an Effective Date

      Hi, It would be a really good feature to be able to change the prices on invoices/recurring invoices from an effective date in the event of price increases. For instance, I am in the process of increasing prices that will be effective from a specific
    • "Other Current Asset" accounts as "Paid Through" accounts in Expense

      It would be incredibly useful to be able to assign accounts of type Other Current Asset as Paid Through accounts in Expense. Currently, Other Current Liability are permitted as Paid Through Accounts. This makes sense, as Credit Cards are current liabilities.
    • Multi column open text questions that allows respondents to add rows for additional information

      I need to create a question that has 2 columns with open text, but I also need to allow respondents to click a "+" button, or something similar, so that they can add additional information if they choose to. I've tried using the Multiple Textboxes type
    • Bot Filtering & Apple Mail Privacy Protection Compliance in Zoho Campaigns

      Dear Campaigns Users, The wait is over! We’re excited to announce that the enhanced bot filtering feature is now live in Zoho Campaigns. This update brings greater accuracy to your email campaign reports by distinguishing real user engagement from automated
    • Découvrons les détails qui simplifient vos journées de travail avec Trident

      Nous nous installons dans des routines efficaces et rodées avec le temps. Chaque matin, nous ouvrons nos e-mails, passons aux messages, consultons notre agenda, puis attaquons nos tâches. Ce processus nous semble maîtrisé, mais est-il réellement optimisé
    • Issue with Purchase Rate Showing as “0” After Importing Items List

      Dear Zoho Books Support Team, Good day. I’m reaching out regarding an issue I’m facing while importing my items list into Zoho Books. Despite mapping all fields correctly and including the purchase price for each product in my Excel file, the Purchase
    • API for Task Entity in Zoho Books

      I’m working on automating task creation in Zoho Books via a custom button in the Bills Module. The goal is to create a task in the Tasks Module and assign it to the Finance Team, so they can track progress efficiently. While reviewing Zoho Books documentation,
    • create invoice in zoho books from the zoho forms

      Is there a native way to have create invoice in zoho books, when zoho form is completed?
    • Email undelivered

      GOod Day I am always receiving an uncategorized-bounce to my email. I am not sure why this is happening.
    • Add inventory_valuation_method to items endpooints

      To ensure consistent item creation it would be helpful to have the inventory_valuation_method (FIFO vs WAC) be able to be set at item creation or as an update (consistent with current behavior where it is not allowed for items with existing transactions)
    • Use Zoho to send sales receipts for Gocardless transactions

      I've been using gocardless for years and have d/d mandates set up on there. Each week we get bulk payments from customer d/d's. However, we need to send sales receipts to these customers. So I know I can sync mandates into Zoho, and then I can set up
    • Zoho - Gocardless sales receipts

      I've been using gocardless for years and have d/d mandates set up on there. Each week we get bulk payments from customer d/d's. However, we need to send sales receipts to these customers. So I know I can sync mandates into Zoho, and then I can set up
    • Introducing Rollup summary in Zoho CRM

      ------------------------------------------Moderated on 5th July'23---------------------------------------------- Rollup summary is now available for all organizations in all the DCs. Hello All, We hope you're well! We're here with an exciting update that
    • Introducing Connected Workflows in Zoho CRM for Everyone : Free Your Teams to Focus on What Matters

      Hello Everyone, We’re thrilled to introduce the next big evolution in Zoho CRM for Everyone -- Connected Workflows. This new feature builds on our commitment to deliver a CRM that’s truly inclusive, adaptable, and designed for consistent collaboration
    • Cooling-off Period Just Got Better: More Coverage, More Control

      We’ve enhanced the Cooling-off Period feature in Zoho Recruit to give you more control over repeat applications and referrals. This helps you maintain a cleaner, more efficient recruitment pipeline. With this enhancement, you can: Prevent duplicate candidate
    • Revenue Management: #7 Revenue Recongition in Construction & Real Estate Industry

      If you are in the construction or real estate business, you are used to long project timelines and progressive invoicing to keep up with your billing. But when does revenue get recognized? Will it happen when the contract gets signed? At different milestones
    • TikTok (and other social platform) Messages and comments of the past

      When I link a social channel, Zoho will show in "Inbox", "Messages" and "Contact" sections the interaction done in the past? (comment, messages...)
    • Email Integration - Zoho CRM - OAuth and IMAP

      Hello, We are attempting to integrate our Microsoft 365 email with Zoho CRM. We are using the documentation at Email Configuration for IMAP and POP3 (zoho.com) We use Microsoft 365 and per their recommendations (and requirements) for secure email we have
    • Restrict Employee mail deletion

      Dear Zoho, Is there a way where i can restrict my employees to delete any mails from their account
    • Next Page