Upload Organization Photo
Each organization has a unique logo or image. You can upload and update the organization photo using this API.
Purpose
To upload the brand logo or image of the organization.
Endpoints
Request Details
Request URL
https://www.zohoapis.com/crm/v2/org/photo
Header
Authorization: Zoho-oauthtoken d92d4xxxxxxxxxxxxx15f52
Scope
scope=ZohoCRM.org.{operation_type}
Possible operation types
ALL - Full access to Organization data
CREATE - Upload organization photo
WRITE - Edit organization data
Parameters
- filefile, mandatory
Choose the photo you want to upload.
Sample Request
Copiedcurl "https://www.zohoapis.com/crm/v2/org/photo"
-X POST
-H "Authorization: Zoho-oauthtoken 1000.8cb99dxxxxxxxxxxxxx9be93.9b8xxxxxxxxxxxxxxxf"
-F "file=@img1.png"
CopiedString absoluteFilePath = "/Users/user_name/Desktop/download.png";
//Get instance of OrgOperations Class
OrgOperations orgOperations = new OrgOperations();
//Get instance of FileBodyWrapper class that will contain the request file
com.zoho.crm.api.org.FileBodyWrapper fileBodyWrapper = new com.zoho.crm.api.org.FileBodyWrapper();
//Get instance of StreamWrapper class that takes absolute path of the file to be attached as parameter
StreamWrapper streamWrapper = new StreamWrapper(absoluteFilePath);
//Set file to the FileBodyWrapper instance
fileBodyWrapper.setFile(streamWrapper);
//Call uploadOrganizationPhoto method that takes FileBodyWrapper instance
APIResponse < ActionResponse > response = orgOperations.uploadOrganizationPhoto(fileBodyWrapper);
Copiedimport java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import 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.HttpPost;
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.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.ByteArrayBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
public class UploadOrganizationPhoto
{
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/org/photo");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
MultipartEntityBuilder multipartEntity = MultipartEntityBuilder.create();
java.io.File file = new java.io.File("/Users/username/Desktop/zoho.jpeg");
@SuppressWarnings("resource")
InputStream stream = new FileInputStream(file);
byte[] buffer = new byte[8192];
ByteArrayOutputStream output = new ByteArrayOutputStream();
int bytesRead;
while ((bytesRead = stream.read(buffer)) != -1)
{
output.write(buffer, 0, bytesRead);
}
multipartEntity.addPart("file", new ByteArrayBody(output.toByteArray(), file.getName()));
requestBase.setEntity(multipartEntity.build());
HttpResponse response = httpclient.execute(requestObj);
HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
System.out.println(responseString);
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
Copied//Get instance of OrgOperations Class
$orgOperations = new OrgOperations();
//Get instance of FileBodyWrapper class that will contain the request file
$fileBodyWrapper = new FileBodyWrapper();
//Get instance of StreamWrapper class that takes absolute path of the file to be attached as parameter
$streamWrapper = new StreamWrapper(null, null, $absoluteFilePath);
//Set file to the FileBodyWrapper instance
$fileBodyWrapper->setFile($streamWrapper);
//Call uploadOrganizationPhoto method that takes FileBodyWrapper instance
$response = $orgOperations->uploadOrganizationPhoto($fileBodyWrapper);
Copied<?php
class UploadOrganizationPhoto
{
public function execute(){
$curl_pointer = curl_init();
$curl_options = array();
$curl_options[CURLOPT_URL] = "https://www.zohoapis.com/crm/v2/org/photo";
$curl_options[CURLOPT_RETURNTRANSFER] = true;
$curl_options[CURLOPT_HEADER] = 1;
$curl_options[CURLOPT_CUSTOMREQUEST] = "POST";
$fileName = "pic.png";
$filePath = "/Users/test/Desktop/pic.png";
$file = fopen($filePath, "rb");
$fileData = fread($file, filesize($filePath));
$date = new \DateTime();
$current_time_long= $date->getTimestamp();
$lineEnd = "\r\n";
$hypen = "--";
$contentDisp = "Content-Disposition: form-data; name=\""."file"."\";filename=\"".$fileName."\"".$lineEnd.$lineEnd;
$data = utf8_encode($lineEnd);
$boundaryStart = utf8_encode($hypen.(string)$current_time_long.$lineEnd) ;
$data = $data.$boundaryStart;
$data = $data.utf8_encode($contentDisp);
$data = $data.$fileData.utf8_encode($lineEnd);
$boundaryend = $hypen.(string)$current_time_long.$hypen.$lineEnd.$lineEnd;
$data = $data.utf8_encode($boundaryend);
$curl_options[CURLOPT_POSTFIELDS]= $data;
$headersArray = array();
$headersArray = ['ENCTYPE: multipart/form-data','Content-Type:multipart/form-data;boundary='.(string)$current_time_long];
$headersArray[] = "content-type".":"."multipart/form-data";
$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 UploadOrganizationPhoto())->execute();
Copied//Get instance of OrgOperations Class
OrgOperations orgOperations = new OrgOperations();
//Get instance of FileBodyWrapper class that will contain the request file
FileBodyWrapper fileBodyWrapper = new FileBodyWrapper();
//Get instance of StreamWrapper class that takes absolute path of the file to be attached as parameter
StreamWrapper streamWrapper = new StreamWrapper(absoluteFilePath);
//Set file to the FileBodyWrapper instance
fileBodyWrapper.File = streamWrapper;
//Call uploadOrganizationPhoto method that takes FileBodyWrapper instance
APIResponse<ActionResponse> response = orgOperations.UploadOrganizationPhoto(fileBodyWrapper);
Copiedusing System;
using System.IO;
using System.Net;
using System.Text;
namespace Com.Zoho.Crm.API.Sample.RestAPI.Organization
{
public class UploadOrganizationPhoto
{
public static void UploadPhoto()
{
string boundary = "----FILEBOUNDARY----";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.zohoapis.com/crm/v2/org/photo");
request.ContentType = "multipart/form-data; boundary=" + boundary;
request.Method = "POST";
request.Headers["Authorization"] = "Zoho-oauthtoken 1000.abfeXXXXXXXXXXX2asw.XXXXXXXXXXXXXXXXXXsdc2";
request.KeepAlive = true;
FileInfo fileInfo = new FileInfo("/Users/abc-7453/Desktop/zoho.jpeg");
string name = fileInfo.Name;
Stream stream = fileInfo.OpenRead();
Stream fileDataStream = new MemoryStream();
var boundarybytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n");
var endBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--");
string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" + "Content-Type: application/octet-stream\r\n\r\n";
fileDataStream.Write(boundarybytes, 0, boundarybytes.Length);
var header = string.Format(headerTemplate, "file", name);
var headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
fileDataStream.Write(headerbytes, 0, headerbytes.Length);
var buffer = new byte[1024];
var bytesRead = 0;
while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) != 0)
{
fileDataStream.Write(buffer, 0, bytesRead);
}
fileDataStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);
request.ContentLength = fileDataStream.Length;
using (Stream requestStream = request.GetRequestStream())
{
fileDataStream.Position = 0;
byte[] tempBuffer = new byte[fileDataStream.Length];
fileDataStream.Read(tempBuffer, 0, tempBuffer.Length);
fileDataStream.Close();
requestStream.Write(tempBuffer, 0, tempBuffer.Length);
}
HttpWebResponse response;
try
{
response = (HttpWebResponse)request.GetResponse();
}
catch (WebException e)
{
if (e.Response == null) { throw; }
response = (HttpWebResponse)e.Response;
}
HttpWebResponse responseEntity = response;
string responsestring = new StreamReader(responseEntity.GetResponseStream()).ReadToEnd();
responseEntity.Close();
Console.WriteLine(responsestring);
}
}
}
Copied """
This method is used to upload the brand logo or image of the organization and print the response.
:param absolute_file_path: The absolute file path of the file to be attached
"""
"""
example
absolute_file_path = "/Users/user_name/Desktop/logo.png";
"""
# Get instance of OrgOperations Class
org_operations = OrgOperations()
# Get instance of FileBodyWrapper class that will contain the request file
request = FileBodyWrapper()
"""
StreamWrapper can be initialized in any of the following ways
* param 1 -> fileName
* param 2 -> Read Stream.
"""
# stream_wrapper = StreamWrapper(stream=open(absolute_file_path, 'rb'))
"""
* param 1 -> fileName
* param 2 -> Read Stream
* param 3 -> Absolute File Path of the file to be attached
"""
stream_wrapper = StreamWrapper(file_path=absolute_file_path)
# Set file to the FileBodyWrapper instance
request.set_file(stream_wrapper)
# Call upload_organization_photo method that takes FileBodyWrapper instance as parameter
response = org_operations.upload_organization_photo(request)
Copieddef upload_organization_photo():
import requests
url = 'https://www.zohoapis.com/crm/v2/org/photo'
headers = {
'Authorization': 'Zoho-oauthtoken 1000.04be928e4a96XXXXXXXXXXXXX68.0b9eXXXXXXXXXXXX60396e268',
}
request_body = {
'file': open('/Users/abc-123/Desktop/img_1.png', 'rb')
}
response = requests.post(url=url, files=request_body, headers=headers)
if response is not None:
print("HTTP Status Code : " + str(response.status_code))
print(response.json())
upload_organization_photo()
Copied//Get instance of OrgOperations Class
let orgOperations = new OrgOperations();
//Get instance of FileBodyWrapper class that will contain the request file
let fileBodyWrapper = new FileBodyWrapper();
/** StreamWrapper can be initialized in any of the following ways */
/**
* param 1 -> fileName
* param 2 -> Read Stream.
*/
let streamWrapper = new StreamWrapper(null, fs.createReadStream(absoluteFilePath));
/**
* param 1 -> fileName
* param 2 -> Read Stream
* param 3 -> Absolute File Path of the file to be attached
*/
// let streamWrapper = new StreamWrapper(null, null, absoluteFilePath);
//Set file to the FileBodyWrapper instance
fileBodyWrapper.setFile(streamWrapper);
//Call uploadOrganizationPhoto method that takes FileBodyWrapper instance as parameter
let response = await orgOperations.uploadOrganizationPhoto(fileBodyWrapper);
Copiedasync function uploadOrganizationPhoto() {
const got = require("got");
const FormData = require("form-data");
const fs = require("fs");
let url = 'https://www.zohoapis.com/crm/v2/org/photo'
let headers = {
Authorization : "Zoho-oauthtoken 1000.8cb99dxxxxxxxxxxxxx9be93.9b8xxxxxxxxxxxxxxxf"
}
let requestBody = new FormData()
requestBody.append('file', fs.createReadStream('/Users/abc-123/Desktop/img.png'))
let requestDetails = {
method : "POST",
headers : headers,
body : requestBody,
encoding: "utf8",
throwHttpErrors : false
}
let response = await got(url, requestDetails)
if(response != null) {
console.log(response.statusCode);
console.log(response.body);
}
}
uploadOrganizationPhoto()
Copied# Get instance of OrgOperations Class
org_operation = Org::OrgOperations.new
fbw = Org::FileBodyWrapper.new
# """
# StreamWrapper can be initialized in any of the following ways
# * param 1 -> fileName
# * param 2 -> Read Stream.
# * param 3 -> Absolute File Path of the file to be attached
# """
# stream_wrapper = StreamWrapper.new(name,stream,absolutefilepath)
sw = Util::StreamWrapper.new(nil, nil, absolute_file_path)
# Set file to the FileBodyWrapper instance
fbw.file = sw
response = org_operation.upload_organization_photo(fbw)
Copiedclass UploadOrganizationPhoto
def execute
url = "https://www.zohoapis.com/crm/v2/org/photo"
url = URI(url)
req = Net::HTTP::Post.new(url.request_uri)
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
headers={}
headers["Authorization"]="Zoho-oauthtoken 1000.50XXXXXXXXX&77e3a.44XXXXXXXXX8353"
headers&.each { |key, value| req.add_field(key, value) }
file_path = "/Users/test/Desktop/pic.png"
file = File.open(file_path)
data=[["file",file.read, { filename: "pic.png" }]]
req.set_form(data,'multipart/form-data')
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
UploadOrganizationPhoto.new.execute
Copied//Get instance of OrgOperations Class
let orgOperations = new ZCRM.Org.Operations();
//Get instance of FileBodyWrapper class that will contain the request file
let fileBodyWrapper = new ZCRM.Org.Model.FileBodyWrapper();
/** StreamWrapper can be initialized in any of the following ways */
var filesToLoad = document.getElementById("org").files;
var file = filesToLoad[0];
/**
* param 1 -> fileName
* param 2 -> Read Stream.
*/
let streamWrapper = new StreamWrapper.Model.StreamWrapper(null, file);
/**
* param 1 -> fileName
* param 2 -> Read Stream
* param 3 -> Absolute File Path of the file to be attached
*/
// let streamWrapper = new StreamWrapper(null, null, absoluteFilePath);
//Set file to the FileBodyWrapper instance
fileBodyWrapper.setFile(streamWrapper);
//Call uploadOrganizationPhoto method that takes FileBodyWrapper instance as parameter
let response = await orgOperations.uploadOrganizationPhoto(fileBodyWrapper);
Copiedvar listener = 0;
class UploadOrganizationPhoto {
async uploadPhoto() {
var url = "https://www.zohoapis.com/crm/v2/org/photo"
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 UploadOrganizationPhoto().getToken(token)
headers.set("Authorization", "Zoho-oauthtoken " + accesstoken)
var filesToLoad = document.getElementById("org_photo").files;
var file = filesToLoad[0];
var requestMethod = "POST"
var formDataRequestBody = new FormData();
formDataRequestBody.append("file", new Blob([file]),file.name);
var reqBody = formDataRequestBody
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 : reqBody,
encoding: "utf8",
allowGetBody : true,
throwHttpErrors : false
};
var result = await new UploadOrganizationPhoto().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);
}
}
})
}
}
Copiedphoto = invokeUrl
[
url: "https://pbs.twimg.com/profile_images/1212572524128563200/w2ub-ATf_400x400.jpg"
type: GET
];
photo.setParamName("file");
response = invokeurl
[
url: "https://www.zohoapis.com/crm/v2/org/photo"
type: POST
files: photo
connection:"crm_oauth_connection"
];
In the request, "file=@img1.png" contains the sample image.
Possible Errors
- INVALID_DATAHTTP 400
Invalid file type
Resolution: The file being uploaded is not an image file. Ensure that the file you are trying to upload is an image file. - INVALID_DATAHTTP 400
The request does not contain any file
Resolution: You have not added any file to the request. Ensure that you add an image file to the request. Refer to parameters section above. - INVALID_DATAHTTP 400
The request contains more than one file
Resolution: You have added more than one file to the request. Ensure that you add only one image file to the request. Refer to parameters section above. - FILE_SIZE_MORE_THAN_ALLOWED_SIZEHTTP 415
Please check if the file size is in the correct range
Resolution: The photo you are trying to upload either exceeds the allowed size(1 MB) or the allowed resolution(10 MP). Ensure that the photo being uploaded is within the prescribed range. - CANNOT_PROCESSHTTP 400
Zia vision rejected the photo
Resolution: The image could not be uploaded since it was rejected by Zia Image validator. Try uploading another image. - 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.org.CREATE/ZohoCRM.org.WRITE 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 upload organization photo. Contact your system administrator. - INTERNAL_ERRORHTTP 500
Internal Server Error
Resolution: Unexpected and unhandled exception in the server. Contact support team. - INVALID_REQUEST_METHODHTTP 400
The http request method type is not a valid one
Resolution: You have specified an invalid HTTP method to access the API URL. Specify a valid request method. Refer to endpoints section above. - AUTHORIZATION_FAILEDHTTP 400
User does not have sufficient privilege to add organization photo.
Resolution: The user does not have the permission to add organization photo. Contact your system administrator.
Sample Response
Copied{
"message": "photo uploaded successfully",
"details": {},
"status": "success",
"code": "SUCCESS",
}