
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
1‑to‑1 invite missing post-setup (needs re-invite) vs channel invite auto-joins without business prompt
1. Zoho Cliq 1‑to‑1 external invite The inviter sent a 1‑to‑1 invite to an invitee who didn’t have a Cliq account. After the invitee completed account setup and created a business/organization, the website redirected them to Cliq, where they opened Cliq
【開催報告】東京 ユーザー交流会 Vol.3 2025/10/17 Zoho サービスの活用促進を外部ツールとの連携で実現!
ユーザーの皆さま、こんにちは。コミュニティチームの藤澤です。 10月17日(金)に新橋で「東京 ユーザー交流会 Vol.3」を開催しました。ご参加くださったユーザーの皆さま、ありがとうございました! この投稿では、当日のセッションの様子や使用した資料を紹介しています。残念ながら当日お越しいただけなかった方も、ぜひチェックしてみてください😊 ユーザー活用事例セッション:Zoho Flowと決済システムの連携 あみろくの岡島さんに、Zoho サービスの活用事例として、Zoho Flow を活用した外部サービスとの連携事例をご共有いただきました。
received email opens in a new tab every time I log in
as per the title: since about when I first made my email account, every single time Ive logged in to view my inbox, a new tab opens for an email I viewed once as if restoring a closed session. I thought I just didnt understand the "starting up" settings
Engage with your customers at scale using WhatsApp Marketing Template messages
Hi everyone, To make it easier for organizations to communicate with customers, Desk now allows you to send individual, mass, and bulk WhatsApp template messages from both the Ticket and Contact modules. How is this going to benefit your business? WhatsApp
Importation Tickets error
Hi, I'm newbie here 🤓 So, i'm importing data from csv, but when I try advance to mapping fields the importer tool show this message: Previously I try import, other data, and not show errors in this step. Some ideas? Best Regards,
Showing description in timesheet and timelogs.
I am wondering if it’s possible in version 5 of Zoho People to have the description show by default or with a manipulation on the user’s part. Let me show you what I mean. As you can see this is the view for the users. Now if they want to see the full
Workaround: openURL in Blueprints - An alternate approach
There is a roundabout way to open a URL in blueprints after a save event. By using the 'onBeforeMandatoryFormSave' in Client Script, you can open an external URL. Now, the problem is, this is designed to be run BEFORE the blueprint is saved, not after,
MTD SA in the UK
Hello ID 20106048857 The Inland Revenue have confirmed that this tax account is registered as Cash Basis In Settings>Profile I have set ‘Report Basis’ as “Cash" However, I see on Zoho on Settings>Taxes>Income Tax that the ‘Tax Basis’ is marked ‘Accrual'
Migrate file from Single File Upload to Multi File Upload
Dears, I have created a new field Multi File Upload to replace the old Single File Upload field. I'd like to ask you guys what is the best way to migrate the files to the new field?
Open "Live Chat" from a hyperlink?
Hi, I often write paragraphs and text on our company website, and usually say you can get in touch with us via live chat. Can the chat window be triggered to pop open without clicking the chat graphic in the bottom window, and use it in a hyperlink? ie:
Zoho Sites search box
Is there a Search box that can be added to a Zoho site? It would be for searching within the site only.
What stops me from packaging and shipping an order when the inventory is negative?
It seems if the inventory value is negative, that Zoho Inventory should not allow me to create a Package and Ship it. But, there seems to be nothing to stop me from doing that other than when I go to physically package the item and realize that there is no stock. There also seems to be nothing on the screen that even indicates to me that I should not package and ship. To me this is the fundamental point of an inventory system. Am I doing something wrong?
Conditional formatting based on another field
Hi I have two fields on my form stage 1 complete and stage 1 deadline. I am trying to setup conditional formatting so that if stage 1 complete is after stage 1 deadline the record is highlighted in red. I need both stage 1 complete and stage 1 deadline
Smartsheet Integration
Has any in the community been able to integrate Zoho Desk with Smartsheets using Zoho Flow? I am trying to get the Smartsheet Row ID based on ticket data and cannot find documentation on the Get Row function for Smartsheet. It is asking for a Query String
Is there API Doc for Zoho Survey?
Hi everyone, Is there API doc for Zoho Survey? Currently evaluating a solution - use case to automate survey administration especially for internal use. But after a brief search, I couldn't find API doc for this. So I thought I should ask here. Than
The sending IP (136.143.188.15) is listed on spamrl.com as a source of spam.
Hi, it just two day when i am using zoho mail for my business domain, today i was sending email and found that message "The sending IP (136.143.188.15) is listed on https://spamrl.com as a source of spam" I hope to know how this will affect the delivery
Changing a Single-Line Text field into a Multi-line Field without losing data
Is it possible to change a Single-Line Text field into a Multi-line Field without losing data. I have a module with data for which I would like to change a single-line field into a multi-line field but I'm worried it might delete the pre-existing da
Webhook - Google Sheets
I have 2 forms that are both integrated with Google Sheets. I've set up a webhook to pull form 1 data from Google Sheets to prefill data in Form 2. The issue I have is that the forms name fields are First Name & Last Name but the Google sheets integration
Verified Mark Certificate
Hello Dears, Can anyone help and check my mail or direct me to the desired person who can add the verification tag to my mail https://www.zoho.com/blog/mail/email-authentication-with-bimi.html
Appointment booking is temporarily unavailable
Embeded Zoho booking page in my WordPress website. When someone starts a booking, after choosing time and date, an error appears before payment - "Appointment booking is temporarily unavailable due to restricted settings." Used the embeded code given
Cannot connect to 365 business calendar and Teams, says personal but it is not.
hi I have a number of users connected to their 365 business accounts. Adding a new user and it thinks hes got 365 personal edition. He does not.... Anyone know what's going on. Trying for days now. Bookings go into his MS calendar but as its thinks its
Limited review (/questions) for Bookings 2.0
Hi all, I'm writing this review of Bookings 2.0 for two reasons: 1) it may be of interest to others, and 2) I'd like to be corrected if I'm wrong on any points. It's a very limited review, i.e. the things that have stood out as relevant, and particularly
Zoho Bookings - Reserve with Google
Does Zoho Bookings plan to to integrate with Reserve with Google?
Tip #3: How to change your booking page language
Displaying your booking page in your target audience's language can greatly increase customer satisfaction. By speaking their language, you will help customers feel more comfortable scheduling with you and create a stronger connection with them. Let's
Bigin Android app update: Alerts while creating tasks outside of working days, conflicting events and calls.
Hello everyone! In the most recent version of the Bigin Android app, we have brought in support to display an alert if task is being scheduled outside of the working days. Also, when scheduling an event or call in the Activities module, a conflict alert
Bigin update: Link email messages to pipeline records.
Hello everyone! In the latest version of the Bigin iOS(v1.11.9) and macOS(1.8.9) app, we have brought in support for an option to link email to pipeline records. This helps you to view emails specific to a deal, especially when a contact is associated
Bigin Android app update: Custom buttons and widgets
Hello everyone! We are excited to introduce custom buttons and widgets on the Bigin Android app. Widgets: A widget is a customizable UI component in Bigin that improves efficiency and user experience. It lets businesses embed components, streamline interactions,
Zoho Sheet for Desktop
Does Zoho plans to develop a Desktop version of Sheet that installs on the computer like was done with Writer?
Collective-booking event not added to all staff calendars
We assign two staff to certain events. When the client books this event, it adds it to one staff calendar (the 'organiser') but not the other. How can I ensure all staff assigned to a collective booking get the event in their calendar? (A side note: it
Project Management Bulletin: October, 2025
Every need leads to innovation. Project Management tools were developed out of sheer necessity to drive large projects. With wide usage, the specifications grew precise, and so did the refinement. Over years we’ve crafted one of the best project management
Zoho Sheets saying locked when not locked
Zoho Sheets won't let me add more rows to sheet because it's saying the sheet is locked, but the sheet is not locked. I tried using a different browser but I still have the same issue.
Identifying and Merging Accounts with Similar (Non-Exact) Names
Hello everyone, I’m aware of the built-in deduplication feature in Zoho CRM that allows merging records with exactly matching values for selected fields. However, I’m running into a situation where our migrated data contains multiple variations of the
Option for super admin to recover the deleted chats in Zoho Cliq
Currently, in Zoho Cliq, if a user accidentally deletes their chats, there is no option for the Super Admin to recover or view those deleted messages. I believe it would be helpful if Super Admins had a recovery option, perhaps within a certain time frame,
Zoho CRM iOS app updates: the Homepage, Zoho Survey integration, and support for multiple file uploads in subform
Hello everyone! The Zoho CRM mobile app continues to evolve to bring you a smoother and more powerful CRM-on-the-go experience. We're excited to share some important updates now available in the iOS app. Here's what's new: Homepage support Zoho Survey
I am trying to integrate my module in sandbox environment to add data via API
I went through the documents and tried to setup the API for adding the module via the api but the problem is the token setup is done on "https://accounts.zoho.in/oauth/v2/token" domain and the bulk write is done on "https://content.zohoapis.com/crm/v8/upload"
Setting up primary mobile number.
Hi Sir Earlier I joined IIFL team and got an organizational email of zoho services. Later i quit and now my account is deactivated with IIFL but i am unable to link my mobile number to my own email id with zoho.
Tables for Europe Datacenter customers?
It's been over a year now for the launch of Zoho Tables - and still not available für EU DC customers. When will it be available?
Guided Conversations - Ticket Creation
Hi there, Using Guided Conversations to Take Customer Data and apply it into a Support Ticket for internal use, Is there a way to take multiple Textual Variables Inputs (A series of questions), and have the answers all appear in the Description of the
How to send certain invoices for Approval based on condition?
To streamline operations, I need the invoices to go for approval when certain conditions are met. For example, if my staff gives a discount of x amount, it must go for approval. If there is no discount, then the invoice will be approved automatically.
Unable to continue payment
Hi, I want to make a payment for my email subscription, but I cannot proceed with the payment because my NITKU is invalid. In Indonesia, the NITKU consists of 22 digits, but Zoho only provides 20 digits, causing my NITKU to be invalid. Please help me
Next Page