Search Records
Purpose
To retrieve the records that match your search criteria.
Request Details
Request URL
{api-domain}/crm/{version}/{module_api_name}/search
Header
Authorization: Zoho-oauthtoken d92d4xxxxxxxxxxxxx15f52
Scope
scope=ZohoCRM.modules.{module_api_name}.{operation_type}
(and)
scope=ZohoSearch.securesearch.READ
Possible module names
leads, accounts, contacts, users, deals, campaigns, tasks, cases, events, calls, solutions, products, vendors, pricebooks, quotes, salesorders, purchaseorders, invoices, custom, and notes.
Possible operation types
ALL - Full access to the record
READ - Get records from the module
Request Details: criteria
Request URL: | {api-domain}/crm/v2.1/{module_api_name}/search?criteria={criteria_here} |
Attributes
- criteriastring
- Performs search by following the shown criteria. (({api_name}:{starts_with|equals}:{value})and/or({api_name}:{starts_with|equals}:{value}))
- You can search for a maximum of 10 criteria (with same or different columns) with equals and starts_with conditions.
- The only operator supported for encrypted fields is equals.
- When you use "equals" for multiple conditions, and if one of your conditions is (Company:equals:ABC), the response will contain records with ABC as well as ABC Inc in their Company fields.
When you use "equals" with a single condition and search for a field (mentioned in point #3 of the Note on this page), like Campaign_Name:equals:CRM, the response will contain only those records whose Campaign_Name is "CRM" and not records with "Best CRM" or "Latest CRM" in their Campaign_Name fields. - The "in" operator checks if a value is in a list. If you provide multiple values, the response includes records that match any of them.
For example, (Full_Name:in:Patricia,Boyle,Kate). - When you use parentheses or comma in the value for a criteria, you must escape them using a backslash. Further, you must encode the value.
- Example:
Consider the search term: ((Last_Name:equals:Burns,B)and(First_Name:starts_with:M))
After escaping comma and parenthesis in the value: ((Last_Name:equals:Burns\,B)and(First_Name:starts_with:M))
After encoding the value: ((Last_Name:equals:Burns%5C%2CB)and(First_Name:starts_with:M))
- Example:
- When you use backslash as the last character in the value for a criteria, you must escape it using another backslash. Further, you must encode the value.
- Example:
Consider the search term: (Last_Name:equals:K\)
After escaping backslash in the value: (Last_Name:equals:K\\)
After encoding the value: (Last_Name:equals:K%5C%5C)
- Example:
- To search for Date, DateTime, Lookup, Number, Currency, Boolean fields, you need comparators other than starts_with and equals. Refer to the Query API to search for fields of these data types.
Sample Request to Search with criteria
Copiedcurl "https://www.zohoapis.com/crm/v2.1/Leads/search?criteria=((Last_Name:equals:Burns%5C%2CB)and(First_Name:starts_with:M))"
-X GET
-H "Authorization: Zoho-oauthtoken 1000.8cb99dxxxxxxxxxxxxx9be93.9b8xxxxxxxxxxxxxxxf"
Copied//Get instance of RecordOperations Class that takes moduleAPIName as parameter
$recordOperations = new RecordOperations();
$paramInstance = new ParameterMap();
$paramInstance->add(SearchRecordsParam::criteria(), "((Last_Name:starts_with:Last Name) or (Company:starts_with:fasf\\(123\\) K))");
$paramInstance->add(SearchRecordsParam::email(), "username@gmail.com");
$paramInstance->add(SearchRecordsParam::phone(), "234567890");
$paramInstance->add(SearchRecordsParam::word(), "First Name Last Name");
$paramInstance->add(SearchRecordsParam::converted(), "both");
$paramInstance->add(SearchRecordsParam::approved(), "both");
$paramInstance->add(SearchRecordsParam::page(), 1);
$paramInstance->add(SearchRecordsParam::perPage(), 2);
//Call searchRecords method
$response = $recordOperations->searchRecords($moduleAPIName,$paramInstance);
Copied<?php
class SearchRecords{
public function execute(){
$curl_pointer = curl_init();
$curl_options = array();
$url = "https://www.zohoapis.com/crm/v2.1/Leads/search?";
$parameters = array();
$parameters["page"]="1";
$parameters["per_page"]="2";
$parameters["word"]="as";
foreach ($parameters as $key=>$value){
$url =$url.$key."=".$value."&";
}
$curl_options[CURLOPT_URL] = $url;
$curl_options[CURLOPT_RETURNTRANSFER] = true;
$curl_options[CURLOPT_HEADER] = 1;
$curl_options[CURLOPT_CUSTOMREQUEST] = "GET";
$headersArray = array();
$headersArray[] = "Authorization". ":" . "Zoho-oauthtoken " ."1000.30f3a589XXXXXXXXXXXXXXXXXXX4077.dc5XXXXXXXXXXXXXXXXXXXee9e7c171c";
$curl_options[CURLOPT_HTTPHEADER]=$headersArray;
curl_setopt_array($curl_pointer, $curl_options);
$result = curl_exec($curl_pointer);
$responseInfo = curl_getinfo($curl_pointer);
curl_close($curl_pointer);
list ($headers, $content) = explode("\r\n\r\n", $result, 2);
if(strpos($headers," 100 Continue")!==false){
list( $headers, $content) = explode( "\r\n\r\n", $content , 2);
}
$headerArray = (explode("\r\n", $headers, 50));
$headerMap = array();
foreach ($headerArray as $key) {
if (strpos($key, ":") != false) {
$firstHalf = substr($key, 0, strpos($key, ":"));
$secondHalf = substr($key, strpos($key, ":") + 1);
$headerMap[$firstHalf] = trim($secondHalf);
}
}
$jsonResponse = json_decode($content, true);
if ($jsonResponse == null && $responseInfo['http_code'] != 204) {
list ($headers, $content) = explode("\r\n\r\n", $content, 2);
$jsonResponse = json_decode($content, true);
}
var_dump($headerMap);
var_dump($jsonResponse);
var_dump($responseInfo['http_code']);
}
}
(new SearchRecords())->execute();
Copied# Get instance of RecordOperations Class
ro = Record::RecordOperations.new
# Get instance of ParameterMap Class
pm = ParameterMap.new
# record_id = 3524033000005495066
# Possible parameters for Search Records operation
# Encoding must be done for parentheses or comma
pm.add(Record::RecordOperations::SearchRecordsParam.criteria, 'Last_Name:starts_with:a')
# pm.add(Record::RecordOperations::GetRecordParam.converted,"false")
# field_names =["Company","Email"]
# field_names.each do |field_name|
# pm.add(Record::::RecordOperations::GetRecordParam.fields,field_name)
# end
# Call searchRecords method that takes ParameterMap Instance and moduleAPIName as parameter
response = ro.search_records(module_api_name,pm)
Copiedrequire 'net/http'
require 'json'
class SearchRecords
def execute
parameters ={}
parameters["per_page"]="2";
parameters["page"]="1";
parameters["word"]="as";
query_string = parameters.to_a.map { |x| "#{x[0]}=#{x[1]}" }.join('&')
url= "https://www.zohoapis.com/crm/v2.1/Leads/search"
url += '?' + query_string if !query_string.nil? && (query_string.strip != '')
url = URI(url)
req = Net::HTTP::Get.new(url.request_uri)
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
headers={}
headers["Authorization"]="Zoho-oauthtoken 1000.dfa7XXXXXXXXXXXXXXXXXX84f9665840.c176aeXXXXXXXXXXXX13f3d37a84d"
headers&.each { |key, value| req.add_field(key, value) }
response=http.request(req)
status_code = response.code.to_i
headers = response.each_header.to_h
print status_code
print headers
unless response.body.nil?
print response.body
end
end
end
SearchRecords.new.execute
Sample Response
Copied{
"data": [
{
"Account": null,
"Owner": {
"name": "Patricia Boyle",
"id": "3652397000000186017"
},
"Company": "Company",
"Email": "burns.mary@xyz.com",
"$currency_symbol": "Rs.",
"Visitor_Score": null,
"Last_Activity_Time": "2019-02-19T12:05:23+05:30",
"Industry": "ERP",
"$converted": false,
"$process_flow": false,
"Street": "4 B Blue Ridge Blvd",
"Zip_Code": "48116",
"id": "3652397000000190367",
"$approved": true,
"$approval": {
"delegate": false,
"approve": false,
"reject": false,
"resubmit": false
},
"First_Visited_URL": null,
"Days_Visited": null,
"Created_Time": "2018-11-14T15:31:28+05:30",
"$editable": true,
"City": "Brighton",
"No_of_Employees": 0,
"Campaigns_Lookup": null,
"State": "MI",
"Country": "Livingston",
"Last_Visited_Time": null,
"Created_By": {
"name": "Patricia Boyle",
"id": "3652397000000186017"
},
"Annual_Revenue": 200000,
"Secondary_Email": null,
"Description": null,
"Number_Of_Chats": null,
"Rating": null,
"Website": null,
"Twitter": null,
"Average_Time_Spent_Minutes": null,
"Associated_Contacts": null,
"Salutation": "Ms.",
"First_Name": "Mary",
"Lead_Status": "Contacted",
"Full_Name": "Ms. Mary Burns",
"Record_Image": null,
"Modified_By": {
"name": "Patricia Boyle",
"id": "3652397000000186017"
},
"Skype_ID": "Mary-burns",
"Phone": "555-555-5555",
"Email_Opt_Out": true,
"Designation": "Team Lead",
"Modified_Time": "2019-02-19T12:05:23+05:30",
"$converted_detail": {},
"Mobile": "555-555-5555",
"Prediction_Score": null,
"First_Visited_Time": null,
"Last_Name": "Burns,B",
"Referrer": null,
"Lead_Source": "Twitter",
"Tag": [
{
"name": "Pharma",
"id": "3652397000000371014"
},
{
"name": "Agricultural",
"id": "3652397000000371015"
}
],
"Fax": null
}
],
"info": {
"per_page": 200,
"count": 1,
"page": 1,
"more_records": false
}
}
Request Details: email
Request URL: | https://www.zohoapis.com/crm/v2.1/{module_api_name}/search?email={email_here} |
Attributes
- emailstring
Performs module search by email. All the email fields of a particular module will be searched and listed.
Sample Request to Search by email
Copiedcurl "https://www.zohoapis.com/crm/v2.1/Leads/search?email=newcrmapi@zoho.com"
-X GET
-H "Authorization: Zoho-oauthtoken 1000.8cb99dxxxxxxxxxxxxx9be93.9b8xxxxxxxxxxxxxxxf"
Sample Response
Copied{
"data": [
{
"Account": null,
"Owner": {
"name": "Patricia Boyle",
"id": "3652397000000186017"
},
"Company": null,
"Email": "newcrmapi@zoho.com",
"$currency_symbol": "Rs.",
"Visitor_Score": null,
"Last_Activity_Time": "2019-03-22T11:10:55+05:30",
"Industry": "ASP",
"$converted": false,
"$process_flow": false,
"Street": "Street",
"Zip_Code": "Zip_Code",
"id": "3652397000000415002",
"$approved": true,
"$approval": {
"delegate": false,
"approve": false,
"reject": false,
"resubmit": false
},
"First_Visited_URL": null,
"Days_Visited": null,
"Created_Time": "2019-01-10T13:04:32+05:30",
"$editable": true,
"City": "City",
"No_of_Employees": 100,
"State": "State",
"Country": "Country",
"Last_Visited_Time": null,
"Created_By": {
"name": "Patricia Boyle",
"id": "3652397000000186017"
},
"Annual_Revenue": 100000,
"Secondary_Email": "newcrmapi@zoho.com",
"Description": "Design your own layouts that align your business processes precisely. Assign them to profiles appropriately.",
"Number_Of_Chats": null,
"Rating": "Acquired",
"Website": "crm.zoho.com",
"Twitter": "Twitter",
"Average_Time_Spent_Minutes": null,
"Associated_Contacts": null,
"Salutation": "Mr.",
"First_Name": "First_Name",
"Lead_Status": "Contacted",
"Full_Name": "Mr. First_Name Last_Name",
"Record_Image": null,
"Modified_By": {
"name": "Patricia Boyle",
"id": "3652397000000186017"
},
"Skype_ID": "Skype_ID",
"Phone": "98883434559",
"Email_Opt_Out": false,
"Designation": "Designation",
"Modified_Time": "2019-03-22T11:10:55+05:30",
"$converted_detail": {},
"Mobile": "98883434559",
"Prediction_Score": null,
"First_Visited_Time": null,
"Last_Name": "Last_Name",
"Referrer": null,
"Lead_Source": "Twitter",
"Tag": [],
"Fax": "Fax"
}
],
"info": {
"per_page": 200,
"count": 1,
"page": 1,
"more_records": false
}
}
Request Details: phone
Request URL: | https://www.zohoapis.com/crm/v2.1/{module_api_name}/search?phone={phone_number_here} |
Attributes
- phonestring
Performs module search by phone number. All the phone fields of a particular module will be searched and listed.
Sample Request to Search by Phone
Copiedcurl "https://www.zohoapis.com/crm/v2.1/Leads/search?phone=98883434559
-X GET
-H "Authorization: Zoho-oauthtoken 1000.8cb99dxxxxxxxxxxxxx9be93.9b8xxxxxxxxxxxxxxxf"
Sample Response
Copied{
"data": [
{
"Account": null,
"Owner": {
"name": "Patricia Boyle",
"id": "3652397000000186017"
},
"Company": null,
"Email": "newcrmapi@zoho.com",
"$currency_symbol": "Rs.",
"Visitor_Score": null,
"Last_Activity_Time": "2019-03-22T11:10:55+05:30",
"Industry": "ASP",
"$converted": false,
"$process_flow": false,
"Street": "Street",
"Zip_Code": "Zip_Code",
"id": "3652397000000415002",
"$approved": true,
"$approval": {
"delegate": false,
"approve": false,
"reject": false,
"resubmit": false
},
"First_Visited_URL": null,
"Days_Visited": null,
"Created_Time": "2019-01-10T13:04:32+05:30",
"$editable": true,
"City": "City",
"No_of_Employees": 100,
"State": "State",
"Country": "Country",
"Last_Visited_Time": null,
"Created_By": {
"name": "Patricia Boyle",
"id": "3652397000000186017"
},
"Annual_Revenue": 100000,
"Secondary_Email": "newcrmapi@zoho.com",
"Description": "Design your own layouts that align your business processes precisely. Assign them to profiles appropriately.",
"Number_Of_Chats": null,
"Rating": "Acquired",
"Website": "crm.zoho.com",
"Twitter": "Twitter",
"Average_Time_Spent_Minutes": null,
"Associated_Contacts": null,
"Salutation": "Mr.",
"First_Name": "First_Name",
"Lead_Status": "Contacted",
"Full_Name": "Mr. First_Name Last_Name",
"Record_Image": null,
"Modified_By": {
"name": "Patricia Boyle",
"id": "3652397000000186017"
},
"Skype_ID": "Skype_ID",
"Phone": "98883434559",
"Email_Opt_Out": false,
"Designation": "Designation",
"Modified_Time": "2019-03-22T11:10:55+05:30",
"$converted_detail": {},
"Mobile": "98883434559",
"Prediction_Score": null,
"First_Visited_Time": null,
"Last_Name": "Last_Name",
"Referrer": null,
"Lead_Source": "Twitter",
"Tag": [],
"Fax": "Fax"
}
],
"info": {
"per_page": 200,
"count": 1,
"page": 1,
"more_records": false
}
}
Request Details: word
Request URL: | https://www.zohoapis.com/crm/v2.1/{module_api_name}/search?word={search_word_here} |
Attributes
- wordstring
Performs global search by word.
Sample Request to Search by word
Copiedcurl "https://www.zohoapis.com/crm/v2.1/Leads/search?word=abc"
-X GET
-H "Authorization: Zoho-oauthtoken 1000.8cb99dxxxxxxxxxxxxx9be93.9b8xxxxxxxxxxxxxxxf"
Sample Response
Copied{
"data": [
{
"Owner": {
"name": "Patricia Boyle",
"id": "3652397000000186017"
},
"Company": "Company1",
"Email": null,
"$currency_symbol": "Rs.",
"Visitor_Score": null,
"Last_Activity_Time": null,
"Industry": null,
"$converted": false,
"$process_flow": false,
"Street": null,
"Zip_Code": null,
"id": "3652397000000562046",
"$approved": true,
"$approval": {
"delegate": false,
"approve": false,
"reject": false,
"resubmit": false
},
"First_Visited_URL": null,
"Days_Visited": null,
"Created_Time": "2019-02-19T12:57:55+05:30",
"$editable": true,
"City": null,
"No_of_Employees": null,
"Campaigns_Lookup": null,
"State": null,
"Country": null,
"Last_Visited_Time": null,
"Created_By": {
"name": "Patricia Boyle",
"id": "3652397000000186017"
},
"Annual_Revenue": null,
"Secondary_Email": null,
"Description": null,
"Number_Of_Chats": null,
"Rating": null,
"Website": null,
"Twitter": null,
"Average_Time_Spent_Minutes": null,
"Salutation": null,
"First_Name": null,
"Lead_Status": null,
"Full_Name": "abc",
"Record_Image": null,
"Modified_By": {
"name": "Patricia Boyle",
"id": "3652397000000186017"
},
"Skype_ID": null,
"Phone": null,
"Email_Opt_Out": false,
"Designation": null,
"Modified_Time": "2019-02-19T12:57:55+05:30",
"$converted_detail": {},
"Mobile": null,
"Prediction_Score": null,
"First_Visited_Time": null,
"Last_Name": "abc",
"Referrer": null,
"Lead_Source": null,
"Tag": [],
"Fax": null
},
{
"Owner": {
"name": "Patricia Boyle",
"id": "3652397000000186017"
},
"Company": "abc",
"Email": null,
"$currency_symbol": "Rs.",
"Visitor_Score": null,
"Last_Activity_Time": "2019-02-19T12:06:28+05:30",
"Industry": "ERP (Enterprise Resource Planning)",
"$converted": false,
"$process_flow": false,
"Street": null,
"Zip_Code": null,
"id": "3652397000000538029",
"$approved": true,
"$approval": {
"delegate": false,
"approve": false,
"reject": false,
"resubmit": false
},
"First_Visited_URL": null,
"Days_Visited": null,
"Created_Time": "2019-02-14T18:19:22+05:30",
"$editable": true,
"City": "Albany",
"No_of_Employees": null,
"Campaigns_Lookup": null,
"State": null,
"Country": null,
"Last_Visited_Time": null,
"Created_By": {
"name": "Patricia Boyle",
"id": "3652397000000186017"
},
"Annual_Revenue": null,
"Secondary_Email": null,
"Description": null,
"Number_Of_Chats": null,
"Rating": null,
"Website": null,
"Twitter": null,
"Average_Time_Spent_Minutes": null,
"Salutation": null,
"First_Name": "Test1",
"Lead_Status": "Contacted",
"Full_Name": "Test1 Lead1",
"Record_Image": null,
"Modified_By": {
"name": "Patricia Boyle",
"id": "3652397000000186017"
},
"Skype_ID": null,
"Phone": null,
"Email_Opt_Out": true,
"Designation": "Team Lead",
"Modified_Time": "2019-02-19T12:06:28+05:30",
"$converted_detail": {},
"Mobile": null,
"Prediction_Score": null,
"First_Visited_Time": null,
"Last_Name": "Lead1",
"Referrer": null,
"Lead_Source": "Advertisement",
"Tag": [],
"Fax": null
}
],
"info": {
"per_page": 200,
"count": 2,
"page": 1,
"more_records": false
}
}
Other optional parameters
- convertedstring
To get the list of converted records. Default value is false.
- true - get only converted records
- false - get only non-converted records
- both - get all records
- approvedstring
To get the list of approved records. Default value is true.
- true - get only approved records
- false - get only records which are not approved
- both - get all records
- pageinteger
To get the list of records from the respective pages. Default value for page is 1.
- per_pageinteger
To get the list of records available per page. The default and the maximum possible value is 200.
- typestring
To get a specific user type from the Users module. Please note that this parameter is supported only for Users module.
The possible values are:
- AllUsers
- ActiveUsers
- DeactiveUsers
- ConfirmedUsers
- ConfirmedReportingUsers
- NotConfirmedUsers
- DeletedUsers
- ActiveConfirmedUsers
- AdminUsers
- ActiveConfirmedAdmins
- CurrentUser
Sample Request: To Search with a Single Criterion
Copiedcurl "https://www.zohoapis.com/crm/v2.1/Campaigns/search?criteria=Campaign_Name:equals:CRM&fields=Campaign_Name,Type"
-X GET
-H "Authorization: Zoho-oauthtoken 1000.8cb99dxxxxxxxxxxxxx9be93.9b8xxxxxxxxxxxxxxxf"
Note
- Only one of the mandatory parameters (criteria, email, phone, word) would work at one point of time. Furthermore, if two parameters are given simultaneously, preference will be given in the order criteria, email, phone, and word, and only one of them would work.
- The page and per_page parameter is used to fetch records according to their position in the CRM. Let's assume that the user has to fetch 400 records. The maximum number of records that one can get for an API call is 200. So, for records above the 200th position, they cannot be fetched. By changing the values of the page (1, 2) and per_page (200) parameters, the user can fetch all 400 records using 2 API calls.
- Usually, there is a delay in fetching the result of a search action. However, in a module-specific search, if you use one of the below mentioned fields (of the data type "string") in the criteria, you will get the response without any delay.
Leads/Contacts - "Email" field
Accounts - "Account_Name" field
Potentials/Deals - "Deal_Name" field
Campaigns - "Campaign_Name" field
Cases - "Subject" field
Solutions - "Solution_Title" field
Products - "Product_Name" field
Vendors - "Vendor_Name" field
PriceBooks - "Price_Book_Name" field
Quotes - "Subject" field
SalesOrders - "Subject" field
PurchaseOrders - "Subject" field
Invoices - "Subject" field
CustomModule - "Name" field - The value of the fields with sensitive health data will be retrieved only when Restrict Data access through API option in the compliance settings is disabled. If the option is enabled, the value will be null. Refer to HIPAA compliance for more details.
- The "in" operator supports upto 100 values.
Possible Errors
- MANDATORY_NOT_FOUNDHTTP 400
mandatory param missing
Resolution: Specify any of the mandatory parameters (criteria/email/phone/word) in your request. - INVALID_QUERYHTTP 400
invalid query formed
Resolution: The operators/field API names in your search query is invalid (or) The field specified is not available in the search module. Specify a valid search query. - INVALID_DATAHTTP 400
provide atleast 2 letters for search
Resolution: You have specified special characters in your search query. Specify a valid search query. - NOT_SUPPORTEDHTTP 400
module not supported for search
Resolution: The module you have specified is not supported for search operation. Refer to possible modules section above and specify a valid module API name. - INVALID_URL_PATTERNHTTP 404
Please check if the URL trying to access is a correct one
Resolution: The request URL specified is incorrect. Specify a valid request URL. Refer to request URL section above. - OAUTH_SCOPE_MISMATCHHTTP 401
Unauthorized
Resolution: Client does not have ZohoSearch.securesearch.READ scope. Create a new client with valid scope. Refer to scope section above. - NO_PERMISSIONHTTP 403
Permission denied to read
Resolution: The user does not have permission to read records. Contact your system administrator. - INTERNAL_ERRORHTTP 500
Internal Server Error
Resolution: Unexpected and unhandled exception in the server. Contact support team. - INVALID_REQUEST_METHODHTTP 400
The http request method type is not a valid one
Resolution: You have specified an invalid HTTP method to access the API URL. Specify a valid request method. Refer to endpoints section above. - AUTHORIZATION_FAILEDHTTP 400
User does not have sufficient privilege to read module details.
Resolution: The user does not have the permission to retrieve module details. Contact your system administrator.
Sample Response
Copied{
"data": [
{
"Type": "Trade Show",
"Campaign_Name": "CRM",
"id": "3652397000002247003"
}
],
"info": {
"per_page": 200,
"count": 1,
"page": 1,
"more_records": false
}
}