Update Records

Purpose

To update existing entities in the module.

Request Details

Request URL

https://www.zohoapis.com/crm/v2/{module_api_name}

To update a specific record:
https://www.zohoapis.com/crm/v2/{module_api_name}/{record_id}

Supported modules

Leads, Accounts, Contacts, Deals, Campaigns, Tasks, Cases, Events, Calls, Solutions, Products, Vendors, Price Books, Quotes, Sales Orders, Purchase Orders, Invoices, and Custom

Header

Authorization: Zoho-oauthtoken d92d4xxxxxxxxxxxxx15f52

If-Unmodified-Since: 2024-01-15T15:26:49+05:30

Scope

scope=ZohoCRM.modules.ALL
(or)
scope=ZohoCRM.modules.{module_name}.{operation_type}

Possible module names

leads, accounts, contacts, 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
WRITE - Edit records in the module
UPDATE - Update records in the module

Sample Request

Copiedcurl "https://www.zohoapis.com/crm/v2/Leads"
-X PUT
-d "@updatelead.json"
-H "Authorization: Zoho-oauthtoken 1000.8cb99dxxxxxxxxxxxxx9be93.9b8xxxxxxxxxxxxxxxf"
3.0.08.0
Copied//API Name of the module 
String moduleAPIName = "Leads";
String recordId = "3477061000005177002";

//Get instance of RecordOperations Class
RecordOperations recordOperations = new RecordOperations();

//Get instance of BodyWrapper Class that will contain the request body
BodyWrapper request = new BodyWrapper();

//List of Record instances
List < com.zoho.crm.api.record.Record > records = new ArrayList < com.zoho.crm.api.record.Record > ();

//Get instance of Record Class
com.zoho.crm.api.record.Record record1 = new com.zoho.crm.api.record.Record();

/*
 * Call addFieldValue method that takes two arguments
 * 1 -> Call Field "." and choose the module from the displayed list and press "." and choose the field name from the displayed list.
 * 2 -> Value
 */
//		record1.addFieldValue(Field.Leads.CITY, "City");
//		
//		record1.addFieldValue(Field.Leads.LAST_NAME, "Last Name");
//		
//		record1.addFieldValue(Field.Leads.FIRST_NAME, "First Name");
//		
//		record1.addFieldValue(Field.Leads.LAST_NAME, "Last Name");
//		
//		record1.addFieldValue(Field.Leads.COMPANY, "KKRNP");

/*
 * Call addKeyValue method that takes two arguments
 * 1 -> A string that is the Field's API Name
 * 2 -> Value
 */
//		record1.addKeyValue("Custom_field", "Value");
//		
//		record1.addKeyValue("Custom_field_2", "value");
//		
//		record1.addKeyValue("Date_1", LocalDate.of(2017, 1, 13));

List < FileDetails > fileDetails = new ArrayList < FileDetails > ();

FileDetails fileDetail1 = new FileDetails();

fileDetail1.setAttachmentId("3477061000006072005");

fileDetail1.setDelete(null);

fileDetails.add(fileDetail1);

FileDetails fileDetail2 = new FileDetails();

fileDetail2.setFileId("ae9c7cefa418aec1d6a5cc2d9ab35c321c2510105c108641ce7729a548afb8b7");

fileDetails.add(fileDetail2);

FileDetails fileDetail3 = new FileDetails();

fileDetail3.setFileId("ae9c7cefa418aec1d6a5cc2d9ab35c32feb62de8d0fce6a557bf29aa70123189");

fileDetails.add(fileDetail3);

record1.addKeyValue("File_Upload", fileDetails);

//Add Record instance to the list
records.add(record1);

//Set the list to Records in BodyWrapper instance
request.setData(records);

List < String > trigger = new ArrayList < String > ();

trigger.add("approval");

trigger.add("workflow");

trigger.add("blueprint");

request.setTrigger(trigger);

HeaderMap headerInstance = new HeaderMap();
//Call updateRecord method that takes recordId, ModuleAPIName and BodyWrapper instance as parameter.
APIResponse < ActionHandler > response = recordOperations.updateRecord(recordId, moduleAPIName, request,headerInstance);
Copiedimport javax.net.ssl.SSLContext;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;
public class UpdateRecords 
{
	@SuppressWarnings("deprecation")
	private static void updateRecords()
	{
		try
		{
			HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
			SSLContext sslContext = SSLContext.getDefault();
			SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
			CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();
			URIBuilder uriBuilder = new URIBuilder("https://www.zohoapis.com/crm/v2/Leads");
			HttpUriRequest requestObj = new HttpPut(uriBuilder.build());
			HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
			JSONObject requestBody = new JSONObject();
			JSONArray recordArray = new JSONArray();
			JSONObject recordObject = new JSONObject();
			recordObject.put("id", "34770617742004");
			recordObject.put("Last_Name", "Daly");
			recordObject.put("First_Name", "Paul");
			recordObject.put("Email", "p.daly@zylker.com");
			recordObject.put("State", "Texas");
			recordArray.put(recordObject);
			recordObject = new JSONObject();
			recordObject.put("id", "34770617742003");
			recordObject.put("Last_Name", "Dolan");
			recordObject.put("First_Name", "Brian");
			recordObject.put("Email", "brian@villa.com");
			recordObject.put("State", "Texas");
			recordArray.put(recordObject);
			requestBody.put("data", recordArray);
			JSONArray trigger = new JSONArray();
			trigger.put("approval");
			trigger.put("workflow");
			trigger.put("blueprint");
			requestBody.put("trigger", trigger);
			requestBase.setEntity(new StringEntity(requestBody.toString(), HTTP.UTF_8));
			requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
			HttpResponse response = httpclient.execute(requestObj);
			HttpEntity responseEntity = response.getEntity();
			System.out.println("HTTP Status Code : " + response.getStatusLine().getStatusCode());
			if(responseEntity != null)
			{
				Object responseObject = EntityUtils.toString(responseEntity);
				String responseString = responseObject.toString();
				System.out.println(responseString);
			}
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}
	}
	@SuppressWarnings("deprecation")
	private static void updateRecord()
	{
		try
		{
			HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
			SSLContext sslContext = SSLContext.getDefault();
			SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
			CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();
			URIBuilder uriBuilder = new URIBuilder("https://www.zohoapis.com/crm/v2/Leads/34770617742003");
			HttpUriRequest requestObj = new HttpPut(uriBuilder.build());
			HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
			JSONObject requestBody = new JSONObject();
			JSONArray recordArray = new JSONArray();
			JSONObject recordObject = new JSONObject();
			recordObject.put("Company", "Zylker");
			recordObject.put("Last_Name", "Daly");
			recordObject.put("First_Name", "Paul");
			recordObject.put("Email", "p.daly@zylker.com");
			recordObject.put("State", "Texas");
			recordArray.put(recordObject);
			requestBody.put("data", recordArray);
			JSONArray trigger = new JSONArray();
			trigger.put("approval");
			trigger.put("workflow");
			trigger.put("blueprint");
			requestBody.put("trigger", trigger);
			requestBase.setEntity(new StringEntity(requestBody.toString(), HTTP.UTF_8));
			requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
			HttpResponse response = httpclient.execute(requestObj);
			HttpEntity responseEntity = response.getEntity();
			System.out.println("HTTP Status Code : " + response.getStatusLine().getStatusCode());
			if(responseEntity != null)
			{
				Object responseObject = EntityUtils.toString(responseEntity);
				String responseString = responseObject.toString();
				System.out.println(responseString);
			}
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}
	}
	public static void main(String[] args) 
	{
		updateRecords();
		updateRecord();
	}
}
3.0.07.x
Copied//API Name of the module to create records
//$moduleAPIName = "Leads";
//Get instance of RecordOperations Class
$recordOperations = new RecordOperations();
 //Get instance of BodyWrapper Class that will contain the request body
 $request = new BodyWrapper();
//List of Record instances
$records = array();
$recordClass = 'com\zoho\crm\api\record\Record';
//Get instance of Record Class
 $record1 = new $recordClass();
$record1->setId("3477061000006606002");
  /*
  * Call addFieldValue method that takes two arguments
  * 1 -> Call Field "." and choose the module from the displayed list and press "." and choose the field name from the displayed list.
 * 2 -> Value
   */
        $field = new Field("");
        $record1->addFieldValue(Leads::City(), "City");
        $record1->addFieldValue(Leads::LastName(), "Last Name");
        $record1->addFieldValue(Leads::FirstName(), "First Name");
        $record1->addFieldValue(Leads::Company(), "KKRNP");
        /*
         * Call addKeyValue method that takes two arguments
         * 1 -> A string that is the Field's API Name
         * 2 -> Value
         */
        $record1->addKeyValue("Custom_field", "Value");
        $record1->addKeyValue("Custom_field_2", "value");
        //Add Record instance to the list
        // array_push($records, $record1);
        //Get instance of Record Class
        $record2 = new $recordClass();
        $record2->setId("3477061000006603294");
        /*
         * Call addFieldValue method that takes two arguments
         * 1 -> Call Field "." and choose the module from the displayed list and press "." and choose the field name from the displayed list.
         * 2 -> Value
         */
        $record2->addFieldValue(Leads::City(), "City");
        $record2->addFieldValue(Leads::LastName(), "Last Name");
        $record2->addFieldValue(Leads::FirstName(), "First Name");
        $record2->addFieldValue(Leads::Company(), "KKRNP");
        /*
         * Call addKeyValue method that takes two arguments
         * 1 -> A string that is the Field's API Name
         * 2 -> Value
         */
        $record2->addKeyValue("Custom_field", "Value");
        $record2->addKeyValue("Custom_field_2", "value");
        //Add Record instance to the list
        // array_push($records, $record2);
        //Set the list to Records in BodyWrapper instance
        $request->setData($records);
        $trigger = array("approval", "workflow", "blueprint");
        $request->setTrigger($trigger);
        $headerInstance = new HeaderMap();
        //Call createRecords method that takes BodyWrapper instance and moduleAPIName as parameter.
        $response = $recordOperations->updateRecords($moduleAPIName, $request,$headerInstance);
Copied<?php

class UpdateRecords
{
    public function execute(){
        $curl_pointer = curl_init();
        
        $curl_options = array();
        $url = "https://www.zohoapis.com/crm/v2/Leads";
        
        $curl_options[CURLOPT_URL] =$url;
        $curl_options[CURLOPT_RETURNTRANSFER] = true;
        $curl_options[CURLOPT_HEADER] = 1;
        $curl_options[CURLOPT_CUSTOMREQUEST] = "PUT";
        $requestBody = array();
        $recordArray = array();
        $recordObject = array();
        $recordObject["Company"]="FieldAPIValue";
        $recordObject["Last_Name"]="347706107420006";
        $recordObject["First_Name"]="3477061007420006";
        $recordObject["State"]="FieldAPIValue";
        $recordObject["id"]="3524033000006011012";

        
        
        $recordArray[] = $recordObject;
        $requestBody["data"] =$recordArray;
        $curl_options[CURLOPT_POSTFIELDS]= json_encode($requestBody);
        $headersArray = array();
        
        $headersArray[] = "Authorization". ":" . "Zoho-oauthtoken " . "1000.8cb99dxxxxxxxxxxxxx9be93.9b8xxxxxxxxxxxxxxxf";
        
        $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 UpdateRecords())->execute();
3.0.08.x
Copied//Get instance of RecordOperations Class
RecordOperations recordOperations = new RecordOperations();
//Get instance of BodyWrapper Class that will contain the request body
BodyWrapper request = new BodyWrapper();
//List of Record instances
List<Com.Zoho.Crm.API.Record.Record> records = new List<Com.Zoho.Crm.API.Record.Record>();
//Get instance of Record Class
Com.Zoho.Crm.API.Record.Record record1 = new Com.Zoho.Crm.API.Record.Record();
record1.Id = 3477061000005844006;
/*
* Call addFieldValue method that takes two arguments
* 1 -> Call Field "." and choose the module from the displayed list and press "." and choose the field name from the displayed list.
* 2 -> Value
*/
record1.AddFieldValue(Leads.CITY, "City");
record1.AddFieldValue(Leads.LAST_NAME, "Last Name");
record1.AddFieldValue(Leads.FIRST_NAME, "First Name");
record1.AddFieldValue(Leads.COMPANY, "KKRNP");
/*
* Call addKeyValue method that takes two arguments
* 1 -> A string that is the Field's API Name
* 2 -> Value
*/
record1.AddKeyValue("Custom_field", "Value");
record1.AddKeyValue("Custom_field_2", "value");
//Add Record instance to the list
records.Add(record1);
//Get instance of Record Class
Com.Zoho.Crm.API.Record.Record record2 = new Com.Zoho.Crm.API.Record.Record();
record2.Id = 3477061000005844005;
/*
* Call addFieldValue method that takes two arguments
* 1 -> Call Field "." and choose the module from the displayed list and press "." and choose the field name from the displayed list.
* 2 -> Value
*/
record2.AddFieldValue(Leads.CITY, "City");
record2.AddFieldValue(Leads.LAST_NAME, "Last Name");
record2.AddFieldValue(Leads.FIRST_NAME, "First Name");
record2.AddFieldValue(Leads.COMPANY, "KKRNP");
/*
* Call addKeyValue method that takes two arguments
* 1 -> A string that is the Field's API Name
* 2 -> Value
*/
record2.AddKeyValue("Custom_field", "Value");
record2.AddKeyValue("Custom_field_2", "value");
//Add Record instance to the list
records.Add(record2);
//Set the list to Records in BodyWrapper instance
request.Data = records;
List<string> trigger = new List<string>();
trigger.Add("approval");
trigger.Add("workflow");
trigger.Add("blueprint");
request.Trigger = trigger;
HeaderMap headerInstance = new HeaderMap();
//Call UpdateRecords method that takes moduleAPIName annd BodyWrapper instance as parameter.
APIResponse<ActionHandler> response = recordOperations.UpdateRecords(moduleAPIName, request,headerInstance);
Copiedusing System;
using System.IO;
using System.Net;
using System.Text;
using Newtonsoft.Json.Linq;
namespace Com.Zoho.Crm.API.Sample.RestAPI.Records
{
    public class UpdateRecords
    {
        public static void UpdateListRecord()
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.zohoapis.com/crm/v2/Leads");
            request.Method = "PUT";
            request.Headers["Authorization"] = "Zoho-oauthtoken 1000.abfeXXXXXXXXXXX2asw.XXXXXXXXXXXXXXXXXXsdc2";
            JObject requestBody = new JObject();
            JArray recordArray = new JArray();
            JObject recordObject = new JObject();
            recordObject.Add("id", "34770617846013");
            recordObject.Add("Last_Name", "Daly");
            recordObject.Add("First_Name", "Paul");
            recordObject.Add("Email", "p.daly@zylker.com");
            recordObject.Add("State", "Texas");
            recordArray.Add(recordObject);
            recordObject = new JObject();
            recordObject.Add("id", "34770617846014");
            recordObject.Add("Last_Name", "Dolan");
            recordObject.Add("First_Name", "Brian");
            recordObject.Add("Email", "brian@villa.com");
            recordObject.Add("State", "Texas");
            recordArray.Add(recordObject);
            requestBody.Add("data", recordArray);
            JArray trigger = new JArray();
            trigger.Add("approval");
            trigger.Add("workflow");
            trigger.Add("blueprint");
            requestBody.Add("trigger", trigger);
            string dataString = requestBody.ToString();
            var data = Encoding.UTF8.GetBytes(dataString);
            int dataLength = data.Length;
            request.ContentLength = dataLength;
            using (var writer = request.GetRequestStream())
            {
                writer.Write(data, 0, dataLength);
            }
            request.KeepAlive = true;
            HttpWebResponse response;
            try
            {
                response = (HttpWebResponse)request.GetResponse();
            }
            catch (WebException e)
            {
                if (e.Response == null) { throw; }
                response = (HttpWebResponse)e.Response;
            }
            HttpWebResponse responseEntity = response;
            Console.WriteLine("HTTP Status Code : " + (int)response.StatusCode);
            string responsestring = new StreamReader(responseEntity.GetResponseStream()).ReadToEnd();
            responseEntity.Close();
            Console.WriteLine(responsestring);
        }
        public static void UpdateRecord()
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.zohoapis.com/crm/v2/Leads/347706107846014");
            request.Method = "PUT";
            request.Headers["Authorization"] = "Zoho-oauthtoken 1000.abfeXXXXXXXXXXX2asw.XXXXXXXXXXXXXXXXXXsdc2";
            JObject requestBody = new JObject();
            JArray recordArray = new JArray();
            JObject recordObject = new JObject();
            recordObject.Add("Company", "Zylker");
            recordObject.Add("Last_Name", "Daly");
            recordObject.Add("First_Name", "Paul");
            recordObject.Add("Email", "p.daly@zylker.com");
            recordObject.Add("State", "Texas");
            recordArray.Add(recordObject);
            requestBody.Add("data", recordArray);
            JArray trigger = new JArray();
            trigger.Add("approval");
            trigger.Add("workflow");
            trigger.Add("blueprint");
            requestBody.Add("trigger", trigger);
            string dataString = requestBody.ToString();
            var data = Encoding.UTF8.GetBytes(dataString);
            int dataLength = data.Length;
            request.ContentLength = dataLength;
            using (var writer = request.GetRequestStream())
            {
                writer.Write(data, 0, dataLength);
            }
            request.KeepAlive = true;
            HttpWebResponse response;
            try
            {
                response = (HttpWebResponse)request.GetResponse();
            }
            catch (WebException e)
            {
                if (e.Response == null) { throw; }
                response = (HttpWebResponse)e.Response;
            }
            HttpWebResponse responseEntity = response;
            Console.WriteLine("HTTP Status Code : " + (int)response.StatusCode);
            string responsestring = new StreamReader(responseEntity.GetResponseStream()).ReadToEnd();
            responseEntity.Close();
            Console.WriteLine(responsestring);
        }
    }
}
3.0.03.x.x
Copied# Get instance of RecordOperations Class
record_operations = RecordOperations()
# Get instance of BodyWrapper Class that will contain the request body
request = BodyWrapper()
# List to hold Record instances
records_list = []
# Get instance of Record Class
record1 = ZCRMRecord()
# ID of the record to be updated
record1.set_id(3477061000011218001)
# Value to Record's fields can be provided in any of the following ways
"""
Call add_field_value method that takes two arguments
Import the zcrmsdk.src.com.zoho.crm.api.record.field file
1 -> Call Field "." and choose the module from the displayed list and press "." and choose the field name from the
displayed list.
2 -> Value
""""
record1.add_field_value(Field.Leads.last_name(), 'Python SDK')
record1.add_field_value(Field.Leads.company(), 'NNN')
record1.add_field_value(Field.Leads.city(), 'Hola')
"""
Call add_key_value method that takes two arguments
1 -> A string that is the Field's API Name
2 -> Value
"""
record1.add_key_value('Custom_field', 'Value')
record1.add_key_value('Custom_field_2', 90)
# record1.add_key_value('External', 'Test1')
# Add Record instance to the list
records_list.append(record1)
# Get instance of Record Class
record2 = ZCRMRecord()
# ID of the record to be updated
record2.set_id(3409643000000986033)
# Value to Record's fields can be provided in any of the following ways
"""
Call add_field_value method that takes two arguments
Import the zcrmsdk.src.com.zoho.crm.api.record.field file
1 -> Call Field "." and choose the module from the displayed list and press "." and choose the field name from the
displayed list.
2 -> Value
"""
record2.add_field_value(Field.Leads.last_name(), 'Edited Name')
record2.add_field_value(Field.Leads.city(), 'Hola')
"""
Call add_key_value method that takes two arguments
1 -> A string that is the Field's API Name
2 -> Value
"""
record2.add_key_value('Custom_field_2', 90)
record2.add_key_value('Discounted', 19.8)
# Used when GDPR is enabled
data_consent = Consent()
data_consent.set_consent_remarks("Approved.")
data_consent.set_consent_through('Email')
data_consent.set_contact_through_email(True)
data_consent.set_contact_through_social(False)
record2.add_key_value('Data_Processing_Basis_Details', data_consent)
# Add Record instance to the list
records_list.append(record2)
# Set the list to data in BodyWrapper instance
request.set_data(records_list)
trigger = []
trigger.append("approval")
trigger.append("workflow")
trigger.append("blueprint")
# Set the list containing the trigger operations to be run
request.set_trigger(trigger)
# Get instance of HeaderMap Class
header_instance = HeaderMap()
# header_instance.add(UpdateRecordsHeader.x_external, "Leads.External")
# Call update_records method that takes BodyWrapper instance and module_api_name as parameter.
response = record_operations.update_records(module_api_name, request, header_instance)


# Get instance of RecordOperations Class
record_operations = RecordOperations()
# Get instance of BodyWrapper Class that will contain the request body
request = BodyWrapper()
# List to hold Record instances
records_list = []
# Get instance of Record Class
record = ZCRMRecord()
# Value to Record's fields can be provided in any of the following ways
"""
Call add_field_value method that takes two arguments
Import the zcrmsdk.src.com.zoho.crm.api.record.field file
1 -> Call Field "." and choose the module from the displayed list and press "." and choose the field name from the
displayed list.
2 -> Value
"""
record.add_field_value(Field.Leads.last_name(), 'Python SDK')
record.add_field_value(Field.Leads.first_name(), 'New')
record.add_field_value(Field.Leads.company(), 'Zoho')
record.add_field_value(Field.Leads.city(), 'City')
"""
Call add_key_value method that takes two arguments
1 -> A string that is the Field's API Name
2 -> Value
"""
record.add_key_value('Custom_field', 'Value')
record.add_key_value('Custom_field_2', 12)
record.add_key_value('Date_1', date(2020, 4, 9))
record.add_key_value('Discounted', 23.34)
file_details = []
file_detail = FileDetails()
file_detail.set_file_id('479f0f5eebf0fb982f99e3832b35d23e29f67c2868ee4c789f22579895383c8')
file_details.append(file_detail)
record.add_key_value('File_Upload', file_details)
# Used when GDPR is enabled
data_consent = Consent()
data_consent.set_consent_remarks("Approved.")
data_consent.set_consent_through('Email')
data_consent.set_contact_through_email(True)
data_consent.set_contact_through_social(False)
record.add_key_value('Data_Processing_Basis_Details', data_consent)
# Add Record instance to the list
records_list.append(record)
# Set the list to data in BodyWrapper instance
request.set_data(records_list)
trigger = ["approval", "workflow", "blueprint"]
# Set the list containing the trigger operations to be run
request.set_trigger(trigger)
# Get instance of HeaderMap Class
header_instance = HeaderMap()
# Possible headers for Get Record operation
# header_instance.add(UpdateRecordHeader.x_external, "Leads.External")
# Call updateRecord method that takes BodyWrapper instance, module_api_name and record_id as parameter.
response = record_operations.update_record(record_id, module_api_name, request, header_instance)
Copieddef update_records():
    import requests
    import json

    url = 'https://www.zohoapis.com/crm/v2/Leads'

    headers = {
        'Authorization': 'Zoho-oauthtoken 1000.04be928e4a96XXXXXXXXXXXXX68.0b9eXXXXXXXXXXXX60396e268',
    }

    request_body = dict()
    record_list = list()

    record_object_1 = {
        'id': '3409643000002267003',
        'Phone': '9876543210',
        'Lead_Status': 'Contact in Future'
    }

    record_object_2 = {
        'id': '3409643000002267010',
        'State': 'Texas',
        'Email_Opt_Out': 'true'
    }

    record_list.append(record_object_1)

    record_list.append(record_object_2)

    request_body['data'] = record_list

    trigger = [
        'approval',
        'workflow',
        'blueprint'
    ]

    request_body['trigger'] = trigger

    response = requests.put(url=url, headers=headers, data=json.dumps(request_body).encode('utf-8'))

    if response is not None:
        print("HTTP Status Code : " + str(response.status_code))

        print(response.json())


update_records()


def update_record():
    import requests
    import json

    url = 'https://www.zohoapis.com/crm/v2/Leads/3409643000002267003'

    headers = {
        'Authorization': 'Zoho-oauthtoken 1000.494ba82d6c4a9fed59da0849efd6f248.2229dbcc44af630a929943c7b87ab252',
    }

    request_body = dict()
    record_list = list()

    record_object = {
        'Phone': '9876543210',
        'Lead_Status': 'Contact in Future',
        'Email_Opt_Out': 'false'
    }

    record_list.append(record_object)

    request_body['data'] = record_list

    trigger = [
        'approval',
        'workflow',
        'blueprint'
    ]

    request_body['trigger'] = trigger

    response = requests.put(url=url, headers=headers, data=json.dumps(request_body).encode('utf-8'))

    if response is not None:
        print("HTTP Status Code : " + str(response.status_code))

        print(response.json())

update_record()
1.0.010.x
Copied//Get instance of RecordOperations Class
let recordOperations = new RecordOperations();
//Get instance of BodyWrapper Class that will contain the request body
let request = new BodyWrapper();
//Array to hold Record instances
let recordsArray = [];
let record1 = new Record();
//ID of the record to be updated
record1.setId(3409643000000986033n);
/*
 * Call addFieldValue method that takes two arguments
 * Import the "zcrmsdk/core/com/zoho/crm/api/record/field" file
 * 1 -> Call Field "." and choose the module from the displayed list and press "." and choose the field name from the displayed list.
 * 2 -> Value
 */
record1.addFieldValue(Field.Leads.CITY, "City");
record1.addFieldValue(Field.Leads.LAST_NAME, "Last Name");
record1.addFieldValue(Field.Leads.FIRST_NAME, "First Name");
record1.addFieldValue(Field.Leads.COMPANY, "KKRNP");
/*
 * Call addKeyValue method that takes two arguments
 * 1 -> A string that is the Field's API Name
 * 2 -> Value
 */
record1.addKeyValue("Custom_field", "Custom val");
record1.addKeyValue("Custom_field_2", 10);
//Used when GDPR is enabled
let dataConsent = new Consent();
dataConsent.setConsentRemarks("Approved.");
dataConsent.setConsentThrough("Email");
dataConsent.setContactThroughEmail(true);
dataConsent.setContactThroughSocial(false);
record1.addKeyValue("Data_Processing_Basis_Details", dataConsent);
recordsArray.push(record1);
let record2 = new Record();
//ID of the record to be updated
record2.addFieldValue(Field.Leads.ID, 3409643000001881002n);
/*
 * Call addFieldValue method that takes two arguments
 * 1 -> Call Field "." and choose the module from the displayed list and press "." and choose the field name from the displayed list.
 * 2 -> Value
 */
record2.addFieldValue(Field.Leads.CITY, "City");
record2.addFieldValue(Field.Leads.LAST_NAME, "Last Name");
record2.addFieldValue(Field.Leads.FIRST_NAME, "First Name");
record2.addFieldValue(Field.Leads.COMPANY, "KKRNP");
/*
 * Call addKeyValue method that takes two arguments
 * 1 -> A string that is the Field's API Name
 * 2 -> Value
 */
record2.addKeyValue("Custom_field", "Value");
record2.addKeyValue("Custom_field_2", "value");
//Add Record instance to the array
recordsArray.push(record2);
//Set the array to data in BodyWrapper instance
request.setData(recordsArray);
let trigger = [];
trigger.push("approval");
trigger.push("workflow");
trigger.push("blueprint");
//Set the array containing the trigger operations to be run
request.setTrigger(trigger);
//Get instance of HeaderMap Class
let headerInstance = new HeaderMap();
//Call updateRecords method that takes BodyWrapper instance and moduleAPIName as parameter.
let response = await recordOperations.updateRecords(moduleAPIName, request,headerInstance);
Copiedasync function updateRecords() {
    const got = require("got");

    let url = 'https://www.zohoapis.com/crm/v2/Leads'

    let headers = {
        Authorization : "Zoho-oauthtoken 1000.354df3680XXXXXXXXXXXXX3.aae0efXXXXXXXXXXXXXXXXXX9"
    }

    let requestBody = {}
    let recordArray = []

    let recordObject1 = {
        'id': '3409643000002267003',
        'Phone': '9876543210',
        'Lead_Status': 'Contact in Future'
    }

    let recordObject2 = {
        'id': '3409643000002267010',
        'State': 'Texas',
        'Email_Opt_Out': 'true'
    }

    recordArray.push(recordObject1)
    recordArray.push(recordObject2)

    requestBody['data'] = recordArray

    let trigger = ['approval', 'workflow', 'blueprint']
    requestBody['trigger'] = trigger

    let requestDetails = {
        method : "PUT",
        headers : headers,
        body : JSON.stringify(requestBody),
        encoding: "utf8",
        throwHttpErrors : false
    };
    
    let response = await got(url, requestDetails)
    
    if(response != null) {
        console.log(response.statusCode);
        console.log(response.body);
    }
}
updateRecords()

async function updateRecord() {
    const got = require("got");

    let url = 'https://www.zohoapis.com/crm/v2/Leads/3409643000002267003'

    let headers = {
        Authorization : "Zoho-oauthtoken 1000.8cb99dxxxxxxxxxxxxx9be93.9b8xxxxxxxxxxxxxxxf"
    }

    let requestBody = {}
    let recordArray = []

    let recordObject = {
        'Phone': '9876543210',
        'Lead_Status': 'Contact in Future',
        'Email_Opt_Out': 'false'
    }

    recordArray.push(recordObject)

    requestBody['data'] = recordArray

    let trigger = ['approval', 'workflow', 'blueprint']
    requestBody['trigger'] = trigger

    let requestDetails = {
        method : "PUT",
        headers : headers,
        body : JSON.stringify(requestBody),
        encoding: "utf8",
        throwHttpErrors : false
    };
    
    let response = await got(url, requestDetails)
    
    if(response != null) {
        console.log(response.statusCode);
        console.log(response.body);
    }
}

updateRecord()
2.02.x.x
Copied#Update Record
# List to hold Record instances
records = []
# Get instance of Record Class
record = Record::Record.new

# """
# Call add_field_value method that takes two arguments
# 1 -> Call Field "::" and choose the module from the displayed list and press "." and choose the field name from the displayed list.
# 2 -> Value
# """
if module_api_name.downcase == 'Leads'.downcase
  record.add_field_value(Record::Field::Leads.Last_name, 'asdad')
  record.add_field_value(Record::Field::Leads.City, 'City')
  record.add_field_value(Record::Field::Leads.First_name, 'First Name')
  record.add_field_value(Record::Field::Leads.Company, 'KKRNP')
end

# file = Record::FileDetails.new
# file.file_id = "f46166fa14ce16c6e2622b3ce82830759c6334275dc8a317539bbda39a6ca056"
# files = [file]

# """
# Call add_key_value method that takes two arguments
# 1 -> A string that is the Field's API Name
# 2 -> Value
# """

if module_api_name == 'Contacts'
  file_details = []

  file_detail =  Record::FileDetails.new

  file_detail.file_id = '479f0f5eebf0fb982f99e3832b35d23e29f67c2868ee4c789f22579895383c8'

  file_details.push(file_detail)

  record.add_key_value('File_Upload_1', file_details)
end

# """
# Following methods are being used only by Inventory modules
# """
if %w[Quotes Sales_Orders Purchase_Orders Invoices].include? module_api_name
  line_item_product = Record::LineItemProduct.new
  line_item_product.id = 3_477_061_000_005_356_009
  inventory_line_item = Record::InventoryLineItems.new
  inventory_line_item.product = line_item_product
  inventory_line_item.list_price = 10.0
  inventory_line_item.discount = '5.0'
  inventory_line_item.quantity = 123.2
  line_tax = Record::LineTax.new
  line_tax.name = 'Tax1'
  line_tax.percentage = 20.0
  line_taxes = [line_tax]
  inventory_line_item.line_tax = line_taxes
  inventory_line_items = [inventory_line_item]
  record.add_key_value('Product_Details', inventory_line_items)
  record.add_key_value('Subject', 'asd')
end
# """
# Following methods are being used only by Activity modules
# """
if %w[Tasks Events Calls].include? module_api_name
  remind_at = Record::RemindAt.new
  remind_at.alarm = 'FREQ=NONE;ACTION=EMAILANDPOPUP;TRIGGER=DATE-TIME:2020-07-03T12:30:00+05:30'
  who_id =  Record::Record.new
  who_id.id = 3_524_033_000_003_429_023
  record.add_field_value(Record::Field::Tasks.Who_id, who_id)

  participant_record = Record::Participants.new
  participant_record.participant = 'asdasd@gmail.com'
  participant_record.type = 'email'
  record.add_field_value(Record::Field::Events.Event_title, 'New Automated Event')
  endtime = DateTime.new(2019, 8, 10, 4, 11, 9, '+03:00')
  record.add_field_value(Record::Field::Events.End_datetime, endtime)
  starttime = DateTime.new(2019, 8, 10, 4, 10, 9, '+03:00')
  record.add_field_value(Record::Field::Events.Start_datetime, starttime)

  participants = [participant_record]
  record.add_field_value(Record::Field::Events.Start_datetime, starttime)

  recurring_activity = Record::RecurringActivity.new

  recurring_activity.rrule = 'FREQ=DAILY;INTERVAL=10;UNTIL=2020-08-14;DTSTART=2020-07-03'
  record.add_field_value(Record::Field::Events.Recurring_activity, recurring_activity)
end

if module_api_name == 'Price_Books'
  pricing_detail_record = Record::PricingDetails.new
  pricing_detail_record.from_range = 1.0
  pricing_detail_record.to_range = 1.0
  pricing_detail_record.discount = 1.0
  pricing_detail_records = [pricing_detail_record]
  record.add_key_value('Price_Book_Name', 'assd')
  record.add_field_value(Record::Field::Price_Books.Pricing_details, pricing_detail_records)
  record.add_field_value(Record::Field::Price_Books.Pricing_model, Util::Choice.new('Flat'))
end
# # Get instance of BodyWrapper Class that will contain the request body
records.push(record)
trigger = []
trigger.push('approval')

trigger.push('workflow')

trigger.push('blueprint')
# Get instance of BodyWrapper Class that will contain the request body
body_wrapper = Record::BodyWrapper.new
# Set the list to data in BodyWrapper instance
body_wrapper.data = records
# Set the lar_id in BodyWrapper instance
body_wrapper.lar_id = '213123131'
#set trigger
body_wrapper.trigger = trigger
process = ['review_process']
body_wrapper.process = process
# Get instance of RecordOperations Class
rr = Record::RecordOperations.new
# Call updateRecord method that takes BodyWrapper instance, module_api_name and record_id as parameter
response = rr.update_record(record_id , module_api_name,body_wrapper )




#Update Records
# List to hold Record instances
records = []
# Get instance of Record Class
record = Record::Record.new
# """
# Call add_field_value method that takes two arguments
# 1 -> Call Field "::" and choose the module from the displayed list and press "." and choose the field name from the displayed list.
# 2 -> Value
# """
if module_api_name.downcase == 'Leads'.downcase
  record.add_field_value(Record::Field::Leads.Last_name, 'asdad')
  record.add_field_value(Record::Field::Leads.City, 'City')
  record.add_field_value(Record::Field::Leads.First_name, 'First Name')
  record.add_field_value(Record::Field::Leads.Company, 'KKRNP')
end
#set id
record.id = 3_524_033_000_005_933_009
# file = Record::FileDetails.new
# file.file_id = "f46166fa14ce16c6e2622b3ce82830759c6334275dc8a317539bbda39a6ca056"
# files = [file]

# """
# Call add_key_value method that takes two arguments
# 1 -> A string that is the Field's API Name
# 2 -> Value
# """

if module_api_name == 'Contacts'
  file_details = []

  file_detail =  Record::FileDetails.new

  file_detail.file_id = '479f0f5eebf0fb982f99e3832b35d23e29f67c2868ee4c789f22579895383c8'

  file_details.push(file_detail)

  record.add_key_value('File_Upload_1', file_details)
end

# """
# Following methods are being used only by Inventory modules
# """
if %w[Quotes Sales_Orders Purchase_Orders Invoices].include? module_api_name
  line_item_product = Record::LineItemProduct.new
  line_item_product.id = 3_477_061_000_005_356_009
  inventory_line_item = Record::InventoryLineItems.new
  inventory_line_item.product = line_item_product
  inventory_line_item.list_price = 10.0
  inventory_line_item.discount = '5.0'
  inventory_line_item.quantity = 123.2
  line_tax = Record::LineTax.new
  line_tax.name = 'Tax1'
  line_tax.percentage = 20.0
  line_taxes = [line_tax]
  inventory_line_item.line_tax = line_taxes
  inventory_line_items = [inventory_line_item]
  record.add_key_value('Product_Details', inventory_line_items)
  record.add_key_value('Subject', 'asd')
end
# """
# Following methods are being used only by Activity modules
# """
if %w[Tasks Events Calls].include? module_api_name
  remind_at = Record::RemindAt.new
  remind_at.alarm = 'FREQ=NONE;ACTION=EMAILANDPOPUP;TRIGGER=DATE-TIME:2020-07-03T12:30:00+05:30'
  who_id =  Record::Record.new
  who_id.id = 3_524_033_000_003_429_023
  record.add_field_value(Record::Field::Tasks.Who_id, who_id)

  participant_record = Record::Participants.new
  participant_record.participant = 'asdasd@gmail.com'
  participant_record.type = 'email'
  record.add_field_value(Record::Field::Events.Event_title, 'New Automated Event')
  endtime = DateTime.new(2019, 8, 10, 4, 11, 9, '+03:00')
  record.add_field_value(Record::Field::Events.End_datetime, endtime)
  starttime = DateTime.new(2019, 8, 10, 4, 10, 9, '+03:00')
  record.add_field_value(Record::Field::Events.Start_datetime, starttime)

  participants = [participant_record]
  record.add_field_value(Record::Field::Events.Start_datetime, starttime)

  recurring_activity = Record::RecurringActivity.new

  recurring_activity.rrule = 'FREQ=DAILY;INTERVAL=10;UNTIL=2020-08-14;DTSTART=2020-07-03'
  record.add_field_value(Record::Field::Events.Recurring_activity, recurring_activity)
end

if module_api_name == 'Price_Books'
  pricing_detail_record = Record::PricingDetails.new
  pricing_detail_record.from_range = 1.0
  pricing_detail_record.to_range = 1.0
  pricing_detail_record.discount = 1.0
  pricing_detail_records = [pricing_detail_record]
  record.add_key_value('Price_Book_Name', 'assd')
  record.add_field_value(Record::Field::Price_Books.Pricing_details, pricing_detail_records)
  record.add_field_value(Record::Field::Price_Books.Pricing_model, Util::Choice.new('Flat'))
end
# # Get instance of BodyWrapper Class that will contain the request body
records.push(record)
trigger = []
trigger.push('approval')

trigger.push('workflow')

trigger.push('blueprint')
# Get instance of BodyWrapper Class that will contain the request body
body_wrapper = Record::BodyWrapper.new
# Set the list to data in BodyWrapper instance
body_wrapper.data = records
# Set the lar_id in BodyWrapper instance
body_wrapper.lar_id = '213123131'
#set trigger
body_wrapper.trigger = trigger
process = ['review_process']
body_wrapper.process = process
# Get instance of RecordOperations Class
rr = Record::RecordOperations.new
# Get instance of HeaderMap Class
hm = HeaderMap.new
# Call update_records method that takes BodyWrapper instance and module_api_name as parameter.
response = rr.update_records(module_api_name,body_wrapper,hm)
Copiedclass UpdateRecords
    def execute
       
        url ="https://www.zohoapis.com/crm/v2/Leads"
        url = URI(url)
        req = Net::HTTP::Put.new(url.request_uri)
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        headers={}
        headers["Authorization"]="Zoho-oauthtoken 1000.354df3680XXXXXXXXXXXXX3.aae0efXXXXXXXXXXXXXXXXXX9"
        headers&.each { |key, value| req.add_field(key, value) }
       
        request_body = {};
        record_array = [];
        record_object = {};
        record_object["FieldAPIName"] = "FieldAPIValue";  
        record_object["Company"]="FieldAPIValue";
        record_object["Last_Name"]="3477061000007420006";
        record_object["id"]="3524033000006012022";
        record_object["First_Name"]="3477061000007420006";
        record_object["State"]="FieldAPIValue";    
        record_array = [record_object];
        request_body["data"] =record_array; 
        request_json = request_body.to_json
        req.body = request_json.to_s
        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

UpdateRecords.new.execute
1.0ES6
Copied//Get instance of RecordOperations Class
let recordOperations = new ZCRM.Record.Operations();
//Get instance of BodyWrapper Class that will contain the request body
let request = new ZCRM.Record.Model.BodyWrapper();
//Array to hold Record instances
let recordsArray = [];
let record1 = new ZCRM.Record.Model.Record();
//ID of the record to be updated
record1.setId(34770619074373n);
/*
 * Call addFieldValue method that takes two arguments
 * 1 -> Call Field "." and choose the module from the displayed list and press "." and choose the field name from the displayed list.
 * 2 -> Value
 */
record1.addFieldValue(ZCRM.Record.Model.Field.Leads.CITY, "City");
record1.addFieldValue(ZCRM.Record.Model.Field.Leads.LAST_NAME, "Last Name");
record1.addFieldValue(ZCRM.Record.Model.Field.Leads.FIRST_NAME, "First Name");
record1.addFieldValue(ZCRM.Record.Model.Field.Leads.COMPANY, "KKRNP");
/*
 * Call addKeyValue method that takes two arguments
 * 1 -> A string that is the Field's API Name
 * 2 -> Value
 */
record1.addKeyValue("Custom_field", "Custom val");
record1.addKeyValue("Custom_field_2", 10);
//Used when GDPR is enabled
let dataConsent = new ZCRM.Record.Model.Consent();
dataConsent.setConsentRemarks("Approved.");
dataConsent.setConsentThrough("Email");
dataConsent.setContactThroughEmail(true);
dataConsent.setContactThroughSocial(false);
record1.addKeyValue("Data_Processing_Basis_Details", dataConsent);
recordsArray.push(record1);
let record2 = new ZCRM.Record.Model.Record();
//ID of the record to be updated
record2.addFieldValue(ZCRM.Record.Model.Field.Leads.ID, 34096431881002n);
/*
 * Call addFieldValue method that takes two arguments
 * 1 -> Call Field "." and choose the module from the displayed list and press "." and choose the field name from the displayed list.
 * 2 -> Value
 */
record2.addFieldValue(ZCRM.Record.Model.Field.Leads.CITY, "City");
record2.addFieldValue(ZCRM.Record.Model.Field.Leads.LAST_NAME, "Last Name");
record2.addFieldValue(ZCRM.Record.Model.Field.Leads.FIRST_NAME, "First Name");
record2.addFieldValue(ZCRM.Record.Model.Field.Leads.COMPANY, "KKRNP");
/*
 * Call addKeyValue method that takes two arguments
 * 1 -> A string that is the Field's API Name
 * 2 -> Value
 */
record2.addKeyValue("Custom_field", "Value");
record2.addKeyValue("Custom_field_2", "value");
//Add Record instance to the array
recordsArray.push(record2);
//Set the array to data in BodyWrapper instance
request.setData(recordsArray);
let trigger = [];
trigger.push("approval");
trigger.push("workflow");
trigger.push("blueprint");
//Set the array containing the trigger operations to be run
request.setTrigger(trigger);
//Call updateRecords method that takes BodyWrapper instance and moduleAPIName as parameter.
let response = await recordOperations.updateRecords(moduleAPIName, request);
Copiedvar listener = 0;
class UpdateRecords {

	async updateListRecord() {
		var url = "https://www.zohoapis.com/crm/v2/Leads"
        var parameters = new Map()
        var headers = new Map()
        var token = {
            clientId:"1000.NPY9M1V0XXXXXXXXXXXXXXXXXXXF7H",
            redirectUrl:"http://127.0.0.1:5500/redirect.html",
            scope:"ZohoCRM.users.ALL,ZohoCRM.bulk.read,ZohoCRM.modules.ALL,ZohoCRM.settings.ALL,Aaaserver.profile.Read,ZohoCRM.org.ALL,profile.userphoto.READ,ZohoFiles.files.ALL,ZohoCRM.bulk.ALL,ZohoCRM.settings.variable_groups.ALL"
        }
        var accesstoken = await new UpdateRecords().getToken(token)
        headers.set("Authorization", "Zoho-oauthtoken " + accesstoken)
        var requestMethod = "PUT"
        var reqBody = {"data":[{"Last_Name":"Lead_changed","id":"35240336189014","Email":"newcrmapi@zoho.com","Company":"abc","Lead_Status":"Contacted"},{"Last_Name":"New Lead","Email":"newlead@zoho.com","Company":"abc","Lead_Status":"Contacted"}],"trigger":["approval","workflow","blueprint"]}
        var params = "";
        parameters.forEach(function(value, key) {
            if (parameters.has(key)) {
                if (params) {
                    params = params + key + '=' + value + '&';
                }
                else {
                    params = key + '=' + value + '&';
                }
            }
        });
        var apiHeaders = {};
        if(headers) {
            headers.forEach(function(value, key) {
                apiHeaders[key] = value;
            });
        }
        if (params.length > 0){
            url = url + '?' + params.substring(0, params.length - 1);
        }
        var requestObj = {
            uri : url,
            method : requestMethod,
            headers : apiHeaders,
            body : JSON.stringify(reqBody),
            encoding: "utf8",
            allowGetBody : true,
			throwHttpErrors : false
        };
        var result = await new UpdateRecords().makeAPICall(requestObj);
        console.log(result.status)
        console.log(result.response)
    }

	async updateRecord() {
		var url = "https://www.zohoapis.com/crm/v2/Leads/35240336189014"
        var parameters = new Map()
        var headers = new Map()
        var token = {
            clientId:"1000.NPY9M1V0XXXXXXXXXXXXXXXXXXXF7H",
            redirectUrl:"http://127.0.0.1:5500/redirect.html",
            scope:"ZohoCRM.users.ALL,ZohoCRM.bulk.read,ZohoCRM.modules.ALL,ZohoCRM.settings.ALL,Aaaserver.profile.Read,ZohoCRM.org.ALL,profile.userphoto.READ,ZohoFiles.files.ALL,ZohoCRM.bulk.ALL,ZohoCRM.settings.variable_groups.ALL"
        }
        var accesstoken = await new UpdateRecords().getToken(token)
        headers.set("Authorization", "Zoho-oauthtoken " + accesstoken)
        var requestMethod = "PUT"
        var reqBody = {"data":[{"Last_Name":"Lead_changed","Email":"newcrmapi@zoho.com","Company":"abc","Lead_Status":"Contacted"}],"trigger":["approval","workflow","blueprint"]}
        var params = "";
        parameters.forEach(function(value, key) {
            if (parameters.has(key)) {
                if (params) {
                    params = params + key + '=' + value + '&';
                }
                else {
                    params = key + '=' + value + '&';
                }
            }
        });
        var apiHeaders = {};
        if(headers) {
            headers.forEach(function(value, key) {
                apiHeaders[key] = value;
            });
        }
        if (params.length > 0){
            url = url + '?' + params.substring(0, params.length - 1);
        }
        var requestObj = {
            uri : url,
            method : requestMethod,
            headers : apiHeaders,
            body : JSON.stringify(reqBody),
            encoding: "utf8",
            allowGetBody : true,
			throwHttpErrors : false
        };
        var result = await new UpdateRecords().makeAPICall(requestObj);
        console.log(result.status)
        console.log(result.response)
	}

    async getToken(token) {

        if(listener == 0) {

            window.addEventListener("storage", function(reponse) {
                if(reponse.key === "access_token" && (reponse.oldValue != reponse.newValue || reponse.oldValue == null)){
                    location.reload();
                }
                if(reponse.key === "access_token"){

                    sessionStorage.removeItem("__auth_process");
                }
            }, false);
            listener = 1;
            if(sessionStorage.getItem("__auth_process")) {
                sessionStorage.removeItem("__auth_process");
            }
        }
        ["granted_for_session", "access_token","expires_in","expires_in_sec","location","api_domain","state","__token_init","__auth_process"].forEach(function (k) {
            var isKeyExists = localStorage.hasOwnProperty(k);
            if(isKeyExists) {
                sessionStorage.setItem(k, localStorage[k]);
            }
            localStorage.removeItem(k);
        });
        var valueInStore = sessionStorage.getItem("access_token");
        var tokenInit = sessionStorage.getItem("__token_init");
        if(tokenInit != null && valueInStore != null && Date.now() >= parseInt(tokenInit) + 59 * 60 * 1000){ // check after 59th minute
            valueInStore = null;
            sessionStorage.removeItem("access_token");
        }

        var auth_process = sessionStorage.getItem("__auth_process");
        if ((valueInStore == null && auth_process == null) || (valueInStore == 'undefined' && (auth_process == null || auth_process == "true"))) {
            var accountsUrl = "https://accounts.zoho.com/oauth/v2/auth"
            var clientId;
            var scope;
            var redirectUrl;
            if(token != null) {
                clientId = token.clientId;
                scope = token.scope;
                redirectUrl = token.redirectUrl;
            }

            var fullGrant = sessionStorage.getItem("full_grant");
            var grantedForSession = sessionStorage.getItem("granted_for_session");
            if(sessionStorage.getItem("__token_init") != null && ((fullGrant != null && "true" == full_grant) || (grantedForSession != null && "true" == grantedForSession))) {
                accountsUrl += '/refresh';
            }
            if (clientId && scope) {
                sessionStorage.setItem("__token_init", Date.now());
                sessionStorage.removeItem("access_token");
                sessionStorage.setItem("__auth_process", "true");
                window.open(accountsUrl + "?" + "scope" + "=" + scope + "&"+ "client_id" +"=" + clientId + "&response_type=token&state=zohocrmclient&redirect_uri=" + redirectUrl);
                ["granted_for_session", "access_token","expires_in","expires_in_sec","location","api_domain","state","__token_init","__auth_process"].forEach(function (k) {
                    var isKeyExists = localStorage.hasOwnProperty(k);
                    if(isKeyExists){
                        sessionStorage.setItem(k, localStorage[k]);
                    }
                    localStorage.removeItem(k);
                });
                valueInStore = sessionStorage.getItem("access_token");
            }
        }
        if(token != null && valueInStore != 'undefined'){
            token.accessToken = valueInStore;
        }
        return token.accessToken;
    }

    async makeAPICall(requestDetails) {
        return new Promise(function (resolve, reject) {
            var body, xhr, i;
            body = requestDetails.body || null;
            xhr = new XMLHttpRequest();
            xhr.withCredentials = true;
            xhr.open(requestDetails.method, requestDetails.uri, true);
            for (i in requestDetails.headers) {
                xhr.setRequestHeader(i, requestDetails.headers[i]);
            }
            xhr.send(body);
            xhr.onreadystatechange = function() {
                if(xhr.readyState == 4) {
                    resolve(xhr);
                }
            }
        })
    }
}
CopiedSyntax:
<variable> =zoho.crm.updateRecord(<module_name>, <record_ID>, <record_value>, [<query_value>], [<connection>]);
mandatory: module_name, record_id

Sample Request:
leadinfo = 
 {
 "Company":"Zylker", 
 "Last_Name":"Stewart", 
 "Phone":"9876XXXXXX",
 "Email":"stewart@zylker.com"
 }; 

response = zoho.crm.updateRecord("Leads",23033XXXXXXXXXXXXXX,leadinfo);

In the request, "@updatelead.json" contains the sample input.

Request JSON Keys

  • idstring, mandatory

    Specify the unique ID of the record that you want to update. Refer to the Get Records API to get the unique ID of the record.

  • $append_valuesJSON object, optional

    Represents whether you want to append the values of the multi-select picklist you specified in the input to the existing values. Specify the API names of the multi-select picklist and "true" or "false" as key-value pairs in this JSON object. The value "true" adds the values in the input to the multi-select picklist, while the value "false" replaces the existing values with the ones in the input.
    Example:
    "$append_values":{
    "Multi_Select_1": true,
    "Multi_Select_2": false
    }
    Note that the values are appended or replaced only for those records that have this key in the input. For the other multi-select picklists, the existing values are simply replaced by default.

  • apply_feature_executionJSON array

    Use this array to apply an existing layout rule when you update a record. Layout rules allow you to show a section, certain fields, set mandatory fields, or show a subform. However, you can only trigger the "Set Mandatory Field" option through the API. Specify the value layout_rules for the key name to apply a layout rule to the record. Note that you must give this key parallel to "data".
    Ensure that the input body includes all the keys required to satisfy the criteria in the layout rule. The system throws an error, otherwise. For example, if the layout rule triggers when the Lead_Source is Employee Referral, and you have mandated the Company field, then the system throws the MANDATORY_NOT_FOUND error if you fail to give the Company key in the input.

  • skip_feature_executionJSON array, optional

    By default, if a Cadence is configured for a module, it will be executed automatically when you update a record via API. This key lets you skip the execution of the Cadences feature during record updates. 
    Specify "cadences" as the value for the "name" key to skip Cadences execution for the record. Ensure you include this key alongside the "data" key in your request. The supported value for the "name" key is "cadences".

Note

  • The 'INVALID_DATA' error is thrown if the field value length is more than the maximum length defined for that field.
  • If an API is used inside a Function and the field value length exceeds the limit, then that function receives error response from the API. For ex: If the max length for a "Text field" is defined as 10, then value given for it in API cannot be "12345678901", as it has 11 characters.
  • A maximum of 100 records can be updated per API call.
  • You must use only Field API names in the input. You can obtain the field API names from
    • Fields metadata API (the value for the key “api_name” for every field). (Or)
    • Setup > Developer Hub > APIs and SDKs > API Names > {Module}. Choose “Fields” from the “Filter By” drop-down.
  • Records with Subform details can also be updated to CRM using the Records API. Please look at Subforms API to learn more about updating subform information within a record.
  • If the update API calls for a record are from DRE(Functions), due to workflow triggered on the same record's create/update, workflow alone will not get executed, irrespective of the trigger param configuration.
  • Refer Response Structure for more details about the JSON keys, values, and their descriptions. You can also use the sample response of each module as the input when you insert, update, or upsert a record in that corresponding module.
  • Refer to Get Records API to know more about field types and limits.
  • Refer to the Insert Records API for the accepted regex patterns for the email, phone, and URL fields.
  • You must provide the layout ID field if you want to
    • include the layout specific mandatory fields in the API-level mandatory check
    • include only the fields that are defined in your layout for API- level processing and ignore the rest

Sample Input

Copied{
    "data": [
        {
            "id": "554023000000527002",
            "Company": "Zylker",
            "State": "Baltimore",
            "Foreign_Languages": [ //multi-select picklist
                "Korean"
            ],
            "$append_values": {
                "Foreign_Languages": false
            }
        },
        {
            "id": "554023000000527003",
            "Company": "abc",
            "State": "Baltimore",
            "Foreign_Languages": [ //multi-select picklist
                "Spanish",
                "French"
            ],
            "$append_values": {
                "Foreign_Languages": true
            }
        }
    ],
    "trigger": [
        "approval"
    ],
    "apply_feature_execution": [
        {
            "name": "layout_rules"
        }
    ],
    "skip_feature_execution": [
        {
            "name": "cadences"
        }
    ]
}

Possible Errors

  • INVALID_MODULEHTTP 400

    The module name given seems to be invalid
    Resolution: You have specified an invalid module name or there is no tab permission, or the module could have been removed from the available modules. Specify a valid module API name.

  • INVALID_MODULEHTTP 400

    The given module is not supported in API
    Resolution: The modules such as Documents and Projects are not supported in the current API. (This error will not be shown, once these modules are been supported). Specify a valid module API name.

  • INVALID_DATAHTTP 400

    the id given seems to be invalid
    Resolution: You have specified an incorrect record ID. Please specify a valid record ID. Refer to Get Records API to get valid record IDs.

  • MANDATORY_NOT_FOUNDHTTP 400

    You have not specified one or more mandatory fields.
    Resolution:You must specify all the mandatory fields of the module including the layout-specific ones(if you want to execute the layout rule).

  • 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 ZohoCRM.modules.{module_name}.UPDATE scope. Create a new client with valid scope. Refer to scope section above.

  • NO_PERMISSIONHTTP 403

    Permission denied to update
    Resolution: The user does not have permission to update records data. Contact your system administrator.

  • ALREADY_MODIFIEDHTTP 412

    Record updated time has already passed if-unmodified-since time 
    Resolution: The record has been updated after the specified If-Unmodified-Since timestamp. Try again with a more recent value for the If-Unmodified-Since header.

  • INTERNAL_ERRORHTTP 500

    Internal Server Error
    Resolution: Unexpected and unhandled exception in 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 update records
    Resolution: The user does not have the permission to update records. Contact your system administrator.

  • DUPLICATE_DATAHTTP 400

    duplicate data
    Resolution: You have specified a duplicate value for one or more unique fields. Refer to Fields Metadata API to know the unique fields.

  • LIMIT_EXCEEDEDHTTP 400

    Only 50 participants can be added to an event.
    Resolution: You are trying to update an event with more than 50 participants. You can add only upto 50 participants to an event.

  • RECORD_LOCKEDHTTP 400

    Cannot update record that is not approved yet
    Resolution: Please wait until the Zia image or the merge duplicates process is complete and try again.

  • NOT_APPROVEDHTTP 400

    Cannot update record that is not approved yet
    Resolution:

    • Case 1: If the record is in the rejected state due to Zia image validation, either upload a new image (or) delete the failed image and, resubmit the record to Zia image validation.
    • Case 2: If the record is in Zia record approval, the system will not allow you to update the images of the record until the reviewer approves or rejects the record.

Sample Response

Copied{
  "data": [
    {
      "code": "SUCCESS",
      "details": {
        "Modified_Time": "2019-05-02T11:17:33+05:30",
        "Modified_By": {
          "name": "Patricia Boyle",
          "id": "554023000000235011"
        },
        "Created_Time": "2022-08-08T10:53:33+05:30",
        "id": "554023000000527002",
        "Created_By": {
          "name": "Patricia Boyle",
          "id": "554023000000235011"
        }
      },
      "message": "record updated",
      "status": "success"
    },
    {
      "code": "SUCCESS",
      "details": {
        "Modified_Time": "2022-08-08T10:53:33+05:30,
        "Modified_By": {
          "name": "Patricia Boyle",
          "id": "554023000000235011"
        },
        "Created_Time": "2019-05-02T11:17:33+05:30",
        "id": "554023000000527003",
        "Created_By": {
          "name": "Patricia Boyle",
          "id": "554023000000235011"
        }
      },
      "message": "record updated",
      "status": "success"
    }
  ]
}