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"
3.0.08.0
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();
		}
	}
}
4.0.04.x
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();
3.0.08.x
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);
        }
    }
}
3.0.03.x.x
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()
1.0.010.x
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()
2.1.0
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"
Note
  • 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"
            }
        }
    ]
}