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
Introducing Dynamic Display in Zoho CRM mobile apps
Hello everyone, We're happy to announce that Dynamic Display is now available in the Zoho CRM mobile app for both iOS and Android devices. Mobile apps have become synonymous with convenience and flexibility. As more and more businesses rely on mobile
How we can integrate pdf attachments in zoho crm with xero
when i tried to integrate the data and attchment from zoho crm to to xero only the data get integrated with xero how we can integrate the pdf attachment as well nb zoho apis are not working via functions
Delete user profile
Hello, How can I delete a User Profile?
Send emails directly via Cases module
Greetings all, The ability to send emails from the Cases module, which users have been eagerly anticipating, is now available, just like in the other modules. In Zoho CRM, Cases is a module specifically designed for managing support tickets. If your organization
Introducing delegate signing in Zoho Sign
Hi everyone! We are happy to announce a new feature in Zoho Sign — Delegate Signing! Whether you're tied up in meetings, away on vacation, or managing multiple responsibilities, you can now assign a delegate to sign documents on your behalf. This ensures
Deleting Salutation Field
We have updated our lead input screen and 'Salutation' has appeared. This is not visible in the 'Edit Pgae Layout' screen so cannot be moved to 'List of Removed Fields' Salutation is visible in the list in 'Customization - Fields' however I can only 'Edit' or 'Replace' I cannot delete and I do not need this field on my lead input screen. Please can you advise how to get rid of this. Screen shots can be provided if needed. Thank you Tasha
Zoho Voice VS in Zoho CRM for logging calls
I don't understand the differences between logging calls in Zoho Voice VS in Zoho CRM. Why the 2 separate platforms? Seems confusing
Updates to Auto-Upgrade in Zoho Campaigns
Hello everyone, We've rolled out a new update that slightly modifies how the auto-upgrade option in Zoho Campaigns works. Even if you hit the contact limit, this update ensures that your account is upgraded and that contacts are imported smoothly—without
Adding Sub-Forms to Merge Documents
I am setting up a Mail Merge, which includes sub-form table data. I've done it before but now I am having issues: 1. The headings don't show. I had to enter these manually 2. The table lines are separated. I want them together. Anyone know how to fix
Zoho Bookings Online Training | July 31, 2025
Hi everyone! We’re back with the second session of our Zoho Bookings training series! This time, we’ll show you how to automate your scheduling, manage appointments more efficiently, and explore advanced features for your industry. Join our free, two-hour
Translation of Tooltip Messages
The descriptive help messages should be available to provide translations for.
CREATE button is grayed
On Android adding new notes to notebooks with collections is impossible because the CREATE button is grayed. What can be done?
Can Zoho Creator Apps have multiple actors and steps? Example
Mortgage Application App- Outside party fills out form via published website form, Inside party approves for additional documentation, outside party recieved requests for x, y, and z documents. Outside party submits x, y and z but z is wrong. Inside
Re-Apply SLA When Ticket Reopened from Closed Status?
If you have an SLA applied, timers are deactivated when going to "On Hold" status type and reactivated when going back to an Open status type. What we discovered is when a customer replies to a closed case and it reopens, the SLA is not applied and timers
Zoho Expense Reimbursement
I am using Zoho Expense for employee expenses. At year end I accounted for reimbursement for the founders' expenses by doing a manual entry between employee reimbursements and shareholder loan. All is correct in the balance sheet, but in Zoho expense the expense report totals are showing as owing still. It doesn't impact the books, but I don't want to see amounts owing. How can I zero these out? The only way I can see it is by creating a transaction in Books that pays the employee via a bank
Request to Delete Mistakenly Created Zoho Desk Account – Access Blocked to Company Directory
Dear Zoho Support Team, I hope this message finds you well. I am writing to request assistance regarding a Zoho Desk account I mistakenly created using my company email address. I created the account before being officially onboarded by my company, and
Introducing an AI-driven CAPTCHA for Help Center that offers improved accessibility and enhanced security | Zoho Desk | Product Update
Captcha protects your help center from fraud and abuse without creating friction. What is a CAPTCHA? CAPTCHA is a test used in computing to verify that a user is human by requiring them to complete a challenge. It helps prevent bot attacks and reduce
Announcing new features in Trident for Windows (v.1.29.4.0)
Hello Community! Trident for Windows just got better! It’s packed with new features designed to enhance communication, manage important information securely, and give you a smoother, more productive experience. Let’s dive into what’s new! Access Zoho
Exporting Ticket Threads/Comments and Attachments in Reports
Hi, I would like to know is it possible for Ticket Comments and/or Attachments to be displayed in Reports?
Product management across integrated apps
Hi everyone, I’m setting up my business for selling products and integrating CRM, Inventory/Books, Ecommerce, and other apps. Where should I load products for the first time so they reflect across all apps? And for updating prices or adding new products—where
Calculate Number of Days Between Two Dates
Can someone help me with how to create a field using the formula function to calculate the number of dates between a campaign start date and end date? The closest I have gotten is using the "Datecomp" function but it gives you the dates in minutes, rather
Zoho Writer Docx files not able to be converted into Google Docs
Since July 23rd, I've encountered an issue where DOCX files exported from Zoho Writer no longer convert properly into Google Docs when uploaded to Google Drive. My workflow relies on generating merged DOCX documents from Zoho Forms using Zoho Writer templates,
Schedule Campaign - Recipients Time Zone
Something seems to be wrong with the scheduling feature for scheduling campaigns to be deployed at a specific time to the recipients time zone. I scheduled campaigns twice to be sent at the recipients time zone and the campaigns are deploying at the wrong time. When communicating with Zoho support they said to make sure it was scheduled at least 24 hours in advance so we did this with our last campaign and it was still deployed at the wrong time. Anyone else having this issue?
Zoho Vault App for Windows
Hello, is there a Windows app that can be used to access the passwords saved in Zoho Vault? Thank you
Zoho Cursor Jumping
Hi, Zoho Support, We received the below email for a bug when using Zoho on Firefox. Please let us know if there is anything that can be done to solve this issue. Have any other Zoho Mail users reported issues the past few days with Zoho auto-saving drafts
tomorrow option within the due date section and drag and drop into calendar
Firstly, thank you for creating such a well-designed and user-friendly to-do list app. It’s almost perfect for my needs, but I wanted to offer a couple of suggestions that I believe could significantly enhance its usability, particularly for those who
low quality videos
when in puplish videos or reel in social media platforms it pulished in low quality
Using Zoho Forms vs Zoho Survey
Hello - I'm looking for advice on whether to use Zoho Survey or Zoho Forms for our small non-profit. We have a Zoho One subscription, so have access to both. The main use case at the moment is application forms for our professional development programs.
Kaizen #200 - Answering Your Questions | Authentication using Zoho CRM Python SDK
We’re incredibly excited to bring you the 200th post in our Kaizen series! This journey has been as much about listening as it has been about sharing. And today, we’re making both count. Over the past few weeks, we’ve collected your feedback through the
Zoho CRM sync
Just wondering if the plan is for the Zoho CRM implementation to always be just an import and not a sync? At the very least, a one-way sync that kept the data in Tables up-to-date would increase the amount of usecases, but ideally the option to two-way
Add serial number in print page list
How can i add serial number in print page for every entries?
Trying to Delete records from Creator not found in CRM
Hi, In the following script, I am trying to delete records from Creator not found in CRM, but I am getting the error message "Error at line number: 55 Improper Statement Error might be due to missing ';' at end of the line or incomplete expression". Please
REST API for Branch and Budget
Hi Team, Can you please guide me with the appropriate rest API documentation for fetching Branch and Budget details?
STOP FRAUDULENT TRANSACTION IMMEDIATELY
I DID NOT AUTHORIZE THIS TRANSACTION OR RENEWAL, STOP IMMEDIATELY CHARGING MY CARD I CAN NOT CONTACT SUPPORT, NO ONE IS AVAILABLE ON CHAT PAYMENT ID RPCW2003260759193
Best way to handle a credit card download fiasco
Hi there, hoping that someone knowledgable with book keeping can give me the answer here. One of my credit cards has been integrated with Zoho books and we have been downloading transactions with no issue. The credit card got compromised and was used
When Opening Zoho Mail I always get a Tab with an error (See attached image)
Everytime I open Zoho mail I get this. It is trying to open a deleted email. I already tried going to Settings > While Starting up Changed that option back and forth but this persists. Its annoying. Other than that I love this. Any help would be appreciated.
Pre-Registration - Suggestion
Suggest to add a Pre-Registration feature for non-scheduled events. Scenario is that we have a training academy and would like to collect pre-registrants prior to an actual scheduled event so we can use this as a basis for demand management and scheduling of new events for those expressing interest.
Not all messages showing in folders in iOS mail.app
I have a bunch of emails filed in various folders. Those folders are showing all of the emails in them on Zoho.com and in the Zoho Mail app on my iPhone and my iPad. They also all show up fine in Mail.app on my Mac. The problem is that certain (not all)
Where do the 'Archived' mails go?
I have hit 'Archive' on quite some mails I still needed, but didn't want in my inbox anymore. I obviously thought 'Archive' is not the same as 'Delete', since they don't even pass the trash folder this way, and right now I was looking for one of those
Signature image size changing on replied emails
Hi, Sometimes I see the size of the image I use as signature changes when I open replied emails. Do you know why is this happening? It doesn't seem to happen when I send emails to Gmail though. Signature should look like in attachment "Signature_normal.jpg"
Next Page