Hello everyone!
Welcome back to another week of 
Kaizen.
In this post, we explore the 
Multi-Module Lookup (MML) field in the 
Appointments module of Zoho CRM. You learn what an MML field is, how it works, and how to use it with 
Zoho CRM APIs.
Table of Contents:
- What is a Multi-Module Lookup (MML) Field in Zoho CRM?
 - Use Cases for MML
 - How  the "Appointment For" (MML) field in the "Appointments" module works?
 - Creating a Record in the Appointments Module Using the Insert Records API
 - Retrieving a Record from the Appointments Module Using the Get Records API
 - Multi-module Lookup Using the COQL API
 - Multi-module Lookup Using the Bulk Read API
 - Frequently Asked Questions
 
What is a Multi-Module Lookup (MML) Field in Zoho CRM?
A Multi-Module Lookup (MML) field in Zoho CRM allows you to create a one-to-one relationship between a record in one module and a record from one of multiple other modules. Unlike a normal lookup field, which references a single module, an MML field can dynamically reference records from multiple modules. 
Without the MML field, users must create multiple lookup fields for each module, which complicates the CRM layout and user experience.
Note:
- The multi-module lookup (multi_module_lookup) data type was introduced in Zoho CRM API version 3.
 - Currently, the MML field is available as a system-defined field named Appointment For in the Appointments module. 
 - The Appointment For field supports lookups to both Contacts and custom modules.
 - You cannot create a custom MML field in Zoho CRM.
 
Data Model Representation
MML's Data Model RepresentationUse Cases for MML
Zylker Healthcare is a multi-specialty hospital that uses Zoho CRM to maintain its appointment scheduling process. 
In this setup, Zylker maintains two key modules:
- Contacts module - Stores records of physicians and surgeons, including attending physicians, specialists, and surgeons who diagnose and refer patients.
 - Patients module - A custom module used to maintain records of all patients.
 
To improve the appointment booking process, Zylker uses the "Appointment For" Multi-Module Lookup (MML) field in the Appointments module. This field lets Zylker manage an appointment with either a Physician/Surgeon or a Patient, eliminating the need for multiple lookup fields.
How  the "Appointment For" (MML) field in the "Appointments" module works?
- When creating an appointment, the user selects the "Appointment For" field.
 - The field displays records based on the selected module, either the Contacts or  Patients. 
 - The user selects the appropriate record (Contact or Patients) for the appointment.
 - A related list is automatically created in the selected module (Contact or Patients) as the Open Activities / Closed Activities to display all appointments associated with that record.
 
Creating a Record in the Appointments module using the Insert Records API
Before creating a record in the Appointments module via the Insert Records API, make sure you know the API names of the system-defined mandatory fields. These fields are required to create an appointment successfully.
System-defined Mandatory Fields:
- Appointment_For (MML field)
 - Service_Name
 - Appointment_Start_Time
 - Appointment_Name
 - Member
 - Location
 
The below image shows how these system-defined mandatory fields appear in the Appointments module UI:
System-defined mandatory keys in the Appointments Module in UI view.API calls you have to make before creating a record:
Before inserting a record into the Appointments module, it is important to know the API names of the fields and their parent modules. 
Request URL : {api-domain}/crm/v8/settings/modules
Request Method : GET
Sample Response :
In the API response, search for the module with "module_name": "Appointments" and check the value of the "api_name" key to get the API name of the module. This is the name you will use in all related API calls.
ii. Use the 
GET - Fields Metadata API and get fields metadata for the 
Appointments module. Here, you can find the 
API names of the mandatory fields along with other fields present in the Appointments module. 
Below is the API call & response for the multi-module lookup field along with other mandatory fields.
Request URL : {api-domain}/crm/v8/settings/fields?module=Appointments__s
Request Method : GET
Sample Response :
Note: The above image highlights only the key properties of the Multi-Module Lookup (MML) field from the field metadata response. The complete API response contains additional properties not shown here.
In the response:
- The multi-module lookup field is identified by the key "data_type" with the value "multi_module_lookup".
 - The associated modules supported by the MML field (e.g., Contacts, Patients) are listed under the "modules" key.
 - Other mandatory fields like Service Name, Appointment Name, and Appointment Start Time can be identified by "system_mandatory": true.
 
The keys of the above multi_module_lookup JSON object are explained below:
 
 "multi_module_lookup": {     "display_label": "Appointments", // Display label of the module where the MML field is used     "api_name": "Appointments__s", // API name of the Appointments module     "modules": [ //List of modules associated with the Appointments module.          {             "api_name": "Contacts", //API name of the associated module              "module_name": "Contacts", // Display Name of the module              "id": "5725767000000002179" //Unique ID of the module         },         {             "api_name": "Patients", //API name of the associated custom module             "module_name": "Patients", //Display label of the module             "id": "5725767000006473007" //Unique module ID         }     } ] }, 
 
  | 
Note: 
- You cannot add or remove modules from the Multi-Module Lookup (MML) field using APIs. These actions are only available through the Zoho CRM UI.
 - Once a module is disassociated from the MML field, existing records associated with that module will remain in the Appointments module, and you will no longer be able to associate newly created records from the disassociated module using the MML field. 
 
The remaining system-defined mandatory fields, along with their API names, are listed below.
   System-defined Mandatory Field Names    |   System-defined Mandatory Field API Names  | 
Service Name  | Service_Name  | 
Appointment Start Time  | Appointment_Start_Time  | 
Appointment Name  | Appointment_Name  | 
Member  | Owner  | 
Location  | Location
   | 
Note: The system-defined mandatory fields can be identified by "system_mandatory": true.
Search the system-defined mandatory field names and get their API names.
With the field API names, use the following request and sample input body to create a record in the Appointments module using the Insert Records API.
 
Request URL : {{api-domain}}/crm/v8/Appointments__s
Request Method : POST
Request Body :
{     "data": [         {             "Appointment_Name": "General Consultation",             "Owner": {                 "name": "Patricia Boyle",                 "id": "5725767000000411001",             },             "Appointment_Start_Time": "2025-04-15T13:00:00-07:00",             "Appointment_End_Time": "2025-04-15T13:30:00-07:00",             "Appointment_For": {                 "module": {                     "api_name": "Contacts",                     "id": "5725767000000002179"                 },                 "name": "John Doe",                 "id": "5725767000005607020"             },             "Service_Name": {                 "name": "General Check-up",                 "id": "5725767000006387029"             },             "Location": "Business Address"         }     ] } 
 
  | 
Sample Response:
 
 {     "data": [         {             "code": "SUCCESS",             "details": {                 "Modified_Time": "2025-05-06T20:33:42-07:00",                 "Modified_By": {                     "name": "Patricia Boyle",                     "id": "5725767000000411001"                 },                 "Created_Time": "2025-05-06T20:33:42-07:00",                 "id": "5725767000006390001", //Unique ID if the newly created record. Please note that this record ID will be used in the following API get and update operations.                 "Created_By": {                     "name": "Patricia Boyle",                     "id": "5725767000000411001"                 }             },             "message": "record added",             "status": "success"         }     ] } 
 
  | 
Note:
Only Contacts and custom modules are supported in the Multi-Module Lookup field. If you try to associate a new record with a module that has been removed from the MML field or an unsupported module in the MML field, the following error will be thrown. 
Retrieving a Record from the Appointments Module Using the Get Records API
Request URL : {{api-domain}}/crm/v8/Appointments__s/5725767000006390001
Request Method: GET
Request Response:
 
 {     "data": [         {             "Owner": {                 "name": "Patricia Boyle",                 "id": "5725767000000411001",             },             "$currency_symbol": "$",             "Address": null,             "Appointment_Start_Time": "2025-04-15T13:00:00-07:00",             "Cancellation_Reason": null,             "$field_states": null,             "Appointment_For": {                 "module": {                     "api_name": "Contacts",                     "id": "5725767000000002179"                 },                 "name": "John Doe",                 "id": "5725767000005607020"             },             "Rescheduled_To": null,             "$sharing_permission": "full_access",             "Reschedule_Reason": null,             "Additional_Information": null,             "Last_Activity_Time": null,             "Cancelled_Time": null,             "Cancellation_Note": null,             "Modified_By": {                 "name": "Patricia Boyle",                 "id": "5725767000000411001",             },             "Reschedule_Count": 0,             "Rescheduled_By": null,             "id": "5725767000006390001",             "Rescheduled_Time": null,             "Remind_At": null,             "Appointment_End_Time": "2025-04-15T13:30:00-07:00",             "Status": "Overdue",             "Modified_Time": "2025-05-06T20:04:38-07:00",             "Service_Name": {                 "name": "General Check-up",                 "id": "5725767000006387029"             },             "Created_Time": "2025-05-06T20:04:38-07:00",             "testing": null,             "Rescheduled_From": null,             "Cancelled_By": null,             "$editable": true,             "Appointment_Name": "General Consultation",             "Duration": 30,             "Record_Status__s": "Available",             "Created_By": {                 "name": "Patricia Boyle",                 "id": "5725767000000411001",             },             "Tag": [],             "Location": "Business Address",             "Reschedule_Note": null         }     ] } 
 
  | 
Request URL : {{api-domain}}/crm/v8/Appointments__s/5725767000006390001
Request Method: PUT
Request Body:
 
 {     "data": [         {             "Appointment_Start_Time": "2025-04-16T14:00:00-07:00", //Updating the Appointment_Start_Time             "Appointment_End_Time": "2025-04-16T14:30:00-07:00", //Updating the Appointment_End_Time             "Appointment_For": {                 "module": {                     "api_name": "Employees", //Updating a different module                     "id": "5725767000002161028"                 },                 "name": "Patrica", //A record from the Employees module                 "id": "5725767000006272001" //unique ID of the record             }         }     ] } 
 
  | 
Multi-module Lookup Using the COQL API
Querying Inner Fields of Linked Modules within the MML Field
With the COQL API, you can query inner fields of linked modules within a Multi-Module Lookup (MML) field. This provides deeper insights into related fields data in a module. This query support is available from
 Zoho CRM API Version 7.
Sample Query:
 
 {  "select_query": "select 'Appointment_For->Contacts.Lead_Source' from Appointments__s where id is not null" } 
 
  | 
The above query retrieves the 
Lead Source field from the 
Contacts module within the 
Appointment_For MML field. 
Sample Response:

Querying Multi-Module Lookup Module Name
Querying the module name associated with each record in a Multi-Module Lookup (MML) field. This query support is available from 
Zoho CRM API Version 7.
Sample Query:
 
 { "select_query": "select Appointment_For.module.api_name, Appointment_For from Appointments__s where id is not null" } 
 
  | 
The 
Appointment_For.module.api_name returns the module name (e.g., Contacts or Accounts) for each record linked in the 
Appointment_For MML field.
Sample Response:
Multi-module Lookup Using the Bulk Read API
Bulk Read API allows you to fetch a large set of data i.e., you can fetch a maximum of 2,00,000 records in a single API call. 
Specify the API name of the Appointments module in the module JSON object when making API calls. Refer to the following section for an example.
Request Method : POST
Request Body :
 
 {     "callback": {         "method": "post"     },     "query": {         "module": {             "api_name": "Appointments__s" //API name of the Appointments module         },         "file_type": "csv"     } } 
 
  | 
Note: The Appointment_For field cannot be used in the criteria.
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.
Sample Exported Response 
Frequently Asked Questions
1. Which modules are currently supported in the MML field?
Only Contacts and custom modules can be associated with an MML field.
2. What error is thrown if I try to associate a record with a removed or unsupported module in the MML field?
If you try to associate a record with a removed or unsupported module in an MML field, the system will throw an "INVALID_DATA" error.
3. Is the MML field available for all modules?
No, as of 
Zoho CRM API Version 8, the MML field is available only as a system-defined field in the 
Appointments module.
4. How do I get the list of modules associated with an MML field?
You can use the 
GET - Fields Metadata API for the 
Appointments module and look for the field with 
"data_type" : "multi_module_lookup" and check its 
"modules" JSON array.
5. Can I add or remove modules from a Multi-Module Lookup (MML) field via API?
Adding or removing modules in an MML field is not supported via API. These actions can only be done through the Zoho CRM UI.
6. What happens if I remove a module from an MML field?
If a module is removed from the MML through Zoho CRM UI, it can no longer be associated with new records, but existing records linked to that module will remain unaffected.
7. Is MML field supported in the Bulk Write API?
As of 
Zoho CRM API Version 8, the MML field is available only in the Appointments module as a system-defined field. The Appointments module is not supported in the Bulk Write API.
8. Is MML field supported in the Search API?
The MML field is not currently supported in the Search API.
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!!!
Related Readings:
Recent Topics
 
Projects Tasks Not Showing Dependencies
I'm clicking on tasks and the popup to add dependencies isn't showing. I can't disconnect the nodes either. For some reason when I slide a task backwards it says it cannot go before a predecessor, even though there is not predecessor. Double clicking
 
Rules not working properly
I created a rule to display certain fields on certain states. But it seems to be not working. It hides the fields even when I selected California, (which is a state that should show the fields when selected)
 
Notebook font size issue
If I copy something from somewhere and paste it in my notebook, the font size becomes smaller.
 
Sign in process is beyond stupid. I'd rather plug my phone into USB and copy files than sign in to this POS.
792 clicks and fields to fill in just to get into a 3rd rate app is too stupid for me.
 
Ampersand in URL parameter // EncodeURL does not work
Hi Zoho, I have a url link with a parameter. The parameter is including ampersand in some cases (Can be "H&M" or "P&I") When trying to use %26 instead of "&"  (the result I get using EncodeURL()) I get H%26M instead of H&M in the parameter field. How can I solve this? Thanks! Ravid
 
Categorise Attachments
We take ID, proof of address, right to work documentation and more.  I can upload a single file in to field, but we often receive multiple files for each category e.g. someone may send a separate file for the front and back of their national ID card.  My team don't have time to manipulate the files in order to upload them as a single file. The options, as far as I can tell, would be to create additional fields on attachments in order to categorise what the file is, or to be able to upload single
 
Send Whatsapp message from Whatsapp template with custom variables
Hi, I'm trying to do some basic integration for sending WhatsApp messages from Zoho CRM using Zoho Desk whatsapp templates. When creating new whatsapp template in Zoho Desk we can choose ticket related fields as variables but it's not clear how to use
 
ENTER key triggering Submit
Is it possible to stopped the ENTER key from the mandatory triggering of the Submit button on Creator form? I want forms submitted "ONLY" when the Submit button is pressed. 
 
how can we create in zoho crm a new contact when the looup does not find a similar existing one
In forms/integrations/zoho crm / ne w record tab, contact name is to be mapped with my form contact name. When I go in biew edit/lookup configuration, I don t get the options (help dedicated page simply repeat the same info you get in the app) and does
 
Directory Websites
Directories are a good website category to gain search engine traffic. Directories for a professional service category as an example can help their members in search results over their individual website. It would be nice to have a directory template
 
Manage Task on Mobile
How do we manage our task on mobile devices? It seems that there should be a standalone mobile app to handle the new task features. The new features released in regards to Task management are great by the way! Now we need to bring that all together in
 
Set Default Payment Method & Default account
Hi, I would like to know how to set the default payment method and default bank account when recording payments in zoho books. At present we have to change these fields everytime we record a payment, which leads to potential error and as we have a very
 
Unified WhatsApp Number Management in Zoho Desk and SalesIQ
Dear Zoho Desk Support Team, We are currently utilizing both Zoho Desk and Zoho SalesIQ for our customer support operations. While both platforms offer WhatsApp integration, we are facing challenges due to the requirement of separate WhatsApp numbers
 
Customer Portal on Zoho Desk
Hi, I'd like to know more about the items below I found when setting up the Customer Portal on Zoho Desk. Could someone help me explaining these in details? Especially the 2nd and 3rd point. Thanking you in advance! Permissions Customers can sign up for Customer Portal Customers can view tickets of their organization (contacts) Customers must register to access Customer Portal Display Community in Customer Self Service portal
 
Slow Performance on desk.zoho.com. 11/3/2025
I’m not seeing any active service alerts for desk.zoho.com, but everyone on our account is currently experiencing very slow load times when opening or navigating tickets. We’ve already tried the standard troubleshooting steps — clearing cache and cookies,
 
"Authorize to Access Your Account"
Hi, I'm trying to log into cliq on my phone but I can't. It says "Authorize to access your account - Verify your identity to access your account using oneAuth credentials", and asks for a password. I tried maybe 100 different passwords and nothing works.
 
Books API Receiving an Error that Doesn't Make Sense when Creating Credit Note - trying to use 'ignore_auto_number_generation' argument
Hello, I'm working on a newly created routine and I'm getting an error that doesn't make sense when trying to create a new Credit Note. Here is my POST request. Endpoint: https://www.zohoapis.com/books/v3/creditnotes?organization_id=########## Body:     {
 
Computer Showing Offline in Unattended Access
I have a computer that was connected to the internet but showing offline in Assist. I tried uninstalling the program and deleting it from Zoho Assist the reinstalling and it still does not show up. I have been a user for several months and am not pleased with the lack of connectivity with Assist. If this continues I will have to find another product. The computer I reinstalled it on is not even showing up in Assist now. The name is NYRVLI-PC. Thanks
 
Closing Accounting Periods - Invoice/Posting dates
Hi, I have seen in another thread but I'm unsure on how the 'transaction locking' works with regards to new and old transactions. When producing monthly accounts if I close December 24 accounts on 8th Jan 25 will transaction locking prevent me from posting
 
Zoho CRM Portal Error
Hi, We’re experiencing an issue with the Zoho CRM Portal. When we try to access it, we receive an HTTPS connection error: net::ERR_CERT_COMMON_NAME_INVALID. If we proceed past that, we then get a 400 Bad Request error. Could you please help us resolve
 
Can we do Image swatches for color variants?
We want to do something like the attached screenshot on our new zoho store. We need image swatches instead of normal text selection. We want to user to select an image as color option. Is this doable? I don't see any option on zoho backend. Please h
 
Meeting impossible to use when sharing screen
he Meeting tool in Brazil is practically unusable when sharing anything, whether it’s a presentation or simple navigation. When accessed via Cliq, the situation gets even worse: even basic calls fail to work properly, constantly freezing. And as you are
 
Paste issues in ZOHO crm notes
Hi, since a week or so I have issues with the paste function in ZOHO CRM. I use "notes" to copy paste texts from Outlook emails and since a week or so, the pasting doesnt function as it should: some text just disappears and it gives a lot of empty lines/enters.....
 
Integrating Zoho CRM EmbeddedApp SDK with Next.js — Initialization and Data Fetching Issues
You can get an idea from my code I have given in end: First, I worked on a React project and tried the same thing — it worked. My goal was to import the Zoho script and then load contacts using the Zoho Widget SDK, which was successful in React. Now,
 
Feature enhancement: Highlight rows based on a cell value
Hello Sheet users, We're excited to announce a new feature enhacement, shaped directly by your valuable feedback! As you might know, conditional formatting is a great tool for anyone dealing with large data sets. Previously, if you’ve ever wanted to draw
 
Script Editor not an option
I am trying to apply a script to a sheet and Script Editor is not an option. I don't want to go outside Sheets to do this (like Creator) if it can be done inside Sheets.
 
monetizing the courses
Can I add a price for course enrollment ?
 
How to copy value from a single line field into a picklist field within a module's subform?
Hello there, I have a single line field in a module's subform. I would like the value in the field to automatically update a picklist field within the same subform (both have items with the same names). Is this possible via function? Unfortunately, workflows
 
Can we add zoho books features like invoices estemates etc on our zohocommerce website. When our customer login with their account they can able to see all books features in one place on zohocommerce?
Can we add zoho books features like invoices estemates etc on our zohocommerce website. When our customer login with their account they can able to see all books features in one place on zohocommerce?
 
File Field Validation
Hello all, We are tracking our customer NDA agreements in our CRM and have created 2 fields to do so, an execution date field and a file upload field. I want to create a validation rule to ensure that when the execution date field is populated that the
 
Copy paste from word document deletes random spaces
Hello Dear Zoho Team, When copying from a word document into Notebook, often I face a problem of the program deleting random spaces between words, the document become terribly faulty, eventhough it is perfect in its original source document (and without
 
Microsoft Teams now available as an online meeting provider
Hello everyone, We're pleased to announce that Zoho CRM now supports Microsoft Teams as an online meeting provider—alongside the other providers already available. Admins can enable Microsoft Teams directly from the Preferences tab under the Meetings
 
Create custom rollup summary fields in Zoho CRM
Hello everyone, In Zoho CRM, rollup summary fields have been essential tools for summarizing data across related records and enabling users to gain quick insights without having to jump across modules. Previously, only predefined summary functions were
 
Taxes for EU B2B Transactions
Currently, ZC doesn't seem to have a procedure for validating VAT numbers of businesses purchasing in another EU state, and removing local VAT is valid. This is essential for all inter EU B2B trade.
 
Unable to Receive Emails on Zoho Mail After Office 365 Coexistence Setup – Error: 553 Relaying Disallowed
Hello, My domain name is bigniter.com, and I’ve been using Zoho Mail as my email service provider without any issues. Recently, I followed the steps outlined in the Zoho documentation to enable Coexistence with Office 365: 🔗 https://www.zoho.com/mail/help/adminconsole/coexistence-with-office365.html#multi-server
 
How to update custom multi-user field in Zoho Projects?
I'm trying to update custom multi-user fields in Zoho Projects via a Deluge function in CRM. The code I have so far is below. It works for updating standard project fields and single-line custom fields, but it does not work to update multi-user fields.
 
Enhance Sign CRM integration
Hello all, I'm working on a custom Deluge script to enhance the integration between Zoho CRM and Sign by using a writer merge template for additional flexibility. I want to replicate the post-sign document integration that exists between CRM and Sign
 
CRM Related list table in Zoho analytics
In Zoho Analytics, where can I view the tables created from zoho crm related lists? For example, in my Zoho CRM setup, I have added the Product module as a related list in the Lead module, and also the Lead module as a related list in the Product module.
 
Candidate Registration/Invitation
It would be great to include the 'invite' candidate functionality into some of the automation functions - ether through a custom function trigger or webhook or accessible through an email template.  Currently there is no way to add this functionality into any workflows or blueprint steps which, I find limits the ability to invite candidates to engage with us directly through our candidate portal. 
 
[Free Webinar] Learning Table Series - Creator for Infrastructure Management | A Partner-driven collaborative session
Hello Everyone! We’re excited to invite you to another edition of Learning Table Series, where we showcase how Zoho Creator empowers industries with innovative and automated solutions. About the Learning Table Series The Learning Table Series is a free,
 
Next Page