Map Dependency Fields in Zoho CRM using APIs

Map Dependency Fields in Zoho CRM using APIs




Hi Everyone!!

Welcome back to another week of Kaizen!

Over the past few weeks, we have been addressing your questions and feedback shared through our Kaizen 200th feedback form. Thank you for your continued engagement and thoughtful queries. We truly enjoy helping users solve real challenges through these Kaizen series.

This week, we will explore the Map Dependency Fields in Zoho CRM, and how you can configure and manage them using Zoho CRM APIs.

Map dependency fields with a use case

In Zoho CRM, dependency fields are also called picklist dependencies. They create a relationship between two picklist fields. A controlling field is the parent field, and a dependent field is the child field. The option chosen in the parent field decides which options should be shown in the child field. Helps you to make easy data entry and maintain cleaner with only relevant options.

In many businesses, one field’s options depend on another. For example, if your support team tracks Issue Type and Sub-Issue, showing all sub-issues at once lets users select incorrect options. A user might accidentally choose Payment Failed under Login Issue. This results in incorrect data selection and makes confusion in records.

Dependency fields solve this problem by creating a parent-child relationship between two picklist fields.

Let us consider the Support Cases module, where two picklist fields are already created:
  1. Parent Field - Issue Type: The value chosen here determines which options appear in the dependent field.
  2. Child Field - Sub-Issue: The available options change dynamically based on the selected value in the parent field.
Below table shows the picklist fields along with their respective options.

                            Issue Type

                                   Sub-Issue 

Login Issue

Forgot Password, Account Locked, 2FA Not Working
Payment Issue

Credit Card Declined, Refund Not Received, Double Charge

Feature Request

New Integration, UI Enhancement, Report Customization

By mapping these fields, CRM users see only the Sub-Issue values relevant to the selected Issue Type.

Without map dependency

Without configuring a map dependency, the Sub-Issue picklist would always display all available options - regardless of the selected Issue Type. For example, users might see options like Forgot Password, Double Charge, and Report Customization all at once. This can easily confuse users and lead to incorrect selections, such as choosing Double Charge under Login Issue.

With map dependency

With mapping dependencies, you can guide users to make correct selections by showing only the relevant options in the child field based on the option selected in the parent field.

Mapping picklist options in UI

You can map picklist field options directly from the Zoho CRM user interface.
Follow these steps:
  1. Go to SetupCustomizationModules and Fields.
  2. Select the desired module. In this case, Support Cases.
  3. Click the (more) icon next to the module name.
  4. Select Map Dependency Fields.
  5. On the Map Dependency Fields page, click the New button to create a new dependency.
  6. Choose the Parent Field and Child Field you want to map.
  7. Click Next button.


      8. Add option mappings to define which child field options should be shown based on the option selected in the parent field, then Save your configuration.

UI options mapping view

Mapping picklist options via API

Before mapping the options, you must need the following APIs :
  1. Modules Metadata API - To know the API name of the module.
    1. Endpoint: GET - /settings/modules
    2. Here, the API name of the Support Cases module is Support_Cases.
  2. Layouts Metadata API - Since dependencies are layout-specific, this API helps you identify the layout ID and all the available picklist fields for mapping. It also provides detailed metadata such as the layout ID, field IDs, and the corresponding picklist value IDs.
    1. Endpoint: GET /settings/layouts?module=Support_Cases

Create Dependency using the POST Map Dependency

Request URL:  {{api-domain}}/crm/v8/settings/layouts/5725767000007972011/map_dependency?module=Support_Cases

Request Method: POST

Input JSON
Each object in the map_dependency array requires a parent field, a child field, and a pick_list_values array that maps each parent option to its relevant child options.


{

    "map_dependency": [ //Array that contains one or more dependency mappings

        {

            "parent": { // Mandatory - Represents the parent picklist

                "api_name": "Issue_Type", //Mandatory - API name of the parent field

                "id": "5725767000007985243" // Mandatory - Unique ID of the parent picklist

            },

            "pick_list_values": [  //Mandatory - List of parent picklist values and their corresponding child mappings

                {

                    "display_value": "-None-",

                    "maps": [

                        {

                            "display_value": "-None-",

                            "actual_value": "-None-",

                            "id": "5725767000007985204"

                        }

                    ],

                    "actual_value": "-None-",

                    "id": "5725767000007985249"

                },

                {

                    "display_value": "Login Issue",

                    "maps": [

                        {

                            "display_value": "Forgot Password", //Label shown in the UI for the parent value

                            "actual_value": "Forgot Password", //Actual stored value of the parent picklist option

                            "id": "5725767000007985185" //Mandatory - Unique ID of the parent picklist option

                        },

                        {

                            "display_value": "Account Locked",

                            "actual_value": "Account Locked",

                            "id": "5725767000007985187"

                        }

                        

                    ],

                    "actual_value": "Login Issue", //Actual value of the parent field's option

                    "id": "5725767000007985242" //Mandatory - Unique ID of the parent field's option

                },

                {

                    "display_value": "Payment Issue",

                    "maps": [

                        {

                            "display_value": "Credit Card Declined",

                            "actual_value": "Credit Card Declined",

                            "id": "5725767000007985191"

                        },

                        {

                            "display_value": "Refund Not Received",

                            "actual_value": "Refund Not Received",

                            "id": "5725767000007985193"

                        },

                        {

                            "display_value": "Double Charge",

                            "actual_value": "Double Charge",

                            "id": "5725767000007985195"

                        }

                    ],

                    "actual_value": "Payment Issue",

                    "id": "5725767000007985244"

                },

                {

                    "display_value": "Feature Request",

                    "maps": [

                        {

                            "display_value": "New Integration",

                            "actual_value": "New Integration",

                            "id": "5725767000007985197"

                        },

                        {

                            "display_value": "UI Enhancement",

                            "actual_value": "UI Enhancement",

                            "id": "5725767000007985199"

                        },

                        {

                            "display_value": "Report Customization",

                            "actual_value": "Report Customization",

                            "id": "5725767000007985201"

                        }

                    ],

                    "actual_value": "Feature Request",

                    "id": "5725767000007985246"

                }

            ],

            "child": { //Mandatory - Represents the child field

                "api_name": "Sub_Issue", //Mandatory - API name of the child field

                "id": "5725767000007985186" //Mandatory - Child picklist field ID

            }

        }

    ]



Sample Response 

{
    "map_dependency": [
        {
            "code": "SUCCESS",
            "details": {
                "id": "5725767000008174001"
            },
            "message": "map dependency created",
            "status": "success"
        }
    ]
}


Retrieve the configured field mappings using the GET Mapped Dependency Fields API

Request URL:  {{api-domain}}/crm/v8/settings/layouts/5725767000007972011/map_dependency/5725767000008174001?module=Support_Cases

Request Method: GET
Sample Response

{
    "map_dependency": [
        {
            "parent": {
                "api_name": "Issue_Type",
                "id": "5725767000007985243"
            },
            "internal": false,
            "active": true,
            "id": "5725767000008180001",
            "source": 1,
            "category": 0,
            "pick_list_values": [
                {
                    "display_value": "-None-",
                    "maps": [
                        {
                            "display_value": "-None-",
                            "actual_value": "-None-",
                            "id": "5725767000007985204"
                        }
                    ],
                    "actual_value": "-None-",
                    "id": "5725767000007985249"
                },
                {
                    "display_value": "Login Issue",
                    "maps": [
                        {
                            "display_value": "Forgot Password",
                            "actual_value": "Forgot Password",
                            "id": "5725767000007985185"
                        },
                        {
                            "display_value": "Account Locked",
                            "actual_value": "Account Locked",
                            "id": "5725767000007985187"
                        },
                        {
                            "display_value": "2FA Not Working",
                            "actual_value": "2FA Not Working",
                            "id": "5725767000007985189"
                        }
                    ],
                    "actual_value": "Login Issue",
                    "id": "5725767000007985242"
                },
              .
              .
              .
            ],
            "child": {
                "api_name": "Sub_Issue",
                "id": "5725767000007985186"
            }
        }
    ]
}
You will get a JSON structure containing all dependency mappings. Check if your parent and child fields appear as configured.

Update the existing mapped options using the PUT Mapped Dependency Fields API

Request URL:  {{api-domain}}/crm/v8/settings/layouts/5725767000007972011/map_dependency/5725767000008174001?module=Support_Cases

Request Method: PUT

Input JSON

{

    "map_dependency": [

        {

            "parent": {

                "api_name": "Issue_Type",

                "id": "5725767000007985243"

            },

            "pick_list_values": [

                {

                    "display_value": "-None-",

                    "maps": [

                {

                    "display_value": "Login Issue",

                    "maps": [

                        {

                            "display_value": "Forgot Password",

                            "actual_value": "Forgot Password",

                            "id": "5725767000007985185"

                        },

                        {

                            "display_value": "Account Locked",

                            "actual_value": "Account Locked",

                            "id": "5725767000007985187"

                        },

                        { // mapped a new option to the existing mapping

                            "display_value": "2FA Not Working",

                            "actual_value": "2FA Not Working",

                            "id": "5725767000007985189"

                        }

                    ],

                    "actual_value": "Login Issue",

                    "id": "5725767000007985242"

                }

            ],

            "child": {

                "api_name": "Sub_Issue",

                "id": "5725767000007985186"

            }

        }

    ]

}





Delete existing dependency using the DELETE Mapped Dependency Fields API

Request URL:  {{api-domain}}/crm/v8/settings/layouts/5725767000007972011/map_dependency/5725767000008174001?module=Support_Cases

Request Method: DELETE

Sample Response


{
    "map_dependency": [
        {
            "code": "SUCCESS",
            "details": {
                "id": "5725767000008174001"
            },
            "message": "map dependency deleted",
            "status": "success"
        }
    ]
}



Assigning picklist values using the Insert Records API

When you insert a record, you can directly pass the picklist option’s display value (not the ID) in the request body.

Request URL: {api-domain}/crm/v8/{module_api_name}
Request Method: POST

Sample Input 

{

    "data" : [

        {

            "Name" : "Support Case 1",

            "Support_Case" : "Login Issue",

            "Issue_Type" : "Login Issue",

            "Sub_Issue":"Forgot Password"

        }

    ]

}


Note: When creating or updating records via API, CRM does not validate the dependency relationship between parent and child picklist values.
To ensure data consistency and prevent data loss, always use the Get Map Dependency API before creating or updating records and to know correct mappings as well. This helps you retrieve the correct parent–child mappings and pass only valid picklist values in your API requests.

FAQs

Q1. Is the Map Dependency field supported in subforms?

Yes. You can configure dependency mappings for picklist fields within subforms as well. The Map Dependency Fields API supports creating parent–child picklist relationships directly inside a subform. To do this via API, use the subform’s API name as the module name when making the dependency mapping call.
This ensures that the dependency is created specifically for the picklist fields inside that subform, not the main module.

Q2. Can I keep the parent field in the main form and the child field in the subform?

Not currently. As of Zoho CRM API Version 8, cross-level mapping where the parent field is in the main form and the child field is in a subform, or vice versa is not supported neither via the UI nor through the API.

You can only:
  1. Map picklists within the main form, or
  2. Map picklists within the same subform.

Q3. What happens if I delete a picklist value that is part of a dependency?

If you delete a picklist option, the corresponding mapping will be automatically removed from the dependency.


Q4. What happens if I rename a picklist value that is part of a dependency?

If you rename a picklist option, the dependency will be automatically updated with the new option label.



We hope this post helps you learn more on mapping dependency fields in CRM using Zoho CRM APIs. Try it out, and let us know your experience in the comment section or reach out to us at support@zohocrm.com 

Stay tuned for more insights in our upcoming Kaizen posts!
Cheers!

    • Recent Topics

    • Is there a way to set Document Owner/Sender via the API

      When sending requests for zoho sign, it would seem zoho uses the id of the person that created the zoho api cred to determine the owner_id, is there a way to set a default for this?
    • What's New - September 2025 | Zoho Backstage

      September has been a different month for Zoho Backstage. Instead of rolling out a long list of new features, we focused on something just as important: Performance, reliability, and stability The event season is in full swing, and organizers are running
    • Prevent stripping of custom CSS when creating an email template?

      Anyone have a workaround for this? Zoho really needs to hire new designers - templates are terrible. A custom template has been created, but every time we try to use it, it strips out all the CSS from the head.  IE, we'll define the styles right in the <head> (simple example below) and everything gets stripped (initially, it saves fine, but when you browse away and come back to the template, all the custom css is removed). <style type="text/css"> .footerContent a{display:block !important;} </style>
    • Stock Quotes/Spreadsheet

      It would be nice if we could download security and mutual fund prices from Yahoo Finance (or?) in order to maintain an up to date investment portfolio on Zoho. Any chance?
    • link to any Belgian bookkeeping software?

      Hello, Does anyone on this Forum can help me with the question whether the ZOHO CRM (Invoices) or ZOHO Book can be linked to software that is used for Belgian Bookkeeping/accountancy? By linking, I mean either with the help of a middleware program or either by the ability to export the custom made reports as CSV-files... If someone has an experience with online CRM-Accountancy in Belgium, with ZOHO (or other), it would be great to read it... Thank you
    • marketing automation

      wants to know about the zoho marketing automation
    • Problems with email templates (HTML - Outlook)

      Hi there, I've been trying to create a newsletter from the template "Business 4". Everything looks great in the preview, but when I send it to my Outlook inbox, the layout doesn't seems to stick. More particularly: - The line-height is way more reduced, even though I used the line-height tool from the template - Columns but they are sometimes misaligned - Font size is not always the one I've selected. Could you help? Thanks!
    • Zoho CRM IP Addresses to Whitelist

      We were told to whitelist IP addresses from Zoho CRM.  (CRM, not Zoho Mail.) What is the current list of IP Addresses to whitelist for outbound mail? Is there a website where these IP addresses are published and updated?  Everything I could find is over
    • How to create a drop down menu in Zoho Sheets

      I am trying to find out, how do I create a drop down option in Zoho sheet. I tried Data--> Data Validation --> Criteria --> Text  --> Contains. But that is not working, is there any other way to do it.  Thanks in Advance.
    • Introducing Keyboard Shortcuts for Zoho CRM

      Dear Customers, We're happy to introduce keyboard shortcuts for Zoho CRM features! Until now, you might have been navigating to modules manually using the mouse, and at times, it could be tedious, especially when you had to search for specific modules
    • 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
    • Scheduling Calls in CommandCenter / Blueprints

      I would love it if you could add a function to schedule a call in the lead's record for a future date. I know you can add a Task by going to Instant Actions > Task and completing the form: These tasks go into the lead's record under Open Actions. But
    • Zoho One - Syncing Merchants and Vendors Between Zoho Expense and Zoho Books

      Hi, I'm exploring the features of Zoho One under the trial subscription and have encountered an issue with syncing Merchant information between Zoho Expense and Zoho Books. While utilizing Zoho Expense to capture receipts, I noticed that when I submit
    • Limit in number of records for subforms and multi-select lookup fields

      It is my understanding that a maximum of 100 items can be selected in a multi-select lookup field, and that a total of 200 items can be selected in total between both subforms in a given module.  Are there any ways to work around this limitation if we
    • Kaizen #136 - Zoho CRM Widgets using ReactJS

      Hey there! Welcome back to yet another insightful post in our Kaizen series! In this post, let's explore how to use ReactJS for Zoho CRM widgets. We will utilize the sample widget from one of our previous posts - Geocoding Leads' Addresses in ZOHO CRM
    • Getting Permission denied to access this portal.

      We have one user that can't login to projects even though access has been granted. This user can login to accounts.zoho.com but when login to https://projects.zoho.com/portals.do we get this error: Unauthorized login to this portal Permission denied to access this portal. Check your portal URL again. Sometimes we also get "server too busy". We have tried killing sessions (in accounts.zoho.com) and we have deleted cookies; and tried different computers and still the same problem. All others use can
    • Marketing Tip #1: Optimize item titles for SEO

      Your item title is the first thing both Google and shoppers notice. Instead of a generic “Leather Bag,” go for something detailed like “Handcrafted Leather Laptop Bag – Durable & Stylish.” This helps your items rank better in search results and instantly
    • Does Zoho Docs have a Line Number function ?

      Hi, when collaborating with coding tasks, I need an online real time share document that shows line numbers. Does Zoho's docs offer this feature ? If yes, how can I show them ? Regards, Frank
    • Setting Default Views for Custom, List and Detail Views

      Hey, Is it possible to set a default custom view, list view and detail view for a module for every user? We are onboarding a lot of non technical people that struggle with these things. Setting the views as default would really help. Btw: also setting
    • 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
    • Filter Based API request in Zoho Books using POSTMAN

      How do I GET only specified CONTACTS based on created time or modified time in Zoho Books using POSTMAN. In the api documentation, it is written we can apply filters but I need a sample request.
    • URL validation

      We use an internal intranet site which has a short DNS name which Zoho CRM will not accept.   When attempting to update the field it says "Please enter a valid URL". The URL I am trying to set is http://intranet/pm/ Our intranet is not currently setup with a full DNS name and given the amount of links using the shortname probably isn't a feasible change for us.
    • Your Incoming has been blocked and the emails will not be fetched in your Zoho account and POP Accounts Click here to get unblocked.

      When entering my account, this error is thrown at me, and I deleted a good part of my deleted messages, but I still can not unblock it, I would appreciate your help. reservas@lineasperutravel.com
    • Has anyone been experiencing slow issues?

      Dear all, I just want to ask if anyone has been experiencing slow issues with Zoho Creator in the past two weeks? I worked with the ISP to improve network quality by changing routes and upgrading bandwidth, but nothing changed. I am in Vietnam.
    • Zoho Projects Roadshows 2025 - USA

      Dear Users, After an amazing response to our roadshows in 2024, we are excited to be back for the second year in a row! Join our team of experts as they walk you through the most-used features in Zoho Projects, explore powerful automation capabilities,
    • Billing Management: #6 Usage Billing in SaaS

      Imagine a customer shuffling across multiple subscriptions, a streaming service, a music app, cloud storage, and a design tool. Each one charges a flat monthly fee, regardless of how much or how little they use. Some months, the customer barely opens
    • Is there anyone who has been experiencing issues regarding the Zoho Creator Certification Website in the past 2 weeks?

      Dear all , I just wanted to ask is there anyone who was planning on taking the Zoho Creator Developer Certification Test in the past 2 weeks and have been facing errors stating that the website is under maintennance and also not allowed to access the
    • Directly Edit, Filter, and Sort Subforms on the Details Page

      Hello everyone, As you know, subforms allow you to associate multiple line items with a single record, greatly enhancing your data organization. For example, a sales order subform neatly lists all products, their quantities, amounts, and other relevant
    • GST Slabs Redefined: Stay Compliant Using Zoho Books!

      Hello Everyone! The Government of India is rolling out new GST rates, a major reform aimed at simplifying the current tax structure starting 22 September 2025. GST will move from four slabs (5%, 12%, 18%, 28%) to two main slabs (5% and 18%), plus a special
    • Allow syncing Activities from other applications

      Marketing Automation could be a much more powerful platform if you were able to sync activities into the platform (e.g. purchase, donation, etc) outside of a user doing something on your website. I'd love it if you could sync Custom CRM Modules as activities,
    • Create static subforms in Zoho CRM: streamline data entry with pre-defined values

      Last modified on (9 July, 2025): This feature was available in early access and is currently being rolled out to customers in phases. Currently available for users in the the AU, CA, and SA DCs. It will be enabled for the remaining DCs in the next couple
    • Global Sets for Multi-Select pick lists

      When is this feature coming to Zoho CRM? It would be very useful now we have got used to having it for the normal pick lists.
    • Introducing Profile Summary: Faster Candidate Insights with Zia

      We’re excited to launch Profile Summary, a powerful new feature in Zoho Recruit that transforms how you review candidate profiles. What used to take minutes of resume scanning can now be assessed in seconds—thanks to Zia. A Quick Example Say you’re hiring
    • Integración Books para cumplir la ley Crea y Crece y Ley Antifraude (VeriFactu)

      Hola: En principio, en julio de 2025, entra en vigor la ley Crea y Crece y Ley Antifraude (VeriFactu). ¿Sabéis si Zoho va a cumplir con la ley para cumplir con la facturación electrónica conectada a Hacienda? Gracias
    • Ask the Experts #1

      Hello everyone! It’s time to transform how you manage projects. Define the processes. Automate the tasks. Streamline the workflows. Let us dive into automation in Zoho Projects — from configuring workflows and custom functions to building triggers, using
    • How to overcome Zoho Deluge's time limit?

      I have built a function according to the following scheme: pages = {1,2,3,4,5,6,7,8,9,10}; for each page in pages { entriesPerPage = zoho.crm.getRecords("Accounts",page,200); for each entry in entriesPerPage { … } } Unfortunately, we have too many entries
    • Checking if Creator has Change History

      Like zForms - whenever an entry was updated there's an option to attached change history to email notif. Trigger -> Successful form submission
    • Your bot just got smarter: AI-Powered routing that reads between the lines

      What if your bot could tell the difference? Between a visitor who just needs a quick answer, someone actively comparing options, and a frustrated customer one click away from leaving? Most bots can't. They deliver the same response to everyone, missing
    • how to use validation rules in subform

      Is it possible to use validation rules for subforms? I tried the following code: entityMap = crmAPIRequest.toMap().get("record"); sum = 0; direct_billing = entityMap.get("direct_billing_details"); response = Map(); for each i in direct_billing { if(i.get("type")
    • Adding contact role to a specific deal js sdk malfunctioning

      i was trying to add the contact role to a specific deal contact but repeatedly i am getting this error: { "code": "SUCCESS", "details": { "statusMessage": { "code": "INVALID_DATA", "details": { "expected_data_type": "jsonobject" }, "message": "body",
    • Next Page