Beam Help
Get help now

How-to Β· Zoho CRM

How to retrieve custom links in Zoho

Fetch custom link configurations programmatically.

Custom links in Zoho CRM can be retrieved via a dedicated settings endpoint that accepts a module parameter and returns the configured links for that module.


Why this matters


When building integrations or AI-assisted workflows on top of Zoho CRM, you often need to surface direct navigation links to specific records or modules. Knowing how to query the custom links settings endpoint β€” and how those links are assembled and returned to the end user β€” lets you embed contextual deep-links into dashboards, chat interfaces, or automation tools without hardcoding URLs.


Step-by-step


Step 1. Send a GET request to the /settings/custom_links endpoint in Zoho CRM, passing the target module name as the m parameter (mapped internally to module). This is the dedicated operation for retrieving custom link configurations under the Additional Settings category. [7]


GET /settings/custom_links?module=<ModuleName>

Step 2. The underlying method signature looks like this β€” your integration layer calls getcustomlinks(m), where m is the module string (for example, &quot;Leads&quot; or &quot;Contacts&quot;). The client issues the request with {&quot;module&quot;: m} as the query parameter. [7]


def get_custom_links(self, m: str):
    return self.c.request("GET", "/settings/custom_links", {"module": m})

Step 3. Once you have the raw API result, pass it through the link-building layer. The buildzoholinks function accepts the tool result, the tool name, the parameter dict (which must contain a &quot;module&quot; key), the app type, and the data-center identifier (dc). For CRM records the URL pattern follows https://crm.zoho.{dc}/crm/tab/{Module}/{RecordId}. [1]


Step 4. The dc (data center) value controls which regional domain is used. When dc is &quot;com&quot; the base URL resolves to https://crm.zoho.com; for any other region it becomes https://crm.zoho.{dc}. If your organisation has a CRM org ID configured, the path is further prefixed with /org{crmorgid}. [1]


Step 5. After buildzoholinks runs, each entry in the returned list is a dictionary with three keys: name, url, and type. In a chat or assistant interface these are rendered as labelled deep-links formatted as πŸ”— {name}: {url} and appended to the assistant message under an "Open in Zoho:" heading. [2] [3]


Step 6. The assembled links are also injected into the API response payload under the &quot;links&quot; key, alongside sessionid, response, and toolresult. Downstream consumers can read response_data[&quot;links&quot;] to display or process the URLs independently of the formatted text. [5]


Step 7. In streaming contexts (for example, the /api/chat/stream endpoint), the same buildzoholinks call is made after each read-only action executes. The connection object supplies dc, crmorgid, deskorgid, and desk_portal values, defaulting to &quot;com&quot; if the connection dict is absent. [6] [8]


Common pitfalls


  • Missing module parameter. The getcustomlinks call requires a non-empty m string. Passing an empty or incorrect module name will either return no results or an API error. Always validate the module name against your CRM's active module list before calling the endpoint. [7]

  • Wrong data-center value. If dc is left as &quot;com&quot; but your organisation is on an EU or IN data center, every generated link will point to the wrong domain. Ensure the dc value is pulled from the stored connection configuration rather than hardcoded. [1] [6]

  • Desk vs. CRM link confusion. The buildzoholinks function branches on apptype. If apptype is set to &quot;desk&quot; when you intend CRM links, the output URLs will follow the Desk pattern (https://desk.zoho.{dc}/agent/{portal}/tickets/details/{TicketId}) instead of the CRM tab pattern. [1]

  • Fallback links instead of record links. When no specific record ID can be extracted from the tool result, the function falls back to generic list-view URLs such as /tickets, /contacts, or /accounts. If you are seeing list-view links instead of record-level deep-links, check that the tool result contains the expected record ID fields. [4]

What to check


  • Confirm that the module parameter passed to /settings/custom_links exactly matches the API name of the module in your Zoho CRM organisation (case-sensitive). [7]
  • Verify that the dc value in your connection configuration matches your organisation's actual data-center region so that all generated URLs resolve correctly. [1]
  • After retrieving links, inspect the &quot;links&quot; array in the response payload to ensure each entry contains a valid name, url, and type before rendering them in your UI. [5]

---


*Beam Help provides independent expert guidance for Zoho products and is not official Zoho support.*

Sources cited

  1. [1] server.py: build_zoho_links
  2. [2] server.py: chat_plan
  3. [3] server.py: chat
  4. [4] server.py: chat_plan_stream
  5. [5] GET /settings/custom_links
Retrieve Custom Links | Beam Help β€” Beam Help