Multiple Currencies in Organization

The multi-currency support in Zoho CRM helps you to handle business and transactions in the global market effortlessly. With the multi-currency feature you can:

  • Estimate the value of a deal in your home currency as well as in your customer's local currency

  • Generate and view any report (with figures in other currencies) in your home currency

  • Import reports with figures in multiple currencies

Using Multiple Currencies

The Administrator of your organization's CRM account must add the home currency and other currencies before other profile users start using them. The system stores the currency specified in input JSON as your home currency. Although you can edit the properties of your home currency, you cannot change it. To know how to update currencies refer to Update Currencies.

Purpose

To enable multiple currencies for your organization.

Request Details

Request URL

https://www.zohoapis.com/crm/v2/org/currencies/actions/enable

Header

Authorization: Zoho-oauthtoken d92d4xxxxxxxxxxxxx15f52

Scope

scope=ZohoCRM.settings.currencies.CREATE

Sample Request

Copiedcurl "https://www.zohoapis.com/crm/v2/org/currencies/actions/enable"
-X POST
-d "input.json"
-H "Authorization: Zoho-oauthtoken 1000.8cb99dxxxxxxxxxxxxx9be93.9b8xxxxxxxxxxxxxxxf"
3.0.08.0
Copied//Get instance of CurrenciesOperations Class
CurrenciesOperations currenciesOperations = new CurrenciesOperations();

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

//Get instance of Currency Class
com.zoho.crm.api.currencies.Currency currency = new com.zoho.crm.api.currencies.Currency();

//To set the position of the ISO code in the base currency.
//true: Display ISO code before the currency value.
//false: Display ISO code after the currency value.
currency.setPrefixSymbol(true);

//To set the name of the base currency.
currency.setName("Algerian Dinar-ADN");

//To set the ISO code of the base currency.
currency.setIsoCode("DZD");

//To set the symbol of the base currency.
currency.setSymbol("DA");

//To set the rate at which the currency has to be exchanged for home base currency.
currency.setExchangeRate("1.0000000");

//To set the status of the base currency.
//true: The currency is active.
//false: The currency is inactive.
currency.setIsActive(true);

Format format = new Format();

//It can be a Period or Comma, depending on the base currency.
format.setDecimalSeparator(new Choice < String > ("Period"));

//It can be a Period, Comma, or Space, depending on the base currency.  
format.setThousandSeparator(new Choice < String > ("Comma"));

//To set the number of decimal places allowed for the base currency. It can be 0, 2, or 3.
format.setDecimalPlaces(new Choice < String > ("2"));

//To set the format of the base currency
currency.setFormat(format);

//Set the Currency in BodyWrapper instance
bodyWrapper.setBaseCurrency(currency);

//Call enableMultipleCurrencies method that takes BodyWrapper instance as parameter 
APIResponse < BaseCurrencyActionHandler > response = currenciesOperations.enableMultipleCurrencies(bodyWrapper);
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.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.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.JSONObject;
public class MultipleCurrenciesinOrganization 
{
	@SuppressWarnings("deprecation")
	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/currencies/actions/enable");
			HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
			HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
			JSONObject requestBody = new JSONObject();
			JSONObject recordObject = new JSONObject();
			JSONObject formatObject = new JSONObject();
			formatObject.put("decimal_separator", "Period");
			formatObject.put("thousand_separator", "Comma");
			formatObject.put("decimal_places", "2");
			recordObject.put("format", formatObject);
			recordObject.put("prefix_symbol", true);
			recordObject.put("name", "Algerian Dinar-ADN");
			recordObject.put("iso_code", "DZD");
			recordObject.put("symbol", "DA");
			recordObject.put("exchange_rate", "1.00");
			requestBody.put("base_currency", recordObject);
			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();
		}
	}
}
3.0.07.x
Copied//Get instance of CurrenciesOperations Class
$currenciesOperations = new CurrenciesOperations();
//Get instance of BaseCurrencyWrapper Class that will contain the request body
$bodyWrapper = new BaseCurrencyWrapper();
$currencyClass = "com\zoho\crm\api\currencies\Currency";
//Get instance of Currency Class
$currency = new $currencyClass();
//To set the position of the ISO code in the base currency.
//true: Display ISO code before the currency value.
//false: Display ISO code after the currency value.
$currency->setPrefixSymbol(true);
//To set the name of the base currency.
$currency->setName("Angolan Kwanza - AOA");
//To set the ISO code of the base currency.
$currency->setIsoCode("AOA");
//To set the symbol of the base currency.
$currency->setSymbol("Kz");
//To set the rate at which the currency has to be exchanged for home base currency.
$currency->setExchangeRate("1.0000000");
//To set the status of the base currency.
//true: The currency is active.
//false: The currency is inactive.
$currency->setIsActive(true);
$format = new Format();
//It can be a Period or Comma, depending on the base currency.
$format->setDecimalSeparator(new Choice("Period"));
//It can be a Period, Comma, or Space, depending on the base currency.  
$format->setThousandSeparator(new Choice("Comma"));
//To set the number of decimal places allowed for the base currency. It can be 0, 2, or 3.
$format->setDecimalPlaces(new Choice("2"));
//To set the format of the base currency
$currency->setFormat($format);
//Set the Currency in BodyWrapper instance
$bodyWrapper->setBaseCurrency($currency);
//Call enableMultipleCurrencies method that takes BodyWrapper instance as parameter 
$response = $currenciesOperations->enableMultipleCurrencies($bodyWrapper);
Copied<?php
class MultipleCurrenciesinOrganization{
    
    public function execute(){
        $curl_pointer = curl_init();
        
        $curl_options = array();
        $url = "https://www.zohoapis.com/crm/v2/org/currencies/actions/enable";
        
        $curl_options[CURLOPT_URL] =$url;
        $curl_options[CURLOPT_RETURNTRANSFER] = true;
        $curl_options[CURLOPT_HEADER] = 1;
        $curl_options[CURLOPT_CUSTOMREQUEST] = "POST";
        $requestBody = array();
        $recordObject = array();
        $formatObject = array();
        $formatObject["decimal_separator"]="Period";
        $formatObject["thousand_separator"]="Comma";
        $formatObject["decimal_places"]="2";
        $recordObject["format"]=$formatObject;
        $recordObject["prefix_symbol"]=true;
        $recordObject["name"]="Algerian Dinar-ADN";
        $recordObject["iso_code"]="DZD";
        $recordObject["symbol"]="DA";
        $recordObject["exchange_rate"]="1.00000";
        
        
        $requestBody["base_currency"] =$recordObject;
        $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 MultipleCurrenciesinOrganization())->execute();
3.0.08.x
Copied//Get instance of CurrenciesOperations Class
CurrenciesOperations currenciesOperations = new CurrenciesOperations();
//Get instance of BaseCurrencyWrapper Class that will contain the request body
BaseCurrencyWrapper bodyWrapper = new BaseCurrencyWrapper();
//Get instance of Currency Class
Com.Zoho.Crm.API.Currencies.Currency currency = new Com.Zoho.Crm.API.Currencies.Currency();
//To set the position of the ISO code in the base currency.
//true: Display ISO code before the currency value.
//false: Display ISO code after the currency value.
//currency.PrefixSymbol = true;
//To set the name of the base currency.
currency.Name = "Algerian Dinar-ADN";
//To set the ISO code of the base currency.
currency.IsoCode = "DZD";
//To set the symbol of the base currency.
currency.Symbol = "DA";
//To set the rate at which the currency has to be exchanged for home base currency.
currency.ExchangeRate = "1.0000000";
//To set the status of the base currency.
//true: The currency is active.
//false: The currency is inactive.
currency.IsActive = true;
Format format = new Format();
//It can be a Period or Comma, depending on the base currency.
format.DecimalSeparator = new Choice<string>("Period");
//It can be a Period, Comma, or Space, depending on the base currency.  
format.ThousandSeparator = new Choice<string>("Comma");
//To set the number of decimal places allowed for the base currency. It can be 0, 2, or 3.
format.DecimalPlaces = new Choice<string>("2");
//To set the format of the base currency
//currency.Format = format;
//Set the Currency in BodyWrapper instance
bodyWrapper.BaseCurrency = currency;
//Call EnableMultipleCurrencies method that takes BodyWrapper instance as parameter 
APIResponse<BaseCurrencyActionHandler> response = currenciesOperations.EnableMultipleCurrencies(bodyWrapper);
Copiedusing System;
using System.IO;
using System.Net;
using System.Text;
using Newtonsoft.Json.Linq;
namespace Com.Zoho.Crm.API.Sample.RestAPI.Currencies
{
    public class EnableMultiCurrency
    {
        public static void MultipleCurrenciesinOrganization()
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.zohoapis.com/crm/v2/org/currencies/actions/enable");
            request.Method = "POST";
            request.Headers["Authorization"] = "Zoho-oauthtoken 1000.abfeXXXXXXXXXXX2asw.XXXXXXXXXXXXXXXXXXsdc2";
            JObject requestBody = new JObject();
            JObject recordObject = new JObject();
            JObject formatObject = new JObject();
            formatObject.Add("decimal_separator", "Period");
            formatObject.Add("thousand_separator", "Comma");
            formatObject.Add("decimal_places", "2");
            recordObject.Add("format", formatObject);
            recordObject.Add("prefix_symbol", true);
            recordObject.Add("name", "Algerian Dinar-ADN");
            recordObject.Add("iso_code", "DZD");
            recordObject.Add("symbol", "DA");
            recordObject.Add("exchange_rate", "1.0000000");
            requestBody.Add("base_currency", recordObject);
            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 CurrenciesOperations Class
currencies_operations = CurrenciesOperations()
# Get instance of BaseCurrencyWrapper Class that will contain the request body
request = BaseCurrencyWrapper()
# Get instance of Currency Class
currency = Currency()
# To set the position of the ISO code in the currency.
# True: Display ISO code before the currency value.
# False: Display ISO code after the currency value.
currency.set_prefix_symbol(True)
# To set the name of the currency.
currency.set_name("Algerian Dinar-ADN")
# To set the ISO code of the currency.
currency.set_iso_code("DZD")
# To set the symbol of the currency.
currency.set_symbol("DA")
# To set the rate at which the currency has to be exchanged for home currency.
currency.set_exchange_rate("1.000000000")
# To set the status of the currency.
# True: The currency is active.
# False: The currency is inactive.
currency.set_is_active(True)
format = Format()
# It can be a Period or Comma, depending on the currency.
format.set_decimal_separator(Choice('Period'))
# It can be a Period, Comma, or Space, depending on the currency.
format.set_thousand_separator(Choice('Comma'))
# To set the number of decimal places allowed for the currency. It can be 0, 2, or 3.
format.set_decimal_places(Choice('2'))
# To set the format of the currency
currency.set_format(format)
# Set the Currency in BodyWrapper instance
request.set_base_currency(currency)
# Call enable_multiple_currencies method that takes BaseCurrencyWrapper instance as parameter
response = currencies_operations.enable_multiple_currencies(request)
Copieddef enable_multi_currency():
    import requests
    import json

    url = 'https://www.zohoapis.com/crm/v2/org/currencies/actions/enable'

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

    request_body = dict()
    record_object = dict()
    format_object = dict()

    format_object['decimal_separator'] = 'Period'
    format_object['thousand_separator'] = 'Comma'
    format_object['decimal_places'] = '2'

    record_object['format'] = format_object
    record_object['prefix_symbol'] = True
    record_object['name'] = 'Indian Rupee-INR'
    record_object['iso_code'] = 'INR'
    record_object['symbol'] = 'Rs'
    record_object['exchange_rate'] = '1.0000000'
    record_object['is_active'] = True

    request_body['base_currency'] = record_object

    response = requests.post(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())
enable_multi_currency()
1.0.010.x
Copied//Get instance of CurrenciesOperations Class
let currenciesOperations = new CurrenciesOperations();
//Get instance of BaseCurrencyWrapper Class that will contain the request body
let request = new BaseCurrencyWrapper();
//Get instance of Currency Class
let currency = new Currency();
//To set the position of the ISO code in the base currency.
//true: Display ISO code before the currency value.
//false: Display ISO code after the currency value.
currency.setPrefixSymbol(true);
//To set the name of the base currency.
currency.setName("Algerian Dinar-ADN");
//To set the ISO code of the base currency.
currency.setIsoCode("DZD");
//To set the symbol of the base currency.
currency.setSymbol("DA");
//To set the rate at which the currency has to be exchanged for home base currency.
currency.setExchangeRate("1.0000000");
//To set the status of the base currency.
//true: The currency is active.
//false: The currency is inactive.
currency.setIsActive(true);
let format = new Format();
//It can be a Period or Comma, depending on the base currency.
format.setDecimalSeparator(new Choice("Period"));
//It can be a Period, Comma, or Space, depending on the base currency.  
format.setThousandSeparator(new Choice("Comma"));
//To set the number of decimal places allowed for the base currency. It can be 0, 2, or 3.
format.setDecimalPlaces(new Choice("2"));
//To set the format of the base currency
currency.setFormat(format);
//Set the Currency in BodyWrapper instance
request.setBaseCurrency(currency);
//Call enableMultipleCurrencies method that takes BodyWrapper instance as parameter
let response = await currenciesOperations.enableMultipleCurrencies(request);
Copiedasync function enableMultiCurrency() {
    const got = require("got");

    let url = 'https://www.zohoapis.com/crm/v2/org/currencies/actions/enable'

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

    let requestBody = {}
    let recordObject = {}
    let formatObject = {}

    formatObject['decimal_separator'] = 'Period'
    formatObject['thousand_separator'] = 'Comma'
    formatObject['decimal_places'] = '2'

    recordObject['format'] = formatObject
    recordObject['prefix_symbol'] = true
    recordObject['name'] = 'Indian Rupee-INR'
    recordObject['iso_code'] = 'INR'
    recordObject['symbol'] = 'Rs'
    recordObject['exchange_rate'] = '1.0000000'
    recordObject['is_active'] = true

    requestBody['base_currency'] = recordObject

    let requestDetails = {
        method : "POST",
        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);
    } 
}
enableMultiCurrency()
2.02.x.x
Copied# Get instance of CurrenciesOperations Class
co = Currencies::CurrenciesOperations.new
bcw = Currencies::BaseCurrencyWrapper.new
# Get instance of Currency Class
currency = Currencies::Currency.new
currency.prefix_symbol = true
# To set the name of the currency.
currency.name = 'Angolan Kwanza - AOA'
# To set the position of the ISO code in the currency.
# True: Display ISO code before the currency value.
# False: Display ISO code after the currency value.
currency.iso_code = 'DZD'
# To set the ISO code of the currency.
# currency.set_iso_code("AOA")

# To set the symbol of the currency.
currency.symbol = 'Kz'
# To set the rate at which the currency has to be exchanged for home currency
currency.exchange_rate = '20.000000000'
# To set the status of the currency.
# True: The currency is active.
# False: The currency is inactive.
currency.is_active = true
format = Currencies::Format.new
# It can be a Period or Comma, depending on the currency.
format.decimal_separator = Util::Choice.new('Period')
# It can be a Period, Comma, or Space, depending on the currency.
format.thousand_separator = Util::Choice.new('Comma')
# To set the number of decimal places allowed for the currency. It can be 0, 2, or 3
format.decimal_places = Util::Choice.new('2')
# To set the format of the currency
# currency.set_format(format)
currency.format = format
# Set the Currency in BodyWrapper instance
bcw.base_currency = currency
# Call enable_multiple_currencies method that takes BaseCurrencyWrapper instance as parameter
response = co.enable_multiple_currencies(bcw)
Copiedclass MultipleCurrenciesinOrganization
    def execute
       
        url ="https://www.zohoapis.com/crm/v2/org/currencies/actions/enable"
        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) }
       
        request_body = {};
        record_object = {};
        format_object ={};
        format_object["decimal_separator"]="Period";
        format_object["thousand_separator"]="Comma";
        format_object["decimal_places"]="2";
        record_object["format"]=format_object;
        record_object["prefix_symbol"]=true;
        record_object["name"]="Algerian Dinar-ADN";
        record_object["iso_code"]="DZD";
        record_object["symbol"]="DA";
        record_object["exchange_rate"]="1.0000000";
       
        request_body["base_currency"] =record_object; 
        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

MultipleCurrenciesinOrganization.new.execute
1.0.0ES6
Copied//Get instance of CurrenciesOperations Class
let currenciesOperations = new ZCRM.Currency.Operations();
//Get instance of BaseCurrencyWrapper Class that will contain the request body
let request = new ZCRM.Currency.Model.BaseCurrencyWrapper();
//Get instance of Currency Class
let currency = new ZCRM.Currency.Model.Currency();
//To set the position of the ISO code in the base currency.
//true: Display ISO code before the currency value.
//false: Display ISO code after the currency value.
currency.setPrefixSymbol(true);
//To set the name of the base currency.
currency.setName("Algerian Dinar-ADN");
//To set the ISO code of the base currency.
currency.setIsoCode("DZD");
//To set the symbol of the base currency.
currency.setSymbol("DA");
//To set the rate at which the currency has to be exchanged for home base currency.
currency.setExchangeRate("1.0000000");
//To set the status of the base currency.
//true: The currency is active.
//false: The currency is inactive.
currency.setIsActive(true);
let format = new ZCRM.Currency.Model.Format();
//It can be a Period or Comma, depending on the base currency.
format.setDecimalSeparator(new Choice("Period"));
//It can be a Period, Comma, or Space, depending on the base currency.
format.setThousandSeparator(new Choice("Comma"));
//To set the number of decimal places allowed for the base currency. It can be 0, 2, or 3.
format.setDecimalPlaces(new Choice("2"));
//To set the format of the base currency
currency.setFormat(format);
//Set the Currency in BodyWrapper instance
request.setBaseCurrency(currency);
//Call enableMultipleCurrencies method that takes BodyWrapper instance as parameter
let response = await currenciesOperations.enableMultipleCurrencies(request);
Copiedvar listener = 0;
class MultipleCurrenciesinOrganization {

	async multipleCurrenciesinOrganization() {
		var url = "https://www.zohoapis.com/crm/v2/org/currencies/actions/enable"
        var parameters = new Map()
        var headers = new Map()
        var token = {
            clientId:"1000.NPY9M1V0XXXXXXXXXXXXXXXXXXXF7H",
            redirectUrl:"http://127.0.0.1:5500/redirect.html",
            scope:"ZohoCRM.settings.currencies.UPDATE,ZohoCRM.settings.currencies.Read,ZohoCRM.settings.currencies.CREATE,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 MultipleCurrenciesinOrganization().getToken(token)
        headers.set("Authorization", "Zoho-oauthtoken " + accesstoken)
        var requestMethod = "POST"
        var reqBody = {
            "base_currency": {
              "format": {
                "decimal_separator": "Period",
                "thousand_separator": "Comma",
                "decimal_places": "2"
              },
              "prefix_symbol": true,
              "name": "Algerian Dinar - DZD",
              "iso_code": "DZD",
              "symbol": "DA",
              "exchange_rate": "1.0000000"
            }
          }
        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 MultipleCurrenciesinOrganization().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);
                }
            }
        })
    }
}
CopiedformatMap = Map();
formatMap.put("decimal_separator", "Period");
formatMap.put("thousand_separator", "Comma");
formatMap.put("decimal_places", "2");

currencyMap = Map();
currencyMap.put("format", formatMap);
currencyMap.put("prefix_symbol", true);
currencyMap.put("name", "Algerian Dinar-ADN");
currencyMap.put("iso_code", "DZD");
currencyMap.put("symbol", "DA");
currencyMap.put("exchange_rate", "1.0000000");

params = Map();
params.put("base_currency", currencyMap);


response = invokeurl
[
	url :"https://www.zohoapis.com/crm/v2/org/currencies/actions/enable"
	type :POST
	parameters: params.toString()
	connection:"crm_oauth_connection"
];
info response;

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

Request JSON Keys

  • namestring, mandatory

    Represents the name of the currency.

  • iso_codestring, mandatory

    Represents the ISO code of the currency.

  • symbolstring, optional

    Represents the symbol of the currency.

  • exchange_ratestring, mandatory

    Represents the rate at which the currency has to be exchanged for home currency.

  • is_activeboolean, optional

    Represents the status of the currency.
    Possible Values:
    true: The currency is active.
    false: The currency is inactive.

  • formatJSON object, optional

    Represents the format of the base currency with details like decimal_separator, thousand_separator, and decimal_places.

     

    Keys to be specified in format JSON Object

    • decimal_separatorstring, optional

      The decimal separator separates the integer part of the currency from its fractional part. It can be a Period or Comma, depending on the currency.

    • thousand_separatorstring, optional

      The thousand separator separates groups of thousands in a currency. It can be a Period, Comma, or Space, depending on the currency.

    • decimal_placesinteger, optional

      Represents the number of decimal places allowed for the currency. It can be 0, 2, or 3.

Sample Input

Copied{
  "base_currency": {
    "format": {
      "decimal_separator": "Period",
      "thousand_separator": "Comma",
      "decimal_places": "2"
    },
    "prefix_symbol": true,
    "name": "Algerian Dinar - DZD",
    "iso_code": "DZD",
    "symbol": "DA",
    "exchange_rate": "1.0000000"
  }
}

Possible Errors

  • ALREADY_ENABLEDHTTP 400

    The multi-currency is already enabled
    Resolution: The multi-currency feature has already been enabled for your organization. You cannot enable it again.

  • 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

    Currency name is invalid
    Resolution: You have specified an invalid currency name. Go to setup> Company Details> Under Currencies tab> Click Add> The Currency picklist will have valid currency names and ISO codes.

  • INVALID_DATAHTTP 400

    ISO code is invalid
    Resolution: You have specified an invalid ISO Code. Go to setup> Company Details> Under Currencies tab> Click Add> The Currency picklist will have valid currency names and ISO codes.

  • INVALID_DATAHTTP 400

    Currency symbol is invalid
    Resolution: You have specified an invalid currency symbol.

  • FEATURE_NOT_SUPPORTEDHTTP 403

    The multi-currency feature is not available except the Enterprise and higher editions
    Resolution: The multi-currency feature is only available in Enterprise and Ultimate editions.

  • MANDATORY_NOT_FOUNDHTTP 400

    Required field not found
    Resolution: Refer to Request JSON section above and specify all the mandatory keys in the input

  • 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.

  • OAUTH_SCOPE_MISMATCHHTTP 401

    Unauthorized
    Resolution: Client does not have ZohoCRM.settings.currencies.CREATE scope. Create a new client with valid scope. Refer to scope section above.

  • NO_PERMISSIONHTTP 403

    Permission denied to read
    Resolution: The user does not have permission to enable multi-currency. Contact your system administrator.

  • INTERNAL_ERRORHTTP 500

    Internal Server Error
    Resolution: Unexpected and unhandled exception in Server. Contact support team.

  • AUTHORIZATION_FAILEDHTTP 400

    User does not have sufficient privilege to enable multi-currency.
    Resolution: The user does not have the permission to enable multi-currency. Contact your system administrator.

Sample Response

Copied{
  "base_currency": {
    "code": "SUCCESS",
    "details" {
      "id": "111113000000038990"
    },
    "message": "The multi-currency feature is enabled and given currency is created as the base currency.",
    "status": "success"
  }
}