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
Critical:- Eneble TDS filing for 26Q from the zoho book
We currently extract TDS data from Zoho Books and manually input it into a separate TDS software to generate the FUV file and file returns. Previously, while using Tally, we benefited from an integrated feature that seamlessly recorded transactions and
Add a way of clearing fields values in Flow actions
It would be great if there was an option to set a field as Null when creating flows. I had an instance today where I just wanted to clear a long integer field in the CRM based on an action in Projects but I had to write a custom function. It would be
Writer loads as a blank page.
Hi, I'm new to zoho but I liked the idea of an online wordprocessor that I can use from multiple computers. I signed up a few hours ago while at work where our computers use Linus Ubuntu and a Firefox browser and the Writer came up fine. Now I'm home and using my Windows machine with Norton Firewall and Firefox and the writer opens as a blank page. I've checked my security options in both Firefox & Norton and I have received all the cookies from Zoho. What gives?
Ensure Consistent Service Delivery with Comprehensive Job Sheets
We are elated to announce that one of the most requested features is now live: Job Sheets. They are customizable, reusable forms that serve as a checklist for the services that technicians need to carry out and as a tool for data collection. While on
JOB Sheet can not send PDF as service rapports and more info needed other topic
Goedendag, - Jullie hebben nu job sheet erin gedaan en dar is echt super goed, enkel kunnen we de werkbon ( JOB sheet) nu niet verzenden als PDF als een service rapport naar onze hoofdaannemer hoe we dat nu doen als bewijs van de levering van het werk
Publish a single Sheet stopped working
I used to have a published sheet on my Zoho Spreadsheet and that stopped working. If I want to publish it again, I only get the message that says "Published externally", but that does nothing, and if I change tabs and come back, the sheet gives me the
Does Zoho Contracts support white-labeling?
As the title says, do you provide us white-labeling solution?
Constantly getting error 429 "Too Many Requests" despite not sending many requests.
I am currently working on developing an integration between our company's app and our zoho books setup using the api. When testing new functionality, I am very often having the calls fail with Error 429 'You have made too many requests continuously. Please
Not receiving emails
I'm able to send emails, but I can't receive any. Please help
Capturing knowledge across many channels
We actively use Cliq for client discussions, product management etc. Often there are great answers to questions or key announcements. We have no way to tag or capture them along the way. Pinning only gets us so far. For example, imagine a product channel
Prepayment of a sales order
How does everyone handle this common (at least it is common for us!) situation? We require all our orders to be fully prepaid before shipment since we manufacture made to order, custom products. Since ZOHO does not allow a sales order to be prepaid, we are forced to create an invoice at the time an order is placed to allow the customer to pay it. Our sales category is therefore skewed, since the sale was actually booked at the time an order was placed, rather then at the time it is shipped, which
Zoho Campaigns Account Keeps Shutting Down
Hey hey, I am completely at a loss here. For months we have been back and forth with Zoho Campaigns Support on Spam Trap hits. Each time they can never provide us with a full list of emails, only 1 here or there. So internally we have setup a integration
Need a way to run a client script longet than 10 seconds
By The Grace of G-D. Hi, Currently, Client Scripts are Timing out at 10 seconds. We have complex logics that needs more time. Can you add a feature request to increase the timeout?
What’s New in 2025 (So Far)
Hey Recruiters, We’ve wrapped up the first half of 2025 with a few focused enhancements in Zoho Recruit—all aimed at simplifying your day-to-day recruitment tasks. Here’s a quick video that walks you through what’s new so far this year: Here’s a brief
Multi-Department Approval for a Single Bill in Zoho Books
Hello everyone, Hope you're all doing well. I’d like to ask if anyone has found a good workaround for the following scenario in Zoho Books: Let’s say a corporate credit card bill or vendor invoice covers multiple purchases across different projects or
Zoho Landing Page "Something went wrong" Error
Hello, Every time I try to create a new landing page, I receive a "Something went wrong" error with no explanation. I cannot create any new pages, which means we cannot use this application. I did create one landing page successfully over a month ago,
Composite items are not seen in zoho commerce
Composite items are not seen in zoho commerce. Are you scheduled to fix this error?
not able to access Zoho from home WIFI
for some reasone i am not able to access Zoho on my laptop or my iphone while i am connected to my home Wifi, i am able to access these sites both on laptop as well as Iphone and associated apps on any other Wifi as well as when I am on my 4G connection
Zoho Books for Service Enterproses
I would like to know how to use Zoho Books for services such as car rental, travel agency, and hotel services. I notice that Zoho Books is good for goods, but for services, it's very difficult to track the profit or loss on each invoice. I need to capture
Email Relay in Zoho Books
I have set up the email relay in Zoho books and the SMTP test was successful. However, I can't figure out how to sent the POs and invoices via the relay so the copy of the message shows in google workspace sent mail. Any guidance is appreciated
E-invoicing/Facturacion Electronica in Peru, SUNAT authority
Hi Zoho, you are promoting your product very actively in south america as well as in Peru, but since few years there is an obligation for e-invoicing, transmitting information directly to peruvian tax authority SUNAT. Do you have any solution for this?
Project Accounting
Hello Zoho, Can we also bring project accounting in Zohobooks as a ne feature in upcoming developments? This will be helpful for specific business and industries. Thanks
Accounts Payable
hi there i am using the free version to trial the software. I am working on the acrual basis. When i received a vendor invoice, it gets keyed into the systems as an unpaid invoice as the payment to from the vendor is 14 days. the unpaid invoice does
Approval Processes "Record Modification"
I didn't find any information about the "Record Modification" item in Zoho articles and Tutorials. I see that this item didn't exist a year ago. Help understand how it works, I tested it and didn't see any difference between "all fields" and "no fie
How do i add another purchase information heading?
i would like to add another section right here to enter an amount which then link directly to the cost of goods sold account
Help with Zoho CRM API Integration in C# WinForms (Token Generation Issue)
Hi everyone, I need your help with integrating the Zoho CRM API into a C# desktop application. My goal is to build a WinForms app in Visual Studio that does the following: Fetch the full list of client projects (module: Deals) and display them in a searchable
Can we share the URL of My zoho Sheets on other websites?
Hello everyone? I have sheets on Zoho and I want to share them on other websites like daraz, homeshopping, gepco duplicate bills, etc. I don't have much knowledge about online sharing question forums? I am a student and have a short survey about online
Add Support to Upload Inventory Items with Categories or Enable Separate Upload for Inventory Categories
Currently, Zoho Inventory does not support uploading new items along with their parent and sub inventory categories using the item import feature. This creates challenges for businesses with structured inventory hierarchies when trying to upload items
in zoho books while categorizing need to add new name in category by replacing expanses how to edit or make changes need assistance
Tip of the Week #62– Use @mentions to loop in teammates.
Ever been stuck on a customer query because you needed input from someone else on your team? Maybe you were unsure about a refund policy or needed help answering a technical question. So you forward the message … and wait. Or worse, you forget to follow
Suggestions for Kiosk Functionality Improvements in Zoho People
Hello Zoho Team, I’d like to share some feedback and suggestions regarding the Kiosk functionality in Zoho People, as there are two important points that affect user experience and compliance: Visual Confirmation of Check-In Status It would be extremely
Needs Separate Permissions levels for Record Attachments
Currently in Zoho Books Record attachments are tied to the general permission level For example if a role don't have the delete permission level they cannot delete the attachment as well If a role doesn't have the edit permission they cannot upload the
Zoho Books integration with Google workspace
How do I integrate Zoho books with Google Workspace? The steps outlined on the Zoho help sections do not correspond to the actual user interface in Google Workspace. Zoho books is installed on admin level for all users, all users can access it from the
Fields of Look up in Custom Modules
We need to create a custom module in Books for Proforma Invoices Now I created a Custom Module and added a Table and in the table added a lookup field and chose Items Now I want Specific fields of the item such as Tax, Item Cost etc but it only displays
Share work items across projects and users
Hello everyone, We're thrilled to introduce a new feature in Zoho Sprints: "Share work item" Collaboration across projects and users is now easier with the introduction of the Share work item feature. You can now share work items with users who are not
Payment Terms Changing Upon Invoicing
Hello! Our standard payment terms for 95% of our customers are Net 30, and all of our customers that these terms apply to have that setting n their customer profile. However, over the last week or so, when an invoice is generated the majority of these
How do I get a refund for email seats?
Hi, I've been using Zoho for awhile and have been paying for 2 seats. Recently, I created another 9 seats, but I also found out that Zoho does not support cold emails, so these 9 seats created for this purpose became useless. It's within 24 hours that
Work Orders / Bundle Requests
Zoho Inventory needs a work order / bundle request system. This record would be analogous to a purchase order in the purchasing workflow or a sales order in the sales cycle. It would be non-journaling, but it would reserve the appropriate inventory of
Narrative 1 - The significance of a business account
Behind the scenes of a successful ticketing system - BTS Series Narrative 1 - The significance of a business account Setting up a proper business account is a crucial step that is often overlooked when launching a ticketing system for your service company,
Changed hosting for domain, Zoho mail stopped working.
I have changed hosting fro my domain and from that time my zoho email stopped working
Next Page