
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
Need Faster Help? Try Live Chat Support
Hello there, We understand that sometimes, whether you’re facing an issue, exploring a feature, or need quick clarification, sending an email and waiting for a response just doesn’t cut it. You need answers, and you need them now. That’s exactly why we
Can't deactivate Spell Check
Hi Community, right now I'm using the Zoho Mail Desktop-Software. So far, so good.. many possibilities. Overall very nice. What is extremely annoying right now, is that we are not able to deactivate the Spell Check feature. And we are barely able to focus
Zoho Toolkit Email Signature Generator
I'm having real issues with the email signature generator with no matter where I host the photo, Zoho doesn't seem to show the photo on the link provided?
Company Policy Upload - Request All EE to review and sign
How can I upload policies into Zoho People and have the employees review them and sign off saying they agree, etc.? Also, if I make a revision to a policy, I would like that changed or updated policy to be distributed or have the employees notified that
Zoho Sign Global Settings vs. Template and Document
Hello, We are running into an issue on a current use case. We already use Zoho Sign. Now that KBA is available, we want to begin using it in our tax delivery process, by allowing clients to sign electronically, but also download a copy of their return
Zoho Mail Desktop Crashes on Linux - Ubuntu 24 LTS
Hi, I have been trying to run the desktop app on Ubuntu for the past few day with no luck. I have tried both the .deb package and the appImage. When I attempt to open the app. It just crashes immediately. The crash error dialog appeared once and I cant
Can't login to Zoho mail
I'm logged into Zoho but when I try to go in zoho mail I get: Invalid request! The input passed is invalid or the URL is invoked without valid parameters. Please check your input and try again. I just set up my mx records and stuff with namecheap a few
Zoho IP blocked by SpamCop
Hi, Many of my emails are blocked and I receive this: INVALID_ADDRESS, ERROR_CODE :550, ERROR_CODE :spamcop.mimecast.org Blocked - see https://www.spamcop.net/bl.shtml?136.143.188.51. - https://community.mimecast.com/docs/DOC-1369#550 [DGwIYPPSOfWI
Differences between Zoho Books and Zoho Billing
Without a long drawn out process to compare these. If you were looking at these Books and Billing, what made you opt for one and not the other. Thanks
Custom validation in CRM schema
Validation rules in CRM layouts work nicely, good docs by @Kiran Karthik P https://help.zoho.com/portal/en/kb/crm/customize-crm-account/validation-rules/articles/create-validation-rules I'd prefer validating data input 'closer to the schema'
Server error when trying to Data > Sort > Custom Sort
Been using Data > Sort > Custom Sort for a while, now it has suddenly stopped working. When selecting the same data range and trying to execute, I get "Sorry! There was a problem saving your last edit. Please try again."
To Assign a genrated pdf to a file upload field using delug
content = "<html><body>HTML Content on page One <div style='page-break-after:always'></div> HTML Content on page Two </body></html>"; file = zoho.file.convertToPDF(content); file.setFileName("Name of the file"); <variableName> = <FormLinkName>[ID == input.ID];
TArgets To Accounts (Modules)
How can i set sale target to Customers (Accounts Module)
Breaking barriers with multilingual WhatsApp templates in IM
Ever wondered what it feels like to be greeted in your own language by a brand you love? A “Welcome!” feels nice, but a “¡Bienvenido!” or “स्वागत है!” feels personal. In today’s global world, conversations often need to cross both time zones and cross
Super Admin Logging in as another User
How can a Super Admin login as another user. For example, I have a sales rep that is having issues with their Accounts and I want to view their Zoho Account with out having to do a GTM and sharing screens. Moderation Update (8th Aug 2025): We are working
How to share private Opportunities with whole org at an account level
Opportunities are currently set to private, so our sales team only sees their own opportunities, along with their manager and upper leadership. The need is the ability for the rest of the Org to see the opportunities at an account level, not within the
New in Smart Prompt: Record Assistant for contextual assistance, and support for new AI models
Smart Prompt helps teams stay informed and move faster by providing relevant suggestions where work happens in CRM. With this update, Smart Prompt becomes more adaptable to your organization’s AI preferences. You can now choose which Large Language Model
Problema Verificacion con proveedor NIC.AR
No puedo realizar la verificación del correo, he seguido los pasos indicados y configurado los MX. Y no puedo verificar el correo. He leido en el foro que otros han tenido el mismo problema. Alguno pudo solucionarlo?
How to remove some users in zoho accounts
How to remove some users in Zoho accounts.
Unified Inbox for all, including fetched mails
I fetch mails from different third-parties mailboxes. But I need to switch mailbox too see fetched mails. It's strange. All mailboxes have one shared disk space for own mail and fetched mail, but why do we need to switch mailbox (on the left bottom) to
Whatsapp Limitation Questions
Good day, I would like to find out about the functionality or possibility of all the below points within the Zoho/WhatsApp integration. Will WhatsApp buttons ever be possible in the future? Will WhatsApp Re-directs to different users be possible based
Users Not Automatically Being Added To WorkDrive Team
I have already created a ticket for this issue, but the support team doesn't seem to understand what's happening. Our organization started with a trial of Zoho Workplace around November 10, 2025. I created 10 users, including myself. I sent out the invites,
Synchronization between Gmail and Zoho Mail
Hello! I am using Zoho Mail within the Zoho One platform. I have completed the basic setup and added all the required DNS records with our domain provider. Our goal is to set up two-way synchronization between our current Gmail inbox and Zoho Mail, but
IMAP login problem
I have my domain hosted with zoho @wilson.ie I have added a new user and have enabled IMAP access to this user account The user can login to zoho mail on the web. When we enter the server settings into Outlook as per below, Outlook cannot login to the
Contact data removes Account data when creating a quote
Hi, Our customer has address fields in their quote layout which should be the address of the Account. They prefill the information, adding the account name - the address data is populated as per what is in the account - great. However when they then add
Changes to subform in Zoho CRM Portal Timeline History Unavailable
Hi Support Team, We have noticed a feature limitation in the Zoho CRM portal. We created a portal for our vendors to edit records directly, but when vendors make updates, the Modified Time and Date fields are not being updated. Additionally, these updates
This mobile number has been marked spam. Please contact support.
Hi Support, Can you tell me why number was marked as spam. I have having difficult to add my number as you keep requesting i must use it. My number is +63....163 Or is Zoho company excluding Philippines from their services?
Function #11: Apply unused credits automatically to invoices
Today, we bring you a custom function that automatically applies unused credits from excess payments, credit notes, and retainer payments to an invoice when it is created. Prerequisites: Create a Connection named "zbooks" to successfully execute the function.
Duplicating report but custom layout does not
Dear Zoho Creator, I need to duplicate a report into 10 copies, but unfortunately the custom layout (detail view) doesn’t copy along with it. I tried exporting and importing the custom layout, but the field mappings are incorrect. I believe everyone are
Credit Card Readers?
We would like to use our commerce website at conferences (and eventually in store) to swipe credit cards to pay for orders. How would we accomplish this? Does Zoho have anything available for a developer write code to integrate something like Stripe Terminal
Stock count by bin location
Is there a configuration to make a stock count by bin or area and not by product. these is useful to manage count by area Regards
Add Prebuilt "Partner Finder" Template with Native Zoho CRM Integration in Zoho Sites To: Zoho Sites Product Team
Hi Zoho Team, We hope you're doing well. We would like to request a prebuilt "Partner Finder" template for Zoho Sites, modeled after your excellent implementation here: 🔗 https://www.zoho.com/partners/find-partner-results.html ✅ Use Case: Our organization
How Do I Refund a Customer Directly to Their Credit Card?
Hi, I use books to auto-charge my customers credit card. But when I create a credit note there doesn't seem to be a way to directly refund the amount back to their credit card. Is the only way to refund a credit note by doing it "offline" - or manually-
Zoho Learn Course Completion Notifications/Triggers/API
Zoho Learn works great and will suit our course creation needs, but it appears to be lacking a bit when it comes to integration with other Zoho services (creator etc.) when it comes to course completion. 1) Is there an API or Zoho Flow trigger for when
Enhanced Recording Permission Controls for Zoho Cliq Meetings (Similar to Zoom)
Hello Zoho Cliq Team, We hope you are doing well. We would like to request an enhancement to the recording permission functionality in Zoho Cliq Meetings. Current Limitation: in Zoho Cliq Only hosts and co-hosts can record a meeting. Participants cannot
Phone Connection
When on a call the person on the other end complains that there is static, I am cutting in and out or they can't hear me all. This happens on the cell connection as well.
Can't add a sender adress from zoho campaigns
hi, I need to change the sender address for a campaign. When i try to add it i get a message to say 'duplicated email address found while adding your sender address'. This is the first campaign i'm sending so I don't understand why this message is displayed? Thanks Jane
Allow customers to choose meeting venue and meeting duration on booking page
My business primarily involves one-to-one meetings with my clients. Given the hybrid-work world we now find ourselves in, these meetings can take several forms (which I think of as the meeting "venue"): In-person Zoom Phone call I currently handle these
Export History timeline
Hi, I have an idea, bout zoho desk history of the ticket it would be great if the agent or admin of the zoho desk can export the timeline of the ticket history for agent report or on other matter.
Desk fails to create a new ticket on Reply email
When I send a direct email to support@mysite.com, Desk will create a new ticket as expected. When I REPLY to an email sent from support@mysite.com, Desk will NOT generate a new ticket. This is very bad. How can I fix this? Use case: In a separate system
Next Page