Kaizen #172 - Leveraging the 'crmAPIResponse' Object in Queries

Kaizen #172 - Leveraging the 'crmAPIResponse' Object in Queries



Hello everyone!
Welcome back to another week of Kaizen!

We released the Queries feature sometime back and hope you have tried it out.

A little gist about this feature before we move on to our post.

Zoho CRM's Queries feature enables dynamic data retrieval from both CRM modules and external services, facilitating seamless integration and informed decision-making.

Key Components

  • Sources: Pre-configured sources like Modules and COQL are available, with the option to add custom sources via REST APIs.
  • Queries: Fetch data by selecting modules, writing COQL statements, or specifying REST API endpoints, headers, and parameters.
  • Variables: Incorporate variables in criteria, COQL statements, and endpoints to pass dynamic values during execution.
  • Schema: Auto-generated schemas define the structure of query responses, with editable paths, field types, and labels for customization.
  • Serializer: Utilize JavaScript to manipulate and customize query responses, ensuring data is in the desired format for further processing.

Types of Queries

  • Modules: Retrieve records by selecting specific modules and fields, applying conditions to filter data as needed.
  • COQL (CRM Object Query Language): Write SQL-like queries to fetch data, supporting complex operations like joins and aggregations.
  • REST API: Fetch data from external services by specifying endpoints, headers, parameters, and connections.

With the Queries feature, you can efficiently access and display relevant data within Zoho CRM, enhancing workflow efficiency and decision-making capabilities.

A little insight into Functions before we dive into today's Kaizen!

Functions, Queries, you get the connection, right? Read on!

Many of us use Functions in Zoho CRM extensively to perform our business logic and customize the way things work in Zoho CRM. You can use Functions in blueprints, workflows, Circuits etc.

Let's say you have a function that gets the employee records from the Employees module. Technically, the function executes an API call or an integration task, and gives a response.

The response can be a string or map(JSON), depending on how the function is written and where it is used. Since functions can be used in many places, the same response format may not be the right one to be used in a circuit or a workflow.

This is where the genie 'crmAPIResponse' object comes into picture!

The power of the 'crmAPIResponse' object

The crmAPIResponse object to be returned in the CRM function should encapsulate the response in a way that it can be used in Queries, Circuit, workflow etc. The details needed are encapsulated as a map. It should include details like crmStatusCode, status, message, body in order to construct the desired format for handling data and customizing the error handling logic.

Let's consider the following example function where we use the getRecordByID integration task.

The response of the integration task contains all the fields in that module, but we want only certain parts of the response JSON and also add custom error messages, to be used in other components like Queries, Circuits, etc,.

Here is the code.
{
leadId = "3652397000018025772"; // Replace with a valid Lead ID

// Initialize customAPIResponse map
customAPIResponse = map();

// Fetch lead details
crmResponse = zoho.crm.getRecordById("Leads", leadId);

// Log the raw response for debugging
info "CRM API Raw Response: " + crmResponse;

// Validate and process the response to include only the required fields
if (crmResponse != null && crmResponse.containsKey("id"))
{
// Extract required fields
filteredData = map();
filteredData.put("id", crmResponse.get("id"));
filteredData.put("Last_Name", crmResponse.get("Last_Name"));
filteredData.put("Email", crmResponse.get("Email"));

customAPIResponse.put("crmStatusCode", 200);
customAPIResponse.put("status", "success");
customAPIResponse.put("message", "Lead data retrieved successfully.");
customAPIResponse.put("body", filteredData); // Include only filtered data
}
else
{
customAPIResponse.put("crmStatusCode", null);
customAPIResponse.put("status", "error");
customAPIResponse.put("message", "Invalid or null response from Zoho CRM API.");
customAPIResponse.put("body", null);
}

// Return the customAPIResponse
return {"crmAPIResponse": customAPIResponse};

}


Here, you can see that we have parsed the response of the integration task to get the Last_Name, Email, and record ID using the crmResponse.get("field_API_name") statement and constructed the customAPIresponse object using the customAPIResponse.put("key", "value") statement.
The statement return {"crmAPIResponse": customAPIResponse}; returns the response body as depicted in the previous statements.

Response to the info "CRM API Raw Response: " + crmResponse; statement
"CRM API Raw Response: {"Owner":{"name":"Patricia Boyle","id":"3652397000000186017","email":"p.boyle@zylker.com"},"$field_states":null,..}}}


Response of the return {"crmAPIResponse": customAPIResponse}; statement

{
    "crmAPIResponse": {
        "crmStatusCode": 200,
        "status": "success",
        "message": "Lead data retrieved successfully.",
        "body": {
            "id": "3652397000018025772",
            "Last_Name": "Math",
            "Email": "math@gmail.com"
        }
    }
}

Error response

{
    "crmAPIResponse": {
        "crmStatusCode": null,
        "status": "error",
        "message": "Invalid or null response from Zoho CRM API.",
        "body": null
    }
}

You can see that we have used the crmAPIResponse object to get only the required keys from the response and constructed a much simpler response.
Refer to our help page on Response Object for more details.

Finally, to today's Kaizen!

We've established that you can use the crmAPIResponse object to construct responses in a way that's suitable to be consumed at another place like a circuit or a workflow.
We also know that Queries allows you to have sources of the REST API type to fetch data from various sources. This means that you can have a standalone function that is enabled as a REST API as a source in Queries.

Let's see an example.
There is a simple function that uses the getRecords integration task to get the records from the Employees module.
I have used the crmAPIresponse object to construct a response as shown in the following code.

string standalone.getRecords()
{
result = zoho.crm.getRecords("Employees");
response = Map();
response.put("status_code",200);
response.put("body",{"code":"success","details":result,"message":"function executed successfully"});
return {"crmAPIResponse":response};
}

The response of this function is a string in the crmAPIResponse object as shown in this image.


  1. Save this function and enable REST API.

  2. You can see that the domain is https://www.zohoapis.com. To be able to use this in a Query, register this domain in Trusted Domain.

  3. To create a REST API type source, you must add the source. Go to Setup > Developer Hub > Queries > Sources tab.
  4. Click Add Source and give the details like the name, base URL, headers, and parameters under the Information section.

  5. Click Save.
  6. Go to the Queries tab and click Add Query.
  7. For Source, choose the source you just added.
  8. Under Information, enter the name, API name of the query.
  9. For the endpoint, enter the API Key URL of the function.

  10. Enter the parameter name and values in the Parameter field.
  11. Click Add Serializer if you want to serialize the response. In this example, I have serialized the response to include only the Name, Email, and Position fields in the output. The result contains the 'body' object that we returned in the crmAPIResponse object of the function.

  12. Click Save to save the serialization.
  13. Click Next to view the schema of the query. Make changes as required.
  14. Save the query.
You can now use this query in Canvas or associate it with Kiosk to solve your business needs.

Let us see how the crmAPIResponse object in the function affects the response of the query.

Query with the function without crmAPIResponse:

Let's consider that the function getRecords() does not use the crmAPIResponse object. In that case, the function returns a response that is a string. This response string cannot be serialized or used elsewhere.


Schema of the query without crmAPIResponse:


Query with the function with crmAPIResponse and serialization:

The same getRecords() function that uses the crmAPIResponse object allows you to construct the response as JSON. You can serialize this response easily and use it in a circuit, query, workflow etc.


You can see here that the response is now a JSON.

Schema of the query with crmAPIResponse:



In conclusion, you can use the crmAPIResponse object in Functions to construct the desired response and use the REST API-enabled function as a source in Queries.
Leveraging the advantage of the crmAPIResponse object in functions and using it in Queries increases the prospect of solving many more business cases easily and customize more efficiently.

We hope you liked this post and found it useful. Let us know your thoughts in the comments.
If you'd like us to cover any other topic in this series, feel free to comment or reach us at support@zohocrm.com.



Cheers!

------------------------------------------------------------------------------------------------------------------------------------------------
Info
More enhancements in the COQL API are now live in Zoho CRM API Version 7. Check out the V7 Changelog for detailed information on these updates.






    • Sticky Posts

    • Kaizen #198: Using Client Script for Custom Validation in Blueprint

      Nearing 200th Kaizen Post – 1 More to the Big Two-Oh-Oh! Do you have any questions, suggestions, or topics you would like us to cover in future posts? Your insights and suggestions help us shape future content and make this series better for everyone.
    • Kaizen #226: Using ZRC in Client Script

      Hello everyone! Welcome to another week of Kaizen. In today's post, lets see what is ZRC (Zoho Request Client) and how we can use ZRC methods in Client Script to get inputs from a Salesperson and update the Lead status with a single button click. In this
    • Kaizen #222 - Client Script Support for Notes Related List

      Hello everyone! Welcome to another week of Kaizen. The final Kaizen post of the year 2025 is here! With the new Client Script support for the Notes Related List, you can validate, enrich, and manage notes across modules. In this post, we’ll explore how
    • Kaizen #217 - Actions APIs : Tasks

      Welcome to another week of Kaizen! In last week's post we discussed Email Notifications APIs which act as the link between your Workflow automations and you. We have discussed how Zylker Cloud Services uses Email Notifications API in their custom dashboard.
    • Kaizen #216 - Actions APIs : Email Notifications

      Welcome to another week of Kaizen! For the last three weeks, we have been discussing Zylker's workflows. We successfully updated a dormant workflow, built a new one from the ground up and more. But our work is not finished—these automated processes are
    • Recent Topics

    • Different languages for users

      Hello, Do you plan to enable individual users to select their languages for interface? Currently language can be changed for everyone - it looks like a settings for a whole portal, which is not good when you are working internationally. Best regards,
    • Issues migrating Google email

      I am considering Zoho because Google will start charging for G Suite legacy free edition.    So, a key element in my decision is the ability to migrate as much from Google as possible.  I am giving email a try first, but after hours of trying, I can't
    • "Print" option of GET Expense Report API not working

      Hello! I have been trying to use the "print" option of the GET Expense Report API but it seems the option does not alter the output. Is there an issue with the API or am I using it wrong? Here's my request code, in Deluge: response = invokeurl [ url :"https://www.zohoapis.com/expense/v1/expensereports/"
    • Related List Expanded View in Zoho CRM: see more related records at a glance, filter and take bulk actions

      Hello everyone! Related lists show you the records connected to what you're working on: contacts under an account, activities tied to a deal, products linked to a quote. But until now, you could only see 10 records at a time. If you needed to filter results
    • How to automatically update a % field according to a dropdown field in the Quote table

      Hello there, I have following couples: Success % Status 0% NP 30% No Feedback 50% PR 80% Opp. Concreta 100% A I would like the Success % field (percent) to automatically update based on the item of the Status field (dropdown). The fields are within the
    • CRM iOS App Missing Tags support

      Hi, I remember reading either a tread on iOS (Maybe Later) & Android (i believe Now Supported) regarding “Tags” in the mobile apps unfortunately I can’t seem to find either. Could we clarify are “Tags” support coming to CRM iOS app as searching the forums
    • Marketing Tip #41: Add a clear value proposition to your homepage

      When someone lands on your homepage, they should understand what you sell and why it is worth exploring within 5 seconds. If your homepage is too vague, cluttered, or focused only on design, visitors may leave before they even start browsing. A strong
    • Zoho Writer adds conditional logic and AI assistance to formulas: A step toward dynamic document automation

      Hi users, We are excited to announce new formula enhancements in Zoho Writer. This includes: New string formulas: Use 12 new string functions to dynamically transform and manipulate text in documents and automation templates. Conditional formulas: Configure
    • What's New in Zoho Billing | June 2026

      Hello users! June brings a new set of updates to Zoho Billing designed to strengthen how you manage subscriptions, customise your records, and handle expense documentation. This month's highlights include a new one-time addon quoting workflow for subscriptions,
    • [Zoho Writer webinar] Driving productivity through document automation

      Live webinar on July 9, 2026 | Time: 2 PM IST | 2 PM EST Hi Zoho Writer users, Creating, reviewing, approving, and distributing business documents manually can slow teams down and introduce errors. Join our live webinar to learn how Zoho Writer helps
    • Free Webinar Alert! Zoho Workplace + Zoho Billing: Align Rev-ops and collaboration for greater efficiency

      Hello Zoho Community! Want to make your billing process more connected and efficient? Join our upcoming webinar to see how Zoho Workplace and Zoho Billing work together to streamline your day-to-day operations. In this session, we'll show you how to manage
    • Canvas View: Add font family selection (incl. Google Fonts / Hebrew & RTL fonts)

      Hi Zoho CRM team, The Canvas design suite (List View, Tile View, Table View and Record Detail) currently allows customizing font weight, size, color, alignment and case - but there is no option to choose the font family. All text is rendered in the built-in
    • Introducing Spotlight Forms

      Hey form builders! If someone opens your form, sees the wall of fields ahead, and quietly closes the tab. It may not be because the questions were hard. It could be because the experience felt like too much. Which is why we have now introduced a new form
    • 【無料/オンライン】7/22開催|Zoho ワークアウト|ユーザー同士で学び合うオンラインもくもく会

      ユーザーの皆さま、こんにちは。 コミュニティグループの中野です。 7月開催の「Zoho ワークアウト」のご案内です。 本イベントは、Zohoユーザー同士で交流しながら、 設定・検証・運用改善を進めるオンラインの「もくもく会」です。 「設定を進めたいけれど、一人だと手が止まってしまう」 「他社がどう活用しているのか知りたい」 「同じ課題を抱える仲間と話したい」 そんな方にぴったりのイベントです。 ▶︎ 参加登録はこちら(無料 ) URL:https://us02web.zoom.us/meeting/register/t7lA28wlQceRW6sZpeFEhQ
    • DYK 9: Dependent Layout Rules

      Did you know that you can configure dependent fields in Task and Issue Layouts? In a project, tasks and issues vary in nature and so do the fields needed for each. Displaying relevant fields and values keeps the layout organised and ensures necessary
    • Does anyone else wish you could download Mail Merge quotations from the Zoho CRM mobile app?

      Is it just me, or has anyone else run into this? I’m in sales, so I’m rarely at my desk. I’m usually in meetings, visiting clients, or travelling. One thing that genuinely frustrates me is that if a client asks me for a quotation, I can’t generate or
    • Introducing parent-child ticketing in Zoho Desk [Early access]

      Hello Zoho Desk users! We have introduced the parent-child ticketing system to help customer service teams ensure efficient resolution of issues involving multiple, related tickets. You can now combine repetitive and interconnected tickets into parent-child
    • [Free webinar] Creator Tech Connect - Zoho Creator product updates, July 2026

      Hello everyone, We’re excited to invite you to another edition of the Creator Tech Connect webinar. About Creator Tech Connect The Creator Tech Connect series is a free monthly webinar comprised of pure technical sessions, where we dive deep into the
    • Text on Zoho Sign confirmation dialouge is very small compared to text used everywhere else on Zoho Sign.

      I've reported multiple times through Zoho's support email that the text on this notification is very small in contrast to all the other text on the Zoho Sign app. I think it's a bug and it just needs the font size to be increased. It's very minor but
    • Feature Request: Dynamic Date Filter Criteria

      Please implement the ability to select a dynamic date for all Filter Criteria. This would be helpful to create views that don't constantly need to be updated (example custom date field on an account) Examples: - Today - Tomorrow - This week - This Month
    • There is no link between Deals and Projects in Analytics

      Hello there, I am trying to link Deals with Projects in a Pivot view on Zoho Analytics. However, there is no relationship, yet on CRM there is a relationship. As you can see below, there is no link between them: However, on CRM, if you go into a Deal,
    • How to Access Zoho Mail Messages to Microsoft Outlook? - Zoho Mail Converter

      Zoho Mail is the free email hosting service which provide mailing with CRM service, so if you are one of them who is trying to import Zoho Mail emails to Outlook then keep reading. In this article we are going to provide accurate solution that will help you to import Zoho Mail emails to Outlook format in Batch. Zoho Mail service provide option to export mailbox in Zip format. So first – Export Zoho Mail emails in Zip format later use Zoho Mail to Outlook Converter to migrate Zoho emails into PST
    • Zoho Cliq REST APIs v3 : A complete guide to what's changed and why 

      APIs are not just consumed by a developer with numerous automations and a series of open browser tabs. They are parsed by LLMs, fed into agent pipelines, and auto-completed by AI coding assistants that have zero tolerance for inconsistency. A verb tucked
    • Zoho CRM Reports Module on Mobil App

      I have the mobile app and the reports module doesn't appear in the sidebar for some reason. I saw a Youtube video where the user had the Reports module on mobile. Is there a setting to show it on mobile? Thanks.
    • Sigma function call hangs forever from Desk widget — app_install_id/encapiKey are null

      Calling ZOHODESK.request() from the widget to invoke a Sigma DRE function URL hangs forever (never resolves, never rejects, no error) until client timeout. Tried with merge fields app_install_id={{sigmaInstallId}}/{{installationId}} and encapiKey={{enCapApiKey}}
    • Workdrive on Android - Gallery Photo Backups

      Hello, Is there any way of backing up the photos on my android phone directly to a specific folder on Workdrive? Assuming i have the workdrive app installed on the phone in question. Emma
    • Auto sync Photo storage

      Hello I am new to Zoho Workdrive and was wondering if the is a way of automatically syncing photos on my Android phone to my workdrive as want to move away from Google? Thanks
    • Postcode problems

      So we were very pleased to see we could limit shipping with postcodes. Brilliant. Unfortunately we have discovered It does not seem fit for purpose. In the UK we write postcodes in various ways Examples BH217NL BH21 7NL Bh217nl bh217NL and many more ways
    • Getting Notifications but unable to load email

      I am getting notifications through the web browser and my phone app that i am receiving emails, but i can not open the email to view. Below is the screen shot of the console panel.
    • WORKFLOW ISSUE: Zoho Finance Extension

      Workflows are no longer triggering in my extension. This is true for the testing environment and 5 other organizations it is installed on. There are no conditions set for the workflow, and this is true for both create and delete related actions. Workflows
    • Certain items certain shipping

      Me again it would be helpful to have different shipping for different categories. Our example are salt. Delivery is free but have a minimum delivery. Pickup is cheaper so it has its own category- pickup.
    • Zia Agents looks promising, but I still cannot deploy my first agent or connect WhatsApp after weeks of support tickets

      Hi Everyone, I am posting here because I am stuck and need practical help from someone who has successfully deployed a Zia Agent with WhatsApp. Zia Agents looks like a very promising product. I have watched the platform expand quickly, and I have noticed
    • Handling Hard Bounce Contacts with Active Phone-Based Users (WhatsApp Use Case)

      In Zoho Marketing Automation, when a contact is marked as “Hard Bounce”, we noticed that the contact stops receiving updates from CRM fields and may be excluded from automations. Is this expected behavior? In our case, the primary identifier and verified
    • Integration with existing websites

      So most companies have existing websites. They want to integrate an online store with their existing site. How is that possible in zoho commerce please.
    • Subject: Message bar - reducing height and adding scrolling/rotating messages

      Hello Zoho Commerce Support, I am building my store (Moksha Collections) and have the Message Bar enabled and positioned at the top. I have two questions: 1. Height: Is there a native setting to reduce the height (thickness) of the message bar? It currently
    • Moving over to commerce but shipping

      In our company we love zoho onebut currently use ECWID for our online shop which is annoying as it requires double entering invoices. our requirements are that we do local deliveries limited by postcode -these are free. we also allow pickup they get a
    • Website not properly connecting with Zoho Creator app portal (embed & data sync issue)

      Hello Zoho Community, I’m currently facing an issue while trying to connect my external website with a Zoho Creator app portal. I have a tool-based website ( https://mygardencalculator.com/ ) where users interact with calculators and dynamic content.
    • Show current inventory in the item list table for a composite item

      Hello. We have many products that are composite items. Quickly determining inventory levels of individual items that make up a composite item would be beneficial. IDEA: Add columns"current inventory" and "available inventory" to the item table of the
    • Increase the "Maximum Saved Entries per User" Options Limit

      Hi, You can create lots of saved entries, yet the Limit when you apply one is 25, we may often expect 32 to be in draft, and therefore want to enforce that, can we increase the limit of this field from 25 to 100 (As you can just turn it off and have more
    • When Zoho Tables Beta will be open to EU data center

      Hello all, We in EU are looking at you all using and testing and are getting jealous :) When we will be able to get into the beta also? We don't mind testing and playing with beta software. Thank you!
    • Next Page