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
How can I prevent the Zoho Vault extension from automatically logging me out?
Hi, I want the Zoho Vault Chrome extension to never log out. How can I do this? It only allows me to log out for 1 week, and the same applies to the Android app.
Zoho CRM App - Links
Hi Is there are plan for making Custom Links available in the Zoho CRM Android App? I can't see them being added? Thanks Gene
Templates
Trying to sort out / get rid of unwanted invoice templates, the error msgs are not at all helpful. Surely it's easy to amend the error msg by including a list of the names of the customers / vendors that use it, denying deletion or making it inactive
Contacts limit in basic vs standard - what counts? Are customers contacts?
I’ve been using books for a number years for my small business. I only ever work with 20 clients at any given time. I do purchase services from a number of vendors to run my business, so there are some comtacts there too. I used to use the basic package,
Finding missing records
I have a challenge and I am not really sure where to start with it. I can't find any similar threads on here, can anyone help: I have two forms, FormA and FormB. Both forms have records that contain a field called Job_Number. What I am trying to achieve
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?
Updates for Zoho Campaigns: Merge tag, footer, and autoresponder migration
Hello everyone, We'd like to inform you of some upcoming changes with regard to Zoho Campaigns. We understand that change can be difficult, but we're dedicated to ensuring a smooth transition while keeping you all informed and engaged throughout the process.
Process between CRM and Campaigns to ensure double opt-in contacts?
I would like to ask for a few clarifications to ensure we fully comply with best practices and legal requirements: According to the documentation (Zoho Campaigns CRM sync – Default option), the best and recommended way to sync contacts is by using the
What's New in Zoho Inventory | August – October 2025
Hello customers, The last quarter has been incredibly productive! We've released a powerful slate of new features and enhancements in Zoho Inventory designed to give you better control, greater efficiency, and expanded functionality across your inventory
Let's Talk Recruit: Meet Zia, your all-in-one AI assistant (Part-2)
Welcome back to Let’s Talk Recruit series. In Part 1, we introduced Zia and how AI is reshaping the way recruiters work. This time, we’re taking a closer look at how far Zia has come and how each update continues to simplify your everyday tasks. When
Zoho Developer - Feature Request Platform
Zoho Developer is one of the most underatted platform in zoho ecosystem, however, it may just be what zoho needs to welcome more people to use Zoho Services. The more developers you have creating zoho creator applications and zoho extensions the more
Last/Previous month in relative date filter
In the relative date filter, what is the difference between "Last 2 months" and "Previous 2 months"? So, if we are on 25-July, then is my understanding correct of the following: Last 2 months :=: 25-May~24 July Previous 2 months :=: 01-May~30-June Thanks.
Tags get removed from notes on mobile
I don't know why this keeps happening even after all these app updates but if you log out and log back into the app or you reinstall it, all the tags you assigned to your notes get taken off, but if you go on the desktop version the tags are still there.
Show Zoom Link in Recipient's Calendar
We set up meetings within a record, selecting the "Make this an online meeting". We use Zoom. Most of the recipients go to their calendar (usually Gmail or Outlook, corporate) to join the Zoom meeting, but there is no Zoom link in the calendar. Can this
How to fetch custom fields for time entries in Zoho Project API v3
In the previous Zoho Projects REST API, we were able to retrieve custom field details for time entries, including picklist options, using the endpoint: GET /restapi/portal/[PORTAL_ID]/timesheetcustomfields
In the new Zoho Projects API v3, we tried using
VAT rates - exempt and out of scope
Good Evening, UK based company here. I am a bit confused in respect of setting up VAT rates for exempt goods and services; at present I am simply leaving the VAT rate blank in the transactions in order to prevent any VAT appearing in the VAT return. When
Introducing Lead Capture: Empower exhibitors to capture leads effortlessly
Events provide a great opportunity for exhibitors to generate awareness and engage with potential customers. Efficiently distributing attendee information to exhibitors through a seamless and secure way is of paramount importance. Introducing Lead Capture
Work Order Creation Issue
Dear Team, I would like to inquire about the daily limit for Work Order creation in Zoho FSM. Yesterday (02/05/2025) at around 6:30 PM GST, I attempted to create a Work Order, but I have been unable to do so since then. Please find the attached image
Accessing shared mailboxes through Trident (Windows)
Hi, I have a created a couple of shared mailboxes. The mailboxes are showing up on the browser based Zoho workplace, but I cannot seem to figure out how to access my shared inboxes through Trident (Windows). Am I missing something or is this feature not
URGENT: ChatGPT Extension Failing With “gpt-3 Access Error” (Priority Support)
Appreciate support reviewing this urgently. I am a Priority Support member and need immediate clarification on a recurring issue involving the ChatGPT extensions inside Zoho Desk. Both extensions — including the version created and published by Zoho —
Zoho Desk iOS update: Custom buttons, follow/ unfollow option on tickets
Hello everyone! In the most recent Zoho Desk iOS app update, we have brought in support to access the custom buttons configured on web app(desk.zoho.com). Using custom buttons you can seamlessly execute predefined actions directly from their mobile devices,
Zoho pdf suit
Pl. design products with following feature: 1. Please add all features given in Ilovepdf website to work on pdf files. It is mandatory to use pdf in court work. 2. Courts have prescribed New Times Roman, pl. add this font as well 3. Indexing, signature
Zoho Not Working
Today Zoho not wokring
Dynamically autofill fields with URL parameters
I have a zoho form embedded in my organization's WP website. Our users find their account with a search tool, and then can select to open this page with the embedded form. The URL of the page holds the parameter that I need, but I cannot figure out how
User Automation: User based workflow rules & webhooks
User management is an undeniable part of project management and requires adequate monitoring. As teams grow and projects multiply, manual coordination for updating users & permissions becomes difficult and can give way to errors. User automation in Zoho
Integrate Projects for Desk KB article release tasks
Could you please look into the possibility of integrating project tasks for Zoho Desk article release processes? We are looking for an internal integration between Zoho Projects and Zoho Desk's KB article drafting, reviewing and releasing tasks. We could
Issue in Annual Leave
We created a policy to credit 21 days at the Start of the Year An employee has taken 16 days of leaves thought the year, so we expect to see 5 Leaves remaining right? But Zoho People is Showing 12 Days of Leave Balance Available If we check the Leave
Use the searchBy parameter to find user by email address
I'm trying to find a user is Zoho Desk via the Api. In the documentation I see that there is the possibility to add a searchBy parameter in the request. But I can't find how the search values should be formatted. I've tried multiple things and get either
Zoho CRM Community Digest - September 2025 | Part 2
Hello Everyone! Mid-September vibes: fresh tips, smart hacks, and practical Zoho CRM updates all in one place. Let’s dive in. Product Updates: The All-New Address Field! The new Address field type makes it easier to capture complete addresses in one structured
Zoho Vault API: Create new Secrets
Hello, I attempt to Post Secrets to the vault, since the encrypted entries are almost impossible to decrypt, since there is no documentation on how to decrypt them. Like with the lack of documentation on how to descrypt, there are missing information regarding on how to create new secrets/post secrets. Source: https://www.zoho.com/vault/api/#create-a-new-secret When I try to send JSON Informationen as a POST-Request I only receive the error message: { "operation": { "result": { "error_code": "",
CRM and Finance Tab - Add Invoice "Subject " Column
When On a contact in CRM, and you click the Zoho Finace tab, how can I put in the invoice subject line? Or even a custom field for this. We need to see what that invoice is for, without opening it. If we have tons of invoices we need a way to quick
Collections Management: #4 Before, During & After Payment Processing
"Mark, I think the payment link isn't working. Can you send it again?" Staring at a message, Mark got on his phone. This was the third time the same customer had asked him that week. A few minutes later, another message came, "Hey, the invoice total seems
Account name not populating when importing contacts
When importing a csv file to add contacts the account name is blank? Every other filed gets mapped and imported correctly, i.e contact name, phone number. However not the account name which I have mapped to "company" field in my csv file
Suggestion to improve zoho writer
I am using your product, I believe it is very useful, however, i was writing a note and I needed to draw an arrow in different angles to explain a point and I couldn't. it would be helpful, to add draw functions to the zoho writer. thanks
webhook basic authentication
II want to use a webhook to send out a SMS. Unfortunately Twilio does not use an authToken but basic authentication. I created the webhook as POST and get this url: https://{username}:{password}@api.twilio.com/2010-04-01/Accounts/{account}/Messages?body=<BODY>&to=+155555555&from=+1555555555
Custom function return type
Hi, How do I create a custom deluge function in Zoho CRM that returns a string? e.g. Setup->Workflow->Custom Functions->Configure->Write own During create or edit of the function I don't see a way to change the default 'void' to anything else. Adding
Issue with Hour Calculation in Zoho People Attendance Module
I have noticed an issue in the attendance regularization feature of Zoho People. When trying to regularize past dates, the total working hours are not calculated correctly. For example, if I enter a check-in and check-out time for a previous day, the
Push Notification for New Bookings in Zoho Bookings App
when a someone schedules an appointment through the booking page, is there any option to receive a push notification in the mobile app?
Automation in Zoho Sprints
Hi. I have a Sprints board with the following statuses: ToDo, InProgress, CodeReview, Testing, Preprod, Live When a ticket is moved from e.g. Testing to Preprod, the following tags should be modified: remove 'tested OK' remove 'ready for Preprod' add
Export Purchase orders as Excel
Is it possible to export purchase orders as excel rather than PDF? Our suppliers don't want orders made in PDF, they need it to be excel
Next Page