Hello everyone!
In this post, we will discuss how to manipulate the Subform data using Zoho CRM APIs.
A Subform is a data section embedded in the primary form to collect details related to the parent record. It helps in maintaining multiple records under a single parent record.
Using subform, you can create a parent-child relationship between modules, where the parent module represents the primary data and the child module contains the related data.
Data Model Representation
The above diagram shows the data model representation when you create a subform in a module. Consider adding a subform field named Project Details in the Leads module (parent module). Zoho CRM will automatically create
a separate module for the subform field with the specified subform field name - Project Details. Each record within the subform module can have multiple fields, in addition to the system-defined
Parent_Id lookup field, establishing a connection between the
parent (Leads module) and
child (subform module) modules. Through this linking process, one can easily identify which subform record corresponds to which specific lead record.
Use Case
Consider Zylker Consulting organization using Zoho CRM to maintain their leads and their projects. Zylker uses the Project Details subform in the Leads module to collect project-specific information collected from their Leads.
The Project Details subform includes fields such as Project Title,Type, Budget, and Status, in addition to the Parent_Id lookup field.
Now, the Zylker's sales team needs to retrieve all the details of the projects from the Leads module for further project analysis, expected budgets, and status. Let's see how to manipulate these data in CRM using Zoho CRM APIs.
The APIs used in this post
API
| Methods |
Subforms API | GET, POST, UPDATE |
Records API | POST, UPDATE, DELETE |
Search API | GET |
COQL API | POST |
Bulk Read API | POST, GET |
How to retrieve subform records using the Zoho CRM APIs?
To retrieve subform records from the subform module, specify the subform module's API name to access their records or fields.
Step - 1
To know the API names of the subform fields in a module, make a GET - Fields Metadata API call. Among all the Leads' fields, subform field can be identified by the json key data_type with the value subform. Corresponding subform module can be found from the json associated_module. Below is the API call & response for such a subform field.
Request URL :
{api-domain}/crm/v6/settings/fields/{subform_field_id}?module=Leads
Request Method: GET
Sample Response:
Step - 2
Using the api_name of the subform module, make a GET Fields metadata API call to get the list of fields (along with their api_name) in the subform. One of the fields of the subform module will be Parent_Id with the data_type as lookup, pointing to the parent module (here it is Leads).
Request URL
Request Method: GET
Sample Response:
Now you know how to get the API name of the subform and its corresponding fields.
Step - 3
Sample Request and Response to retrieve subform records
The below request will retrieve all the subform records in the Leads module. The linking of subform record to the Lead's module will be available in the Parent_Id field, which is highlighted. The id key inside the Parent_Id json object is the id of the Leads records.

How to add data to the subforms?
To add records to the subform, you need the API name of the subform and its corresponding field API names.
Request URL:
Request Method: POST
Sample Input
{ "data": [ { "Last_Name": "Patricia", "Company": "Info Technology", "Project_Details": //API name of the subform [ { "Project_Name": "Mobile App Development for Productivity", "Project_Type": "Mobile App Development", "Expected_Budget": 50000, "Status": "Negotiation in Process" }, //API names of the subform fields { "Project_Name": "Big Data Infrastructure Implementation", "Project_Type": "Infrastructure Upgrade", "Expected_Budget": 30000, "Status": "Proposal Submitted" }, { "Project_Name": "Big Data Infrastructure Implementation", "Project_Type": "Infrastructure Upgrade", "Expected_Budget": 30000, "Status": "Proposal Submitted" } ] } ] }
|
The above highlighted syntax is used for adding data to the subform records.
Sample Response:
Kaizen
#33 - Subforms API explains in detail how to Fetch, Update, and Delete the subform data with sample requests, inputs, and responses.
Retrieve Subform Data via Search API and COQL API
There may be situations where you need to fetch records based upon certain conditions.
Criteria :
The sales team wants to retrieve the subform records whose budget is
greater than or equal to $40000. In this case, we will use Zoho CRM's
Search API and
COQL API. Let's see how to achieve this.
Search API
To retrieve the records that match your search criteria, retrieve subform data using its corresponding module API name. Note that using Search API, you can fetch data quickly from a single module.
Request URL:
Request Method: GET
Sample Response :
The above response shows all records that meet the specified criteria.How to retrieve subform records from a particular parent record?
To retrieve subforms records in a particular lead record that meet the above criteria, follow the below sample request.
Sample Request URL:
Sample Response:
Retrieving Subforms Data via COQL API
We know that the subform is maintained in a separate module. So, retrieve subform data by querying the subform module's API name and it's parent module via the Parent_Id lookup field.
Request URL:
Request Method : POST
Sample Input:
{ "select_query" : "select Expected_Budget from Project_Details where ((Expected_Budget >=40000) and (Parent_Id = 5725767000002105043))" } |
Sample Response:
Using a Parent_Id (lookup field pointing to Leads module) in the COQL criteria automatically adds a left join to the child module (Project_Details). With that join, criteria can be applied to the fields of the parent module also. Below example illustrates that we want to fetch the Expected_Budget field of the Project_Details module where the Expected_Budget is greater than or equal to 40000 for the corresponding Leads with Annual Revenue greater than 1000000.
{ "select_query" : "select Expected_Budget from Project_Details where ((Expected_Budget >=40000) and (Parent_Id.Annual_Revenue > 100000 ))" } |
From the SQL perspective, above COQL can be interpreted as
select pd.Expected_Budget from Project_Details as pd left join Leads as l on pd.Parent_Id=l.id where pd.Expected_Budget>=40000 and l.Annual_Revenue > 1000000 |
Bulk Read API
Bulk Read API allows you to fetch a large set of data i.e., you can fetch a maximum of 200,000 records in a single API call.
To export subform records in the Leads module in CSV file format, use the subform's API name.
Request URL:
Request Method: POST
Sample input to export subform records:
{ "callback": { "method": "post" }, "query": { "module": { "api_name": "Project_Details" //API name of the Subform module }, "file_type": "csv" } }
|
Export subform records that meet the specified criteria
To export subform records based on the given criteria above (similar to the criteria for Search and COQL APIs).
Sample Input:
{ . . . "query": { "module": { "api_name": "Project_Details" }, "fields": [ "Project_Name", "Project_Type", "Expected_Budget", "Status" ], "criteria": { "field": { "api_name": "Expected_Budget" }, "comparator": "greater_equal", "value": "40000" //Retrieving subform records with an expected budget greater than or equal to $40,000 } } } |
Export subform records that meet the specified criteria for the particular parent record
To export the subform records of a particular parent record in the Leads module. Check the below sample request.
Sample Input:
{ . . . "query": { "module": { "api_name": "Project_Details" }, "fields": [ "Project_Name", "Project_Type", "Expected_Budget", "Status" ], "criteria": { "group": [ { "field": { "api_name": "Expected_Budget" }, "comparator": "greater_than", "value": "39999" }, { "field": { "api_name": "Parent_Id" }, "comparator": "equal", "value": "5725767000002105043" } ], "group_operator": "AND" } } }
|
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, it'll be notified in the callback URL. The records are available in a downloadable CSV file or ICS file (for events). You can export subform records in a module using the subform module API name. See Kaizen #12 Bulk Read API to know how to view the status of the scheduled job and download the file, along with more sample requests and responses.Frequently Asked Questions
Q. Is the API name of the subform case-sensitive? Also, how can I view the API name of a subform field in the web UI?
Yes, the API name of a subform is case-sensitive. To know the API name of a subform module (e.g. Project Details) Please go to Setup -> Developer Hub -> APIs -> CRM API -> API names -> Click on the parent module where the subform was created (e.g. Leads) and scroll down there you can view the subform field's API name.
Q. I changed the order of subform records and made a GET - Records API call. The system listed the records in the same order as displayed in the UI, rather than the order of their creation. Is this the system design?
When you make a
GET - Records API call for a module, it lists the subform records ordered in the UI. Note that you can re-order the subform records. So, when you retrieve those records via the API, they will be listed in the same order as they are arranged in the UI.
Q. Can we change a subform field's API name via API?
You can change the API name of the subform field only through the UI. Go to Setup -> Developer Hub -> APIs -> CRM API -> API names -> Click on the parent module where the subform was created (e.g. Leads) and go to the Field Label section. There you can view the subform field name and edit the API by clicking on the Edit option.
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!
Additional Reading:
Kaizen Posts:
Recent Topics
Invalid value passed for file_name
System generated file name does not send file anymore - what is the problem?
Custom Function for Estimates
Hey everyone, I was wondering if there was a way to automate the Subject of an estimate whenever one is created or edited: * the green box using following infos: * Customer Name and Estimate Date. My Goal is to change the Subject to have this format "<MyFirm>-Estimate
This domain is not allowed to add. Please contact support-as@zohocorp.com for further details
I am trying to setup the free version of Zoho Mail. When I tried to add my domain, theselfreunion.com I got the error message that is the subject of this Topic. I've read your other community forum topics, and this is NOT a free domain. So what is the
Search in module lists has detiorated
Every module has a problem with the search function :-/
YouTube Live #1: AI-powered agreement management with Zia and Zoho Sign
Hi there! We're excited to announce Zoho Sign’s first YouTube live series, where you can catch the latest updates and interact with our Zoho Sign experts, pose questions, and discover lesser-known features. We're starting off by riding the AI wave in
Search in module lists has detiorated
Every module has a problem with the search function :-/
Sales Receipts Duplicating when I run reports why and how do we rectify this and any other report if this happens
find attached extract of my report
Add Zoho Forms to Zoho CRM Plus bundle
Great Zoho apps like CRM and Desk have very limited form builders when it comes to form and field rules, design, integration and deployment options. Many of my clients who use Zoho CRM Plus often hit limitations with the built in forms in CRM or Desk and are then disappointed to hear that they have to additionally pay for Zoho Forms to get all these great forms functionalities. Please consider adding Zoho Forms in the Zoho CRM Plus bundle. Best regards, Mladen Svraka Zoho Certified Consultant and
Bigin: filter Contacts by Company fields
Hello, I was wondering if there's a way to filter the contacts based on a field belonging to their company. I.e.: - filter contacts by Company Annual Revenue field - filter contacts by Company Employee No. field In case this is not possibile, what workaround
Has Zoho changed the way it searches Items?
Right now all of our searches have broken and we can no longer search using the SKU or alias. It was fine last night and we came in this morning to broken.....this is impacting our operations now.
Refunds do not export from Shopify, Amazon and Esty to Zoho. And then do not go from Zoho inventory to Quickbooks.
I have a huge hole in my accounts from refunds and the lack of synchronisation between shopify , Amazon and Etsy to Zoho ( i.e when I process a refund on shopify/ Amazon or Etsy it does not come through to Zoho) and then if I process a manual credit note/
CRM->INVENTORY, sync products as composite items
We have a product team working in the CRM, as it’s more convenient than using Books or Inventory—especially with features like Blueprints being available. Once a product reaches a certain stage, it needs to become visible in Inventory. To achieve this,
Zoho Calendar not working since a few days
Hey there, first off a minor thing, since I just tried to enable the Calendar after reading this in another topic (there was no setting for this though) : For some reason my current session is showing me based in New York - I'm in Germany, not using a
Monthly timesheet, consolidation of time by project
I have time logs for various jobs for project. Is it possible to consolidate the time spent for each job, when I am generating a timesheet for a month? I am getting the entries of jobs done on each day when I generate a timesheet for a month For example
Building a Strong Online Identity with G-Tech Solutions
In today’s fast-moving world, having a strong online identity is essential for every business. https://gtechsol.com.au helps businesses establish a digital presence that reflects their vision and values. By focusing on innovation and quality, they create
Sending emails from an outlook account
Hi, I need to know if it's possible to send automatic emails from an Outlook account configured in Zoho CRM and, if so, how I can accomplish that. To give you some context, I set up a domain and created a function that generates PDF files to be sent later
Struggling with stock management in Zoho CRM – is Zoho Inventory the solution?
My biggest pain point today with Zoho is inventory management. I run a retail business and reliable stock management is absolutely critical. Obviously, I need this inventory to be visible inside the CRM. At first, I tried handling it through custom modules
Automating CRM backup storage?
Hi there, We've recently set up automatic backups for our Zoho CRM account. We were hoping that the backup functionality would not require any manual work on our end, but it seems that we are always required to download the backups ourselves, store them,
Nimble enhancements to WhatsApp for Business integration in Zoho CRM: Enjoy context and clarity in business messaging
Dear Customers, We hope you're well! WhatsApp for business is a renowned business messaging platform that takes your business closer to your customers; it gives your business the power of personalized outreach. Using the WhatsApp for Business integration
can't login Kiosk URGENT
already try, can't login pls help to support. thanks.
【Zoho CRM】CRM for Everyoneに関するアップデート:関連データ機能
ユーザーの皆さま、こんにちは。コミュニティチームの中野です。 今回は「Zoho CRM アップデート情報」の中から、CRM for Everyoneの新機能「関連データ機能」をご紹介します。 関連データ機能は、あるタブのデータを別のタブに柔軟に関連付け、異なるタブで管理されている情報を1か所にまとめて表示できます。 たとえば、組織タブとチームタブのデータを関連付けることで、必要な情報に効率よくアクセスでき、顧客理解を深めながら他チームとの連携もスムーズに行えます。 目次 1. 関連データの設定方法
Zoho Books
How do I manually insert opening balance?
Profit / margins on Sales orders / Invoices / Estimates
When we select an SKU or item name in any of these documents, much info such as invoice.line_items.rate is pulled from the item & filled into the document being worked on. If we had another lineItem DB field (hidden) auto filled at the same time: invoice.line_items.purchase_rate
Inventory to Xero Invocie Sync Issues
Has anyone had an issue with Invoices not syncing to Xero. It seems to be an issue when there is VAT on a shipping cost, but I cannot be 100% as the error is vague: "Unable to export Invoice 'INV-000053' as the account mapped with some items does not
How to activate RFQ? What if a price list has ladder price for items?
Where can I find the option to activate request for quotation? How does it work? If the item has ladder price, does it gets calculated depending on how many items are in the cart?
Mailk got blocked / Inquiry About Email Sending Limits and Upgrade Options
Dear Zoho Support Team, My name is Kamr Elsayed I created this account to use for applying for vocational training in Germany. As part of this process, I send multiple emails to different companies. However, after sending only 8 emails today, I received
Can't join canal Developers Zoho User
Hello, I received an invitation to join this channel, but I get an error when I try to join it, and I get the same error when I go to the Zoho Cliq interface > Search for a channel. Is this because I don't have a license linked to this email address?
Desk Email reply - set default font / use custom font
Hello, in our e-mails, which we send to our customers, a certain font must be used (Corporate Design): Segoe UI https://en.wikipedia.org/wiki/Segoe#Segoe_UI How can this be included? How can this be set as the default font to ensure that this font is
PDF Templates - Checkbox Borders
Is there a way to remove the border of a radio/checkbox on a PDF? I'd like to use the function of checkbox but if there's no easy way to remove the border (the PDF form already has a rectangle so it gets cluttered), then I'm forced to create a single
Zoho CRM's custom views are now deployable from sandboxes
This feature is now available for users in the AU, JP, and CN DCs. This feature is now available for users in CA and SA DCs. New update: This feature is now available for users in all DCs. Hello everyone, We're excited to announce that you can now deploy
Settings Icon No Longer in ZOHO Desk?
In ZOHO desk, there has been a gear icon for settings. as of yesterday, it is no longer there. I showed up briefly this morning but is gone again. Anybody else experiecing this?
Introducing the all-new email parser!
Greetings, We are pleased to introduce to you, a brand-new, upgraded version of the Zoho CRM Email Parser, which is packed with fresh features and has been completely redesigned to meet latest customers needs and their business requirements. On that note,
Tip #43 - Track, Review, and Analyze Your Assist Sessions with Reports-'Insider Insights'
Did you know you can generate detailed reports for both remote support sessions and unattended access sessions in Zoho Assist? This makes it easy to monitor technician activity, measure efficiency, and review customer interactions. Let us now take a closer
Function #20: Custom calculation in item table of invoices
When you create an invoice in Zoho Books, the 'Amount' of a line item is typically calculated as the product of the "Quantity" and the "Rate" of the item. For instance, if an item has a sales rate of $50 and a quantity of 5 is sold, then the amount would
CBSA - GST CHARGES on imports
Hi there, We have a questions about landed cost categorization. We received a shipment from overseas. CBSA invoiced us for the GST on the items. Now we entered the CBSA-GST as a separate bill and attached it as landed cost to the main invoice based on
Simplified Call Logging
Our organization would like to start logging calls in our CRM; however, with 13 fields that can't be removed, our team is finding it extremely cumbersome. For our use case, we only need to record that a call happened theirfor would only need the following
Sub form doesn't as formula field
Is it possible to get formula field in sub form in futures?
Week date range in pivot table
Hello, I need to create a report that breakouts the data by week. I am using the pivot table report, and breaking out the date by week, however the date is displayed as 'Week 1 2014' format. Is there anyway to get the actual dates in there? ex. 1/6/2014-1/12/2014 Thanks,
How do I get Status History data of my Projects?
I want to build a table in Zoho Analytics that Groups by Date, when Projects entered a certain status. I cannot find Status History or any such useful data available in the Setup of my Data Source sync. Please advise how I can achieve this?
Is it possible to hide fields in a Subform?
Since layout rules cannot be used with Subforms, is there another way, or is it even possible, to hide fields in a subform based on a picklist fields within said subform? For example, if the Service Provided is Internet, then I do not want to see the
Next Page