Kaizen #90 - CRM Variables and APIs

Kaizen #90 - CRM Variables and APIs

Hello everyone!
Welcome back to another post in the Kaizen series!

This week, we will discuss what are CRM Variables and variable groups, how to create, update, and delete them through an API and the UI, and a simple example in Deluge of using a CRM variable in a function. 

Let's get started!

What are CRM Variables?

Often, we have the need to reuse certain data in CRM at various places. Instead of creating separate fields to hold such values in every module, we can create an org-level field and use the same value across the CRM system. This field is called a CRM Variable. 
These variables can be of any of the following data types:
  • Decimal
  • Single line
  • Multi line
  • Integer
  • Long integer
  • Percent
  • Currency
  • Date
  • DateTime
  • Email
  • Phone 
  • URL
  • Checkbox

Where can you use CRM Variables?

You can use CRM variables in mail merge templates, email templates, functions, workflows, buttons etc,.

What are Variable Groups?

When you have multiple variables, you can group them together for easy accessibility. For example, it makes sense to group all the authentication variables such as access token, refresh token etc., under a group called "Auth parameters".

How can you create a CRM Variable?

You can create CRM Variables from the UI or through the CRM API.

1. From the UI

  1. Go to Setup > Developer Space > Zoho CRM Variables > Create New Variable.
  2. In the Create Zoho CRM Variable pop up, enter the following details:
    a. The name of the variable in the Variable Name field.
    b. The API name of the variable in the API name field.
    c. A brief description of the variable in the Description field.
    d. The data type of the variable from the Variable Type drop-down.
    e. The group that the variable must belong to in the Grouped Under drop-down.
  3. Click Save.


2. Creating a variable through an API

Request URL: {api-domain}/crm/{version}/settings/variables
Request method: POST
Scope: ZohoCRM.settings.variables.ALL or ZohoCRM.settings.variables.CREATE

Input JSON keys

{
    "variables": [
       {
            "name": "Company Address",
            "api_name": "Company_Address",
            "variable_group": {
                "api_name": "General",
                "id": "3652397000004992001"
            },
            "type": "textarea",
            "value": "#24, Austin, TX",
            "description": "The address of the company when the state is Texas"
        }
    ]
}
where,
Key name and data type
Description
name
string, mandatory
The name of the variable.
api_name
string, mandatory
The API name you want to set for the variable.
variable_group
JSON object, mandatory
The API name and the ID of the variable group you want to group your variable under. If you do not have a variable group, you can only group it under "General". Use the Get Variable Groups API to get the ID and name of the variable group.
type
string, mandatory
The data type of the variable. The possible values are integer, text(for single line), percent, decimal, currency, date, datetime, email, phone, url, checkbox(for Boolean), textarea(for multi-line), and long.
value
string, mandatory
The value of the variable.
description
string, optional
A short description of the variable.

Sample Response


How can you update a CRM variable?

1. From the UI

  1. Go to Setup > Developer Space > Zoho CRM Variables.
  2. Hover over the variable you want to edit. 
  3. Click the "Edit" icon on the left-corner of the variable.
  4. In the Edit Zoho CRM Variable pop up, update the relevant details.

  5. Click Save.
Note
You cannot edit the Variable Type and Grouped Under fields.

2. Through an API

Request URL: {api-domain}/crm/{version}/settings/variables (or)
{api-domain}/crm/{version}/settings/variables/{variable_API_name or Variable_ID}
Request method: PUT
Scope: ZohoCRM.settings.variables.ALL or ZohoCRM.settings.variables.UPDATE

Input JSON keys
Note that besides "id", all the keys are optional based on what details you want to update.
{
    "variables": [
       { 
"id":"3652397000012482002";
            "name": "Company_Address",
            "api_name": "Company_Address",
            "value": "#24, Austin, TX",
            "description": "The address of the company when the state is Texas"
        }
    ]
}

where,
Key name and data type
Description
id
string, mandatory
The ID of the variable you want to update. You can get this ID from the Get Variables API.
name
string
The name of the variable.
api_name
string
The API name you want to set for the variable.
value
string
The value of the variable.
description
string
A short description of the variable.

Sample Response

How can you delete a CRM variable?

1. From the UI

  1. Go to Setup > Developer Space > Zoho CRM Variables.
  2. Hover over the variable you want to delete. 
  3. Click the "Delete" icon on the left-corner of the variable.

  4. Click Delete in the pop up that asks for confirmation.

2. Through an API

Request URL: {api-domain}/crm/{version}/settings/variables/{variable_id} (or) 
                       {api-domain}/crm/{version}/settings/variables?ids=id1,id2..
Request method: DELETE
Scope: ZohoCRM.settings.variables.ALL or ZohoCRM.settings.variables.DELETE

Sample Response


Use cases

Here are a few use cases where you can use CRM Variables.

  • Consider that you have integrated with RazorPay and want to send payment links to deals that you have won. Here, you can store the payment link in a variable and use it in the function that sends the link to the deal through an email.
  • You can improvise the above function, and have a condition that checks whether the payment link is valid or has expired. If it is invalid or expired, you can send an alternate payment link that is stored in another CRM variable.
  • Consider you have scheduled a function to run everyday. Now, you want to run this function except on Saturday and Sunday of a particular month. In this case, you can hard-code the Saturday and Sunday in CRM variables of the DateTime type, and check this while running your function. You case would be "if datetime =={CRM variable}, stop execution".
  • Another classic example of using CRM Variables would be in the banking sector. Consider that you have multiple modules that deal with the rate of interest. This rate will differ based on the tenure, the type of loan, the age of a person etc, and used at multiple places across the org. Here, you can set up variables for the different rates of interests and use them in various places. The best part is, when the rate of interest changes, you have to just change it at one place - CRM Variable. 

Let us see this example in detail.

I have a module called Loans. For home loans, the rate of interest is 10% for all, irrespective of the tenure. 
So, I have created a CRM variable called Interest, whose data type is decimal, and has the value 10.

In the Loans module, I have the following fields:
  • Customer Name(single line) to represent the name of the customer who has opted for the loan.
  • Principal(decimal) to represent the principal they have borrowed.
  • Tenure(number) that depicts the number of years they will repay the loan in.
  • EMI(decimal) to represent the monthly installment.
  • Total(decimal) to represent the total amount they will repay including the interest.
I have a function that calculates the EMI and the Total. Here is the code.

// In this function, we are getting principal, tenure and record id from the record and Interest from CRM Variables. 
//Calculate Total 
Total = Principal + Principal * Interest / 100 * Tenure;
info Total;
//Calculate EMI 
EMI = Total / (Tenure * 12);
info EMI;
//Variable with MAP type to hold the fields and values
record_info = {"EMI":EMI,"Total":Total};
info record_info;
info zoho.crm.getRecordById("Loans",record_id);
//Updating the record
zoho.crm.updateRecord("Loans",record_id,record_info);

The following image shows the function argument mapping.


I have now set up a workflow that is triggered upon record creation. This workflow has the Calculate EMI function associated to it as shown in the following image.


As you can see, in Argument Mapping, I have chosen the CRM variable Interest.

Here is a demo of how the workflow is triggered and function execution.


As you can see, based on the value in the CRM variable, the Total and EMI is calculated through the function triggered by the workflow upon record creation.

We hope you liked this post. We will see you next week with another interesting topic.

Please let us know if you have any questions in the comment section or write to us at support@zohocrm.com.

Cheers!

    • 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

    • Error Code 4: Invalid value passed for JSONString

      Okay, I want to start by saying I know I'm a terrible scripter, so sorry if this is a dumb mistake. I just can't figure it out, even with LLM help. Here's my code: // --- Input Variables --- customer_id = salesorder.get("customer_id"); so_id = salesorder.get("salesorder_id");
    • Organizing contacts/members by company

      I work for a membership organization (representing businesses) and am trying to use Zoho CRM more effectively for managing the points of contact for our members. Currently, our members are listed in our CRM by the primary point of contact's name, but
    • Unable to search in Zoho Email

      I've started using Zoho Email (free version) recently and realized that it doesn't have email search functionality. Am I missing anything here? I've gone through the Zoho tutorial which does show the search bar on the right top of the Zoho UI. But in
    • Response Time Report

      From data to decisions: A deep dive into ticketing system reports Every organization that interacts with its customers should have an established timeframe for how soon an agent is expected to send the first response and any reply to any follow-up messages.
    • Zoho - Outlook plugin

      Does anyone know if there is a way to modify the autofill in the Zoho plugin in outlook? When we create a contact, it enters the correct email address and name, but then pulls information from our own signature line to add phone number, address, etc.
    • Zoho Books - Sales Person Information

      Hi Team, On Invoices, Quotes, etc... I can include the Sales Person, but it only shows their name and not their email or phone number. It would be great to have place on invoice templates where we can manage what sales person information should be shows
    • Offline working in Zoho Creator portal

      Zoho's help says that offline working is only available in the Creator mobile app and not in the portal app. But I can see offline options in the portal app too and it seems to work when I test it. My portal users are often in areas where there is poor
    • Fetch Records using Dynamic Criteria

      Hi,  I have a form that builds a filter based on user input.  I need to fetch the records based on dynamic criteria.  How would I accomplish this as there is no eval function? For example: desiredRecord = Form1[dynamicCriteria];
    • Url filter Report date (pivot chart)

      Hello. Is it possible to filter the data in pivot char using parameters in the url? I'm trying but I should not doing very well. Something like: https://creator.zoho.com/.../....../#Report:MyPivotChartReport?MyDate=01-Jan-2012;31-Jun-2012;MyDate_op=58 Saludos
    • Sending gmail to a particular person fails because the address gets changed to "gmaill", with a second "l" typo somewhere

      I send to bob@gmail.com (example) and get an error sending to bob@gmaill.com, only for this one person. Note the extra "l" in the email the system tried to send to, which was not in the address I entered. Can't find a typo in the contact or anywhere else
    • Emoji Support in Bigin CRM

      We request the implementation of emoji support across Bigin CRM. This feature should allow users to seamlessly use emojis in text fields, headlines, and deals. It would enhance communication, improve the visual appeal of records, and bring more personalization
    • Bigin Booking Pages enhancements

      I would like to ask for several enhancements for the brand new (and promising) Booking feature. 1. Add "Contact/Mobile" Field to Booking form We use Mobile as key (id), but unfortunately it is missing from the Booking form, only Home Phone is available.
    • Amount in words in Indian format

      Hi, I had coded the following code to convert amount in words. But in the code in the format of US like million. But i need in Lakh and Crore. So pls suggest ideas r post corrected code string Num2Words(int val) {     val_s = input.val.toString();     th = {"", "thousand", "million", "billion", "trillion"};     // uncomment this line for English Number System     // th = {"","thousand","million", "milliard","billion"};     dg = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight",
    • What are people using to send Service based emails?

      Zoho Campaigns is for marketing. Users can unsubscribe from these emails. Service based emails need to be delivered and can without the worry of Can-spam act. What are people using to send service based emails? My mailing list is derived from a database
    • Standalone LMS tool

      Will Zoho release a standalone LMS (Learning management System) than can be used by external parties (guest)?
    • Announcing Kiosk 1.1 - Customize screen titles, configure new fields & actions, use values from your Kiosk to update fields, and more.

      Hello all We are back again with more enhancements to Kiosk. So what's new? Enhancements made to the Components Add titles for your Kiosk screens and adjust its width to suit your viewing preferences. Three new fields can be added to your screen: Percentage,
    • An Overview of Dario Schiraldi Deutsche Bank Executive

      Hello Community, Dario Schiraldi is an executive at Deutsche Bank, focused on advancing the firm’s financial services and crafting its global strategic vision. With 20 years of expertise in leadership roles, he has spearheaded successful market acquisitions
    • Emailing a document to WorkDrive

      Does WorkDrive include the ability to upload a document by sending an attachment to an email address? (Books and Expenses include this functionality) If it doesn't is it under consideration? on the Road Map?
    • Allow Changing Appointment Status from "Completed" to "No Show" or Other Valid States

      Hi Zoho Bookings Team, We hope you're doing well. We would like to submit a feature request regarding appointment status management in Zoho Bookings. 🎯 Use Case Sometimes, an appointment is mistakenly marked as Completed, but later we realize that the
    • Zoho One and Tally Integration

      Has Anyone in this forum done any implementation with Zoho CRM and Tally accounting software. If so who have you used and how easy was it?
    • Microsoft PowerPoint files Extremely slow to save

      I and others on my team have noticed that Microsoft PowerPoint documents are extremely slow to save when using WorkDrive. It always takes over 30 seconds to save a file. Word and Excel files seem to save in a typical length of time, but PowerPoint is
    • How can users unblock their blocked Zoho Mail accounts?

      After the reason for the account block (storage exceeded, spam detection etc.) has been rectified, the user can unblock the account from the UnBlock Me page. Account support@edu2review.com  Edu2Review is an education review platform, we rate the quality
    • Adding additional fields for batch information

      Hello, I am looking at adding additional information into our inventory module. we would like to be able to see up to 8 attributes that will be individual & different for each batch (i.e. batch specific information) but currently I seem to only be able
    • Dynamic Pickup List Values using Deluge and Client Script

      I would like to dynamically show Pickup List Values For example we need to fetch some data from an on premise application and display it so they can choose and pick This can be done in Creator but I didn't find anything for CRM
    • Validation Rule for Controlled Stage Movement in Deals Module (Deluge Script)

      For keeping a control over module stage or status, you can use the below deluge script. The below deluge script defines validation control over deals module stages: // Function to validate allowed stage transitions in the Deals module map validation_rule.LeadStatustValidation1(String
    • Pick List Issues

      I have created a pick list that looks at a table in a sheet, it selects the column I want fine. Various issues have come along. The option to sort the pick list is simplistic, only allows an ascending alphabetical sort. Bad luck if you want it descending.
    • Four types of task dependencies

      "Nothing is particularly hard if you divide it into small jobs."                                                                                                                  - Henry Ford Projects, small or large, are driven by simple work units called tasks. Monitoring standalone tasks might look simple but as the workflow becomes elaborate, tasks may start relying on one another. In project management, this relationship between tasks is termed as "Task Dependencies". Dependency between tasks arise
    • 1099 tracking

      Do zoho books offer feature of tracking for 1099's for contractors, etc? Quick books offers this feature and wondered when/if Zoho books will do same
    • VAT-type Taxes in US Edition?

      I'm located in the US, and I use the Zoho One US edition of Books. We are in the process of registering with Canadian authorities for their GST / HST, which is a VAT-type of scheme. It is not immediately obvious to me how one would deal with input tax
    • Schedule sms to be sent later

      When will you make available an option to send sms's at a later time??? You finaly have this option available on emails, so it will be very useful to have it also with sms. Our sms provider, has already this available but we cannot use it because you
    • Ecommerce integration with prestashop

      Development of campaigns integration with prestahop. When???
    • How to create an article containing images and rich text via the api?

      Hi, I'm trying to migrate our kb articles from our previous helpdesk service, and import them to ZohoDesk. Is there any way to create an article that contains images?  Is it possible to add formatting to articles created via the API? Thanks, Adam.
    • Number of statement execution limit exceeded on deluge scheduled function

      I'm working on a send email functionality in creator that sends out crew work orders at the end of the day each day for the next day. I'm running into the issue that zoho is unable to handle the number of statements that I am doing to be able to successfully
    • Zoho SignForm In Progress But Cannot Be Completed

      If a person starts signing a document (via SignForm), but closes the window before submitting, Zoho marks the document "in progress", but how do they finish signing it?
    • How to show Assemblies AND component items in a report

      Hi Is there any way in Analytics to create a report that shows the Composite Item AND the Component Items with mapped quantity? It seems that the component item is not exposed in any table that I can find. Also, the same question but for Stock on Hand.....this
    • Mandatory Messages for Specific Members in Zoho Cliq Channels

      Hello Zoho Cliq Team, We hope you're doing well. We would like to request a feature enhancement to Zoho Cliq that would allow marking certain messages in a channel as mandatory for specific members — with built-in tracking and reminders. 🎯 Use Case:
    • Admin Access to Message Read Statistics in Zoho Cliq

      Hello Zoho Cliq Team, We hope you're doing well. We would like to request a feature enhancement that would allow admins or channel owners to view read/unread statistics for messages, even if they were not the original sender. 🎯 Use Case: Currently, in
    • Online Member Visibility in Channels (Similar to WhatsApp Group Presence)

      Hello Zoho Cliq Team, We hope you're doing well. We’d like to request an enhancement to Zoho Cliq’s channel experience by introducing online presence indicators for channel members — similar to how WhatsApp shows how many people in a group are currently
    • Show ticket field in Zoho Desk only if that same field is not empty (API‑created records)

      Zoho Team , We have a ticket workflow where every ticket is created via API based on dynamic logic from an external form. That form has complex logic and already decides what’s relevant to ask, and the API only populates fields in Zoho Desk based on that
    • Multiple Products on Ticket

      Good morning. We will classify all tickets based on the product. Users sometimes send different requests on the same ticket, so we are facing some challenges. Is there a way to add more than one product to the ticket, or is there a way to tie the product
    • Next Page