
Hello all!!
Welcome back to a fresh Kaizen week.
This week, we will continue with another Actions API -
Webhooks API in Zoho CRM.
Webhooks in Zoho CRM
A webhook allows Zoho CRM to send real-time information to another application the moment something important happens. Webhooks let CRM push data instantly to an external URL whenever the workflow condition is met.
Webhooks do not notify on every record event by default. They trigger only when specific automations, such as a Workflow Rule you configure, are executed. This helps for specific real-time automation needs, such as sending high-value leads to an external validation service.
Use case
Zylker, an IT solutions provider, uses Zoho CRM to manage all incoming leads. But not every new lead is ready for the Sales team right away. Not all leads need immediate follow-ups. For leads with a high Profit Score (80+), it usually means strong buying intent, but they may contain fake information.
Why does Zylker use Zoho CRM and send these leads to an external validation application?
Before Sales reaches out, Zylker wants to make sure these high-value leads have valid information. While CRM keeps the lead data organized, a specialized third-party validation systems check any fraudulent activities and confirm whether the email, phone number, or other details are real.
To do this quickly, Zylker uses Webhooks in Zoho CRM. The moment a lead crosses the 80+ score, Zoho CRM automatically sends the lead’s data to Zylker’s external validation system. This lets Zylker verify the lead in real time and send back a clean, accurate, sales-ready profile for the Sales team to follow up on.
From here, we will explain every part of Webhooks by showing how it looks in the Zoho CRM UI and how to do the same using the API. Each step will be shown side-by-side, so you can clearly see how the UI setup translates into the API request.
Configuring Webhooks for Zylker’s Use Case - UI Method
- Go to Setup
- Navigate to Automation
- Choose Actions -> Webhooks
- Click Configure Webhook
You will see the window shown below.
Webhook - UI view
The following sections explain what each field means in three parts:
- Basic fields to configure Webhook.
- Configuring Headers
- Configuring Body
Filling the basic Webhook details via UI
Filling the basic Webhook details via Create Webhook API
Request URL: {{api-domain}}/crm/v8/settings/automation/webhooks
Request Method: POST
Input JSON
{ "webhooks": [ { "name": "Push High Score Leads", "description": "Send leads with Profit Score > 80 to validation system.", "module": { "api_name": "Leads", "id": "5725767000000002175" }, "authentication": { "type": "general" }, "http_method": "POST" } ] }
|
Keys explanation
- name (mandatory): Name of your webhook.
- description: Add a short note about what this webhook does.
- module (mandatory): Select the module from where the external application listens the changes. In our case, select Leads module to push high-score leads.
- url (mandatory): Specify the external endpoint where CRM will send the data. This lets the external application see what CRM sends.
- Note: In this post, we have used an endpoint from Webhook.site
- authentication (mandatory): Specify authentication type for the webhook endpoint.
- Possible types:
- general: The receiving system does not require OAuth. You can pass OAuth tokens manually in headers.
- connections:
- OAuth-based integrations: Systems that use Zoho’s Connections.
- For our Zylker use case, we select General.
Note: In
Zoho CRM API V8, Webhooks currently support only General authentication. Connection-based authentication will be available in a future update.
- http_method (mandatory): Select a HTTP method that allows you to send structured data.
Possible values: POST, GET, PUT, DELETE
In our case, we use POST to create a new record in the external app with the necessary lead details, allowing the external system to run its validation checks.
HTTP methods and their supported parameters - Headers, Body, URL Parameters
HTTP Method | Headers | Body | URL Parameters |
POST | Module parameters Custom parameters
| Type: form-data
Module parameters Custom parameters User-defined parameters
Formats: null
Type: raw
Formats: Text, JSON, HTML, XML | Not Supported |
PUT | Module parameters Custom parameters
| Type: form-data
Module parameters Custom parameters User-defined parameters
Formats: null
Type: raw
Formats: Text, JSON, HTML, XML | Not Supported |
GET | Not Supported | Not Supported | - Module parameters
- Custom parameters
- User-defined parameters
|
DELETE | Not Supported | Not Supported | Module parameters Custom parameters User-defined parameters
|
Each HTTP method supports different parameter types. The above table shows which methods support Headers, Request Body, and URL Parameters. Detailed explanations of these parameter types are provided in the following section.
Creating a Webhook with Headers, Body, and URL Parameters
When a webhook is triggered in Zoho CRM, the data is sent to the external application as part of the HTTP request.
The data can be sent in three places:
- Headers
- Body (Form-Data or Raw)
- URL Parameters
Each part serves a different purpose.
Configuring Headers
UI - Configuration

Headers allow you to send
extra information along with your webhook request. These help when the external app needs extra data like auth tokens or CRM field values.
Zoho CRM supports two types of headers:
- Module Parameters - Dynamic values from CRM fields
- Custom Parameters - Static values you define
Module Parameters - dynamic CRM data
Module parameters allow you to send values from CRM fields inside the header. These values change depending on the record that triggered the webhook.
A module parameter consists of:
- Parameter Name - A unique header key that you define. It does not have to match the CRM field API name.
- Parameter Type - Defines the source of the data you are mapping. It can come from the selected CRM module such as Leads and Contacts, lookup fields, User fields such as Lead Owner, or Organization fields.
- Parameter Value - The merge field value. Example, ${!Leads.Created_By.id}
Note: If you decide to use Headers, then you must add at least one module_parameter. Otherwise CRM will show an error.
Example:
Parameter Name | Parameter Type | Parameter Value |
Lead_Email | Leads | Email |
Annual_Revenue | Leads | Annual Revenue |
Profit_Score | Leads | Profit Score |
Created_By | Created By | User Id |
Custom Parameters - static values
Custom parameters are key-value pairs that never change.
These are useful for:
- API version
- Tags like “zylker-crm”
Name | Value |
source | zylker-crm |
version | v1 |
Request URL: {{api-domain}}/crm/v8/settings/automation/webhooks
Request Method: POST
Input JSON
{ "webhooks": [ { . . . "http_method": "POST", "headers": { "module_parameters": [ { "name": "Lead_Email", "value": "${!Leads.Email}" }, { "name": "Annual_Revenue", "value": "${!Leads.Annual_Revenue}" }, { "name": "Profit_Score", "value": "${!Leads.Profit_Score}" }, { "name": "Created_By", "value": "${!Leads.Created_By.id}" } ], "custom_parameters": [ { "name": "source", "value": "zylker-crm" }, { "name": "version", "value": "v1" } ] } } ] }
|
When should Zylker use Headers?
For the 80+ Profit Score validation use case, Zylker can include module parameters such as Lead Email, Profit Score, and Lead ID, which are helpful for fraud-detection tools.
Similarly, Zylker can include custom parameters like source=zylker-crm and api_version=v1 to help the external system identify where the webhook originated.
Configuring the Body of a Webhook - form-data & raw formats
After setting up the basic details and Headers, the next step is to configure the Body.
The Body is where the main CRM record data is sent, which is different from the Header section that only carries metadata like auth tokens or quick identifiers.
Depending on your needs, the Body can be either Form-Data or Raw. The list below shows the supported options for each format.
- Form-Data:
- Module parameter
- Custom parameter
- User-defined format.
- Raw:
- Text - plain messages
- JSON - structured API payload
- HTML - formatted messages
- XML - traditional enterprise systems
Form-Data Body: key-value
UI - Configuration
Zoho CRM lets you build Form-Data using three types of parameters:
- Module Parameters
- Custom Parameters
- User Defined Parameters
Use Form-Data when the external app expects key-value pairs - similar to how HTML forms submit data.
Note:
- Headers are for sending supporting information that helps the external system understand the request - this can include auth details, source identifiers, or key CRM fields like email or score that help with quick categorization or filtering.
Why do Module and Custom parameters appear again in Form-Data?
The same Module Parameters and Custom Parameters are available in the Body because:
- Headers - Provide supporting details such as identifiers or quick-check values. For example, Lead ID, or source tags that help the external system check and route the request.
- Body - Contains the complete lead information that the external validation system needs to process.
Although the parameter names look the same (Module, Custom), their purpose changes:
Where parameters are used | Purpose | Example |
Headers | Metadata - OAuth,tags, and context | source: zylker-crm |
Form-Data (Body) | Main record data - actual lead details sent to the app. | lead_email=patricia@zylker.com |
So Zoho CRM gives you the same structure, but used differently depending on where the data is placed.
User-Defined Parameters
User-Defined parameters let you build custom, human-readable messages or templates. This parameter is available only in the Body, not in Headers.
Parameter Name | Parameter Value |
custom_message | New high-score lead: ${Leads.First Name}${Leads.Last Name} (Score: ${Leads.Profit Score}) |
This is very helpful if your external app expects a text message, notes, or a description field.
Configuring the Body of a Webhook - form-data via Create Webhook API
Request URL: {{api-domain}}/crm/v8/settings/automation/webhooks
Request Method: POST
Input JSON
{ "webhooks": [ { . . . "body": { "form_data_content": { "module_parameters": [ { "name": "Lead_Email", "value": "${!Leads.Email}" }, { "name": "Annual_Revenue", "value": "${!Leads.Annual_Revenue}" }, { "name": "Profit_Score", "value": "${!Leads.Profit_Score}" }, { "name": "Created_By", "value": "${!Leads.Created_By.id}" } ], "custom_parameters": [ { "name": "source", "value": "zylker-crm" }, { "name": "version", "value": "v1" } ], "user_defined_parameters": { "name": "custom_message", "value": "New high-score lead: ${!Leads.First_Name}${!Leads.Last_Name} (Score: ${!Leads.Profit_Score})" } }, "type": "form_data" }, . . . } ] }
|
Raw Body - JSON / XML / HTML / Text
Zoho CRM’s Webhook Body section allows you to send data to an external application in a Raw format. This is useful when the receiving system expects structured data in the following structure.
You can choose:
- Raw + Text
- Raw + JSON
- Raw + HTML
- Raw + XML
Raw + Text:
Text format is the simplest. You can type any text and insert merge fields.
UI - Configuration
When to use Text?
- When sending a simple message.
- When the external app only expects plain text.
Configuring the Body of a Webhook - Raw - "Text" via Create Webhook API
Request URL: {{api-domain}}/crm/v8/settings/automation/webhooks
Request Method: POST
Input JSON
{ "webhooks": [ { . . . "body": { "raw_data_content": "New high score lead: ${!Leads.First_Name} ${!Leads.Last_Name}, ${!Leads.Email}, ${!Leads.Annual_Revenue}, ${!Leads.Phone}, ${!Leads.Industry}, ${!Leads.Owner}", "format": "Text", "type": "raw" }, . . . } ] }
|
Raw + JSON:
This is the most common format for APIs. Use this when the receiving system expects structured JSON data.
UI - Configuration
Configuring the Body of a Webhook - Raw - "JSON" via Create Webhook API
Request URL: {{api-domain}}/crm/v8/settings/automation/webhooks
Request Method: POST
Input JSON
{ "webhooks": [ { . . . "body": { "raw_data_content": "{\n \"id\": \"${!Leads.id}\",\n \"full_name\": \"${!Leads.Last_Name}\",\n \"email\": \"${!Leads.Email}\",\n \"company\": \"${!Leads.Company}\",\n \"profit_score\": \"${!Leads.Profit_Score}\",\n \"owner\": \"${!Leads.Owner}\"\n}", "format": "JSON", "type": "raw" }, . . . } ] }
|
When to use JSON?
- When the external system expects structured data
- Easier validation
Raw + HTML:
HTML format is useful for sending stylized messages or formatted content.
UI - Configuration
Configuring the Body of a Webhook - Raw - "HTML" via Create Webhook API
Request URL: {{api-domain}}/crm/v8/settings/automation/webhooks
Request Method: POST
Input JSON
{ "webhooks": [ { . . . "body": { "raw_data_content": "<p><strong>New Lead Alert</strong></p>\n<p>Name: ${!Leads.Last_Name}</p>\n<p>Email: ${!Leads.Email}</p>\n<p>Company: ${!Leads.Company}</p>\n<p>Profit Score: ${!Leads.Profit_Score}</p>\n<p>Owner: ${!Leads.Owner}</p>", "format": "HTML", "type": "raw" }, . . . } ] }
|
When to use HTML?
- If the external system displays formatted output
Raw + XML:
Some legacy systems or enterprise applications prefer XML.
UI - Configuration
Configuring the Body of a Webhook - Raw - "XML" via Create Webhook API
Request URL: {{api-domain}}/crm/v8/settings/automation/webhooks
Request Method: POST
Input JSON
{ "webhooks": [ { . . . "raw_data_content": "<Lead>\n <Id>${!Leads.id}</Id>\n <Name>${!Leads.Last_Name}</Name>\n <Email>${!Leads.Email}</Email>\n <Company>${!Leads.Company}</Company>\n <ProfitScore>${!Leads.Profit_Score}</ProfitScore>\n<LeadOwner>${!Leads.Owner}</LeadOwner>\n</Lead>", "format": "XML", "type": "raw" }, . . . } ] }
|
When to use XML?
- With older systems
- When the receiving system only supports XML
Note:
- When you switch the webhook method in the UI, Zoho CRM changes the options you can configure:
GET Method
- Only URL Parameters are available
- Headers are hidden
- Body is hidden
- Because GET requests always send data through the URL and cannot carry a body.
DELETE Method
- Headers are available
- URL Parameters are available
- Body is still not supported
- DELETE requests can include headers, but Zoho CRM does not allow sending a body for DELETE webhooks.
- Date-time format:
Zoho CRM will format any Date or DateTime fields in your webhook according to the format you select.
UI - Configuration
API - Configuration
{ "webhooks": [ { "module": { "api_name": "Leads", "id": "5725767000000002175" }, "url_parameters": { "module_parameters": [ { "name": "Created_Time", "value": "${!Leads.Created_Time}" } ] }, "description": "Send leads with Profit Score > 80 to validation system.", "http_method": "GET", "name": "Push High Score Leads", "date_time_format": { "datetime_format": "mm-dd-yyyy HH:MM:SS", "date_format": "yyyy-mm-dd", "time_zone": "America/Los_Angeles" }, "authentication": { "connection_name": null, "type": "general" } } ] }
|
With this, we have covered what a
Webhook is in Zoho CRM, how to configure a basic Webhook, how to configure a Webhook with Headers, Body, and URL Parameters, how each component works, how to configure them using the UI, and how the same setup can be created through the
POST Webhooks API.
In Part 2, we will explain
- How to manage Webhooks using the GET, PUT, and DELETE Webhook APIs
- How to associate a Webhook with a Workflow
- How to perform real-time testing by creating records
- How an external application receives data from Zoho CRM via Webhook.
We hope this post helps you understand how to use Webhooks through the Zoho CRM Actions API -
Webhooks API.
Try it out, and let us know your experience in the comments section or reach out to us at
support@zohocrm.com.
Stay tuned for more insights in our upcoming Kaizen posts!
Cheers!
Recent Topics
Introducing 8 New Connectors in Zoho DataPrep!
We’ve just made data management even easier - Zoho DataPrep now supports 8 new external connectors to help you build more robust, scalable ETL pipelines. Why it matters: ✅ Broader data access ✅ More automation, less manual work ✅ Smarter pipelines, better
Sales Order, Invoice and Payment numbers
Hi zoho friends, it is me again, the slow learner. I'm wondering if there is a way to have it so the Sales order, invoice and payment numbers are all the same? It would be easier for me if they were the same number so there is not so many reference numbers
First day of trying FSM in the field.
What we found. 1. with out a network connection we were unable to start a service call? 2. if you go to an appointment and then want to add an asset it does not seem possible. 3. disappointed not to be able to actually take a payment from within the app
How to Automate Email Sequence
I'm having trouble trying to set up a workflow to automate an email sequence. Once a group of emails in a Task has been tagged by a certain tag, I want an instant email template to be sent. After 7 days with no response, another email template would be
Zoho Sprints Android v2.0.4 app update: Item reminders, archive Epics, Kanban projects, Epic progress
Hello everyone! In the latest version(v2.0.4) of the Zoho Sprints Android app update, we have introduced various new features. Let's take a look at what's new! Item Reminder Stay organized and never miss an important date with the all-new Item Reminder
Credit Management: #3 Setting Credit Limit for Customers
Think about that one familiar customer of yours who always buys on credit. They usually pay on time, maybe a little late here and there, but not alarming. So, you are fine saying, "Sure, pay later." Then, one day, they place a significantly bigger order
Update on the client portal URL for Guest users
We’re updating the way Guest users access their Connect network. As part of this change, all client organization portals used by Guest users will now be accessible through a dedicated domain specific to each data center. The access URLs mentioned here
Unable to see Zoho contacts in Zoho app on ios
Hi Support Team, I am a new user, I have created my account and installed zohomail app on iOS 16 which works. I was also able to import my Gmail contacts into Zoho Contacts, which I can see. The problem is that I can’t see these imported cobalts in Zohomail
Task Due Date greater than 10 years.
We use recurring tasks in Projects where every week, month, year etc Some of our projects are greater than 10 years and we are unable to set a new due date because the difference between start date and due date is greater than 10 years. As an example
External User onboarding for zoho connect is not really intuitive.
So the external user is sent an invite, which has a button that directs them to login to zoho to view the invite, but if they don't have a zoho account, they cannot access that invite, which seems kinda silly, as there is not real way on for them to create
Hosting external websites on Zoho?
How can I host my external website on zoho? Do we have that option? I am currently with hostinger and am looking to switch to zoho. Kindly help. Thanks.
How to Add Time Formula Duration (hh:mm)
Hi everyone — I’m trying to create a formula field in Zoho CRM that calculates the difference between a “Call Start Time” and “Call End Time” and displays the duration in HH:MM format (for example: 1:04 for one hour and four minutes). My current setup
How can I calculate the physical stock available for sale?
Hey Zoho Team, I've tried to calculate the physical stock on hand in various ways - but always receive a mismatch between what's displayed in Zoho Inventory & analytics. Can you please let me know how the physical stock available for sale is calculated?
Set Custom Icon for Custom Modules in new Zoho CRM UI
Marketing Tip #4: Build your email list early
Email marketing has one of the highest returns on investment. Don’t wait until later; start collecting subscribers now. When you've got their attention, you can send them emails about offers, new product launches, seasonal greetings, and more. Try this
Is anyone else having trouble saving a custom image in their email signature, or is it just me?
When I try to save the image I get an error that says "Operation Failed" I opened a support ticket two weeks ago and received a response that it would be debugged, but it still isn’t working
Zoho Desk Domain mapping / Cloudflare CNAME not recognized
Hello, my website is behind Cloudflare and SSL. From the Cloudflare control panel I added a CNAME record such as support.mydomain.com pointing to desk.cs.zohohost.com but I'm stuck with the message "Make sure you've mapped the CNAME entry..."
Create an Eye-Catching Announcement Widget for Your Help Center
Hello Everyone! In this week’s edition, let’s explore how to keep your customers updated with exciting news in the Help Center. See how ZylkerMobile wowed their customers by bringing updates right to their portal. ZylkerMobile, the renowned brand for
I want to add my other zoho account in same pc
why does zoho restrict me doing many things as i also want to add my second mail account bit its not allowing me to do that
Search in Zoho Community Not Working
I realize this is a bit of a meta topic, but the search for the various Zoho Communities appears to not be working. I'm under the impression that they run on some version of the Zoho Desk platform, so I'm posting this here.
Capture Stripe’s Customer ID
Does anyone know of a way to capture Stripe’s customer ID that is created when the form/payment is processed? I would like to have the customer ID stored in our CRM so we could utilize in some custom functions down the road.
Custom Modules - Where are Comments??
In the standard ticket module and in the tasks module, we have an interactive comment box that we can post important details/notes and can tag others if needed. Where is this functionality for Custom Modules? Ideally, custom modules would have very similar,
Zoho Mail will not set up in Thunderbird
I am using Thunderbird 13.0.1 in Linux Mint 13 64-bit. I cannot set up my Zoho IMAP email in this client. This is evidently a common problem as evidenced by these postings in the Thunderbird forum: thunderbird can't seem to "find the settings" I cannot configure it for my zoho.com email account I can not get ZOHO to configure. Any suggestions? The best T-bird seems to be able to do is to refer these users to the Zoho forum. I believe the instructions in the Zoho help wiki are correct, although
Zoho ShowTime: Certificates of Completion - Award your learners with a sense of achievement
In our increasingly competitive market, professional trainers need to differentiate themselves if they are to survive. One way to do this is to focus on innovation and deliver an ideal learning experience. By developing a renowned certificate program that provides learners with a specialized skill set for a particular industry, both trainees and future prospects will recognize the trainer's leadership in that field. This can help with long-term growth, revenue generation, and even marketing and branding.
IMAP Migration from Gmail
I have been trying to import my email from a Gmail server and keep receiving the following error. I have reduced the security, activated imap and no improvement. The link to the Google support item has not helped. Unable to connect to your account. Please
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
Request for Creating Multiple Email Accounts on One Mobile Number
Dear Zoho Team, I am planning to shift all my work-related communication to Zoho Mail because of its reliability and features. For my work, I need to create 3–4 separate email accounts for different purposes. Could you please confirm if it is possible
Signature issue
Problem: The signature does not appear when replying or forwarding an email. solve issue: settintgs/Signature Check option place a signature above the content with quotation marks
mail admin not loading
i am trying to login to mailadmin ... gears keeps rotating forever... its not a password issue whats so ever ... not cookies issues whatsoever from android app i can login but there so few things to do from there .. i changed ip address the same... i
Unify All Zoho Video Meeting Experiences into One Standardized Platform
Hi Zoho Team, We would like to share an important user experience concern regarding the current state of video meeting functionality across the Zoho ecosystem. The Problem Within Zoho, there are multiple ways to initiate or schedule a video meeting: Zoho
Changing Account in Quote form does not update address information.
I am trying to update the address information in a quote I've created. I corrected the address in the "Account" but that did not change in the quote. If I re-enter the Account Name in the Quote form, nothing updates. How do I fix this?
Zoho One Backup of entire account
Hello, When using Zoho one is there a way to backup your entire account of all apps that you are using \ activively using in a single step or do you have to backup each applications data individually? Thanks,
Issue with “CC” and “Subject Details” of the initial mail when reply / replied all / forward using Zoho Mail Client (Desktop / Web Mail / Mobile App)
It is observed that when I reply / reply all / forward a mail using Zoho Mail Client (Desktop / Web Mail / Mobile App), the “CC” and “Subject Details” are omitted from the mail which was replied/forwarded. However this is not the case with outlook mail
Unable to send Emails - 452 4.3.1 Temporary System Error
Whene ever i request smtp server to send the email (without attachment). i recieve error "452 4.3.1 Temporary System Error"
I can't receive email
I cannot receive any email sent to my Zoho email after the free upgrade plan trial is finished.
Help for the alisa adding
Sorry, I would like to add a paypal alias on my domain email address. However, the system blocked it. How can I do it?
Lite plan attachment said 250mb but actually 25mb ?
Lite plan attachment said 250mb but actually 25mb ? I can't attach over 25mb files, and can't receive mails has attached files over 25mb too
Any update on much requested feature, to delete attachments without deleting the e-mail body?
People have been requesting the ability to delete e-mail attachments without deleting the e-mail for more than ten years now. The latest I see is marked "Working On It" and a year ago it was supposedly being added, see here: https://help.zoho.com/portal/en/community/topic/is-there-a-way-to-delete-mail-attachments-without-deleting-the-text
Old vs New Value for Deleted Lookup Values
Suppose the following scenario, where a value in a lookup is deleted: 1. User has countries form 2. Form A has a lookup to countries form 3. User selects Italy in Form A and saves it with the Italy ID 4. Form A report shows Italy 5. Italy is inadvertently
Zoho email using a python or html template
# main.py import smtplib import csv from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from config import SENDER_EMAIL, APP_PASSWORD, SMTP_SERVER, SMTP_PORT # email Subject email_subject = "🎉 Python + Zoho Mail HTML Email
Next Page