Share Records API
In Zoho CRM, we have different levels of data sharing. One of them is record-level data sharing, where the users can share individual records with other users in the organization. The records can be shared with or without the related lists.
Purpose
To get the details of a shared record.
Request Details
Request URL
{api-domain}/crm/{version}/{module_api_name}/{record_id}/actions/share
Supported modules
Leads, Accounts, Contacts, Deals, Campaigns, Cases, Solutions, Products, Vendors, Price Books, Quotes, Sales Orders, Purchase Orders, Invoices, and Custom.
Header
Authorization: Zoho-oauthtoken d92d4xxxxxxxxxxxxx15f52
Scope
scope=ZohoCRM.share.{module_name}.{operation_type}
Possible module names
leads, accounts, contacts, deals, campaigns, cases, solutions, products, vendors, pricebooks, quotes, salesorders, purchaseorders, invoices, and custom.
Possible operation types
ALL - Full access to the record
READ - Get shared record's details
Sample Request
Copiedcurl "https://www.zohoapis.com/crm/v2.1/Contacts/4150868000001191072/actions/share"
-X GET
-H "Authorization: Zoho-oauthtoken 1000.8cb99dxxxxxxxxxxxxx9be93.9b8xxxxxxxxxxxxxxxf"
CopiedString moduleAPIName = "Leads";
Long recordId = 3477061000005177002L;
//Get instance of ShareRecordsOperations Class that takes recordId and moduleAPIName as parameter
ShareRecordsOperations shareRecordsOperations = new ShareRecordsOperations(recordId, moduleAPIName);
//Get instance of ParameterMap Class
ParameterMap paramInstance = new ParameterMap();
paramInstance.add(GetSharedRecordDetailsParam.VIEW, "summary");
//paramInstance.add(GetSharedRecordDetailsParam.SHAREDTO, 3477061000005791024L);
//Call getSharedRecordDetails method that takes paramInstance as parameter
APIResponse < ResponseHandler > response = shareRecordsOperations.getSharedRecordDetails(paramInstance);
Copiedpackage com.zoho.crm.api.sample.restapi.sharerecords;
import javax.net.ssl.SSLContext;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
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.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
public class ShareRecordsAPI
{
public static void main(String[] args)
{
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.1/Leads/34770615623115/actions/share");
uriBuilder.addParameter("view", "summary");
uriBuilder.addParameter("sharedTo", "34770610173021");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
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();
}
}
}
Copied//Get instance of ShareRecordsOperations Class that takes moduleAPIName and recordId as parameter
$shareRecordsOperations = new ShareRecordsOperations( $recordId,$moduleAPIName);
//Get instance of ParameterMap Class
$paramInstance = new ParameterMap();
$paramInstance->add(GetSharedRecordDetailsParam::view(), "summary");
// $paramInstance->add(GetSharedRecordDetailsParam::sharedTo(), "34770615791024");
//Call getSharedRecordDetails method that takes paramInstance as parameter
$response = $shareRecordsOperations->getSharedRecordDetails($paramInstance);
Copied<?php
class GetSharedRecords{
public function execute(){
$curl_pointer = curl_init();
$curl_options = array();
$url = "https://www.zohoapis.com/crm/v2.1/Leads/3477061000005623115/actions/share?";
$parameters = array();
$parameters["view"]="summary";
$parameters["sharedTo"]="3477061000000173021";
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 GetSharedRecords())->execute();
Copied//Get instance of ShareRecordsOperations Class that takes recordId and moduleAPIName as parameter
ShareRecordsOperations shareRecordsOperations = new ShareRecordsOperations(recordId, moduleAPIName);
//Get instance of ParameterMap Class
ParameterMap paramInstance = new ParameterMap();
paramInstance.Add(GetSharedRecordDetailsParam.VIEW, "summary");
//paramInstance.Add(GetSharedRecordDetailsParam.SHAREDTO, 3477061000005791024);
//Call GetSharedRecordDetails method that takes paramInstance as parameter
APIResponse<ResponseHandler> response = shareRecordsOperations.GetSharedRecordDetails(paramInstance);
Copiedusing System;
using System.IO;
using System.Net;
namespace Com.Zoho.Crm.API.Sample.RestAPI.ShareRecords
{
public class ShareRecordsAPI
{
public static void ShareRecords()
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.zohoapis.com/crm/v2.1/Leads/34770617753001/actions/share?view=summary&sharedTo=347706100173021");
request.Method = "GET";
request.Headers["Authorization"] = "Zoho-oauthtoken 1000.abfeXXXXXXXXXXX2asw.XXXXXXXXXXXXXXXXXXsdc2";
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);
}
}
}
Copied# Get instance of ShareRecordsOperations Class that takes module_api_name and record_id as parameter
shared_records_operations = ShareRecordsOperations(record_id, module_api_name)
# Get instance of ParameterMap Class
param_instance = ParameterMap()
# Possible parameters of Get Shared Record Details operation
# Allowed values - summary, manage
param_instance.add(GetSharedRecordDetailsParam.view, 'summary')
# param_instance.add(GetSharedRecordDetailsParam.sharedto, 3409643000000302031)
# Call get_shared_record_details method that takes ParameterMap instance as parameter
response = shared_records_operations.get_shared_record_details(param_instance)
Copieddef get_share_records_details():
import requests
url = 'https://www.zohoapis.com/crm/v2.1/Contacts/3409643000002277005/actions/share'
headers = {
'Authorization': 'Zoho-oauthtoken 1000.04be928e4a96XXXXXXXXXXXXX68.0b9eXXXXXXXXXXXX60396e268',
}
parameters = {
'view': 'summary',
'sharedTo': '3409643000000174021'
}
response = requests.get(url=url, headers=headers, params=parameters)
if response is not None:
print("HTTP Status Code : " + str(response.status_code))
print(response.json())
get_share_records_details()
Copied//Get instance of ShareRecordsOperations Class that takes moduleAPIName and recordId as parameter
let sharedRecordsOperations = new ShareRecordsOperations(recordId, moduleAPIName);
//Get instance of ParameterMap Class
let paramInstance = new ParameterMap();
/* Possible parameters of Get Shared Record Details operation */
await paramInstance.add(GetSharedRecordDetailsParam.VIEW, "summary");
// await paramInstance.add(GetSharedRecordDetailsParam.SHAREDTO, "3409643000000302031");
//Call getSharedRecordDetails method that takes ParameterMap instance as parameter
let response = await sharedRecordsOperations.getSharedRecordDetails(paramInstance);
Copiedasync function getShareRecordsDetails() {
const got = require("got");
let url = 'https://www.zohoapis.com/crm/v2.1/Contacts/3409643000002277005/actions/share'
let headers = {
Authorization : "Zoho-oauthtoken 1000.8cb99dxxxxxxxxxxxxx9be93.9b8xxxxxxxxxxxxxxxf"
}
let parameters = {
'view': 'summary',
'sharedTo': '3409643000000174021'
}
let requestDetails = {
method : "GET",
headers : headers,
searchParams : parameters,
throwHttpErrors : false
}
let response = await got(url, requestDetails)
if(response != null) {
console.log(response.statusCode);
console.log(response.body);
}
}
getShareRecordsDetails()
Copied# Get instance of ShareRecordsOperations Class that takes module_api_name and record_id as parameter
sro = ShareRecords::ShareRecordsOperations.new(record_id, module_api_name)
# Get instance of ParameterMap Class
pm = ParameterMap.new
# Possible parameters of Get Shared Record Details operation
# Allowed values - summary, manage
pm.add(ShareRecords::ShareRecordsOperations::GetSharedRecordDetailsParam.view, 'summary')
# Call get_shared_record_details method that takes ParameterMap instance as parameter
response = sro.get_shared_record_details(pm)
Copiedrequire 'net/http'
require 'json'
class GetSharedRecords
def execute
parameters ={}
parameters["view"]="summary"
parameters["sharedTo"]="3477061000000173021"
query_string = parameters.to_a.map { |x| "#{x[0]}=#{x[1]}" }.join('&')
url= "https://www.zohoapis.com/crm/v2.1/Leads/3477061000005623115/actions/share"
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
GetSharedRecords.new.execute
Copiedresponse = invokeurl
[
url: "https://www.zohoapis.com/crm/v2.1/Contacts/4150868000001191072/actions/share"
type: GET
connection:"crm_oauth_connection"
];
info response;
Parameters
- sharedTostring, optional
Pass the current user’s ID to know the details like the ID and the module of the records shared with that user.
- viewstring, optional
Represents the details of the shared records that you want to retrieve.
Possible values:
summary:Refer to the "Response Structure" section to know the keys that will be retrieved when you specify this parameter.
Sample Request with sharedTo parameter
Copiedcurl "https://www.zohoapis.com/crm/v2.1/Contacts/4150868000001191072/actions/share?view=summary&sharedTo=4150868000001199001"
-X GET
-H "Authorization: Zoho-oauthtoken 1000.8cb99dxxxxxxxxxxxxx9be93.9b8xxxxxxxxxxxxxxxf"
The response differs based on the access permissions of the user with whom the record is shared. If the user already has full permission over the shared record via role, territory, data sharing, user-lookup field, the response will entail the "user" key representing the users with whom the record is shared.
The result is sorted based on the following criteria in the order mentioned below:
The order in which the records are shared. For instance, if a record is shared to user A and then to user B, in the result, user B's details will be displayed first.
Whether the record is shared alone or with related list. The records that are shared alone have higher precedence.
The permissions given to the user. The order of precedence is from high to low—Full Access, Read-Write, Read-only.
The time at which the record was shared. The order of precedence is from oldest to latest.
Sample Response when the user gains access only via record-level sharing
Copied{
"share": [
{
"share_related_records": true,
"shared_through": {
"entity_name": "Regina Smith",
"module": {
"name": "Contacts",
"id": "4150868000000002213"
},
"id": "4150868000004381115"
},
"shared_time": "2021-03-01T17:54:18+05:30",
"permission": "read_only",
"shared_by": {
"full_name": "Patricia Boyle",
"id": "4150868000000225013",
"zuid": "694579958"
}
}
]
}
Possible Errors
- OAUTH_SCOPE_MISMATCHHTTP 401
invalid oauth scope to access this URLe
Resolution: The client does not have the scope to ZohoCRM.share.{module_name}.READ
(or)
The module name given in the URL is either Events, Calls, Tasks or any Linking module.
(or)
The module name given in the URL is invalid. - INVALID_URL_PATTERNHTTP 404
Please check if the URL trying to access is a correct one
Resolution: The request URL has syntactical errors. - INVALID_DATAHTTP 400
ENTITY_ID_INVALID
Resolution: The record ID given in the URL is either invalid
(or)
does not belong to the module mentioned. - INVALID_DATAHTTP 400
Scheduler is running.
Resolution: The record is either being shared or revoked currently. - INVALID_MODULEHTTP 400
the module name given seems to be invalid
Resolution: The module name specified is incorrect. Refer to supported modules section above and specify a valid module API name. - PATTERN_NOT_MATCHEDHTTP 400
Please check whether the input values are correct
Resolution: The value specified in 'view' parameter is incorrect. Refer to parameters section above and specify valid input. - NO_PERMISSIONHTTP 403
Permission denied to read
Resolution: The user does not have permission to read details of a shared record. Contact your system administrator. - 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 read.
Resolution: The user does not have the permission to read details of a shared record. Contact your system administrator.
Sample Response when the user already has full permission to access the record
Copied{
"share": [
{
"share_related_records": true,
"shared_through": {
"entity_name": "Regina Smith",
"module": {
"name": "Contacts",
"id": "4150868000000002213"
},
"id": "4150868000004381115"
},
"shared_time": "2021-03-01T17:54:18+05:30",
"permission": "read_only",
"shared_by": {
"full_name": "Patricia Boyle",
"id": "4150868000000225013",
"zuid": "694579958"
},
"user": {
"full_name": "Amanda Carr",
"id": "4150868000001199001",
"zuid": "705903469"
}
},
{
"share_related_records": true,
"shared_through": {
"entity_name": "Mill Thomas",
"module": {
"name": "Contacts",
"id": "4150868000000002213"
},
"id": "4150868000004381115"
},
"shared_time": "2021-03-01T17:54:18+05:30",
"permission": "read_only",
"shared_by": {
"full_name": "Patricia Boyle",
"id": "4150868000000225013",
"zuid": "694579958"
},
"user": {
"full_name": "Derek Smith",
"id": "4150868000001248015",
"zuid": "707001331"
}
}
]
}