Kaizen #93: Credit Calculation and Concurrency in Zoho CRM APIs

Kaizen #93: Credit Calculation and Concurrency in Zoho CRM APIs

Hello everyone!

Welcome to Kaizen! This week, we will discuss credit calculation and concurrency in Zoho CRM APIs.

Credit calculation

      API rate limiting is crucial to ensure fair resource distribution, maintain optimal service quality for all users, and safeguard our system from potential security threats. It helps us provide a consistent, reliable, and secure service to every user, while encouraging efficient and thoughtful API usage. API Usage in a CRM organization is calculated based on credits. When you make an API call, a specific number of credits are deducted from the total number of credits available to you. The number of credits available to you differs depending on the edition and user licence purchased. Below table shows the same.

Edition
Allowed Credits
Maximum Credits
Free Edition
5000 credits
5000 credits
Standard/Starter Edition
50,000 credits + (Number of User licenses x 250) + Add-on credits
100,000 credits
Professional
50,000 credits + (Number of User licenses x 500) + Add-on credits
1,000,000 credits
Enterprise/Zoho One
50,000 credits + (Number of User licenses x 1000) + Add-on credits
2,000,000 credits
  Ultimate/CRM Plus
50,000 credits + (Number of User licenses x 2000) + Add-on credits
Unlimited


 If you think you will need more API credits in addition to the daily allowed limit, you can purchase additional credits.

       The API Rate Limit is for a rolling window of 24 hours i.e., for every API call, we will check the API credits consumed in the last 24 hours  to see whether the current API call can be allowed or not. When you make the very first API call , a 24 hour window begins. The API credits you used at each time interval will be freed up after 24 hours corresponding to each time interval.



      Consider the above example where we assume that you are making API calls starting from 9 AM. The total available credits are 5000. For simplicity, let us consider that there are no API calls made on the previous day and no additional credits were purchased.

      Between 9:00 AM and 9:05 AM on day 1,  you use up 100 credits and you are left with 4900 credits . Since no API calls were made the previous day, you have no API credits getting freed up at that time. Between 9:05 AM and 9:10 AM, you use up 150 credits, leaving you with 4750  credits. Let us assume that you exhausted your available limit by 8.45 AM the next day. 
  
      At 9 AM on day 2, 100 API credits used on the previous day (day 1) will be freed up. Similarly, at 9:05 AM on day 2 ,  150 credits will be freed. In this case API calls between 8:45 AM and 9 AM will result in system errors.  

      Let us consider the same scenario if you had purchased add-on credits. After you exhaust your available limit by 8:45 AM on day 2, the credits for further API calls will be considered from the purchased add-on credits. At 9 AM, when the 100 API credits used on the previous day are freed up they are available for your use instead of add-on credits.

Concurrency 


In addition to 24 hour rolling window throttler, Zoho CRM has concurrency limit being applied for APIs. It will limit the no of parallel API calls being active at one time instance. Concurrency limit is checked per org per OAuth app. Concurrency limit differs based on your Zoho CRM edition.


Edition
Concurrency limit for an Org/App
Free
5
Standard/Starter
10
Professional
15
Enterprise/Zoho One
20
Ultimate/CRM Plus
25



Let's assume your organization has a concurrency limit set at 10. A sequence of API calls are made one after another. When all these API calls are still in process with each API call you make, the number of concurrent API calls increases incrementally. Initially, when you make the first API call, concurrency is 1. For the second API call made before the end of the first API call, concurrency becomes 2, and so on. This scenario is shown in the picture above. Once you reach the 10th API call, concurrency reaches its maximum limit of 10. As a result, the 11th API call fails.

However, let's assume that the 5th API call completes its process, thereby reducing the concurrency level to 9. In this state, the 12th API call can be made successfully without encountering any errors.

Sub-concurrency

Some APIs will take much more computing resources than other APIs. For example, an Insert Records API call for a 1000 records will take much more resources than a Get Leads API call for a particular lead id.

For such APIs, we'll apply a separate concurrency limit namely sub-concurrency limit to ensure that the APIs are being used responsibly. The APIs that will falls under the sub-concurrency limit are
  • Get Records with cvid or sort_by parameters
  • Convert Lead
  • Insert, Update, or Upsert records (when the record count is greater than 10)
  • Send Mail
  • Search records API invoked from function
  • Query API
  • Composite API
Across all editions of Zoho CRM, the sub-concurrency limit is set as 10. You can make 10 concurrent requests for a combination of the above listed APIs or 10 concurrent requests of one of the APIs. However, if the total number of sub-concurrent requests exceeds 10, the system will generate a "TOO_MANY_REQUESTS" error.



Let's understand how concurrency and sub-concurrency apply together to your API calls. Assume that in your organization, the concurrency limit is set at 12 and sub-concurrency limit is set at 10. 

We'll consider a case where send mail API call has been fired in parallel 11 times, for which the sub-concurrency is applicable. For the first 10 send mail API calls, there won't be any error and sub-concurrency limit will reach it's maximum allowed limit of 10. When the 11th API call is made, the error "TOO_MANY_REQUESTS"  will be thrown even though the concurrency limit of 12 has not reached .

Now, let's consider the 12th API call, doesn't fall under the category of API calls subject to the sub-concurrency limit, say it is a normal GET records call with just fields & ids parameter. This call goes through successfully without encountering any errors. Similarly, the 13th API call, a GET user API call, also goes through. At this point, the concurrency is 12, and the concurrency limit is set at 12 as well.  The 14th API call will result in an error because the concurrency limit exceeded.  In short, the number of API calls allowed at a time depends on the concurrency limit and sub-concurrency limit. 


We hope you found this post useful and it increased your understanding.  Stay tuned for more.

Cheers!
Mable

    • Sticky Posts

    • Kaizen #197: Frequently Asked Questions on GraphQL APIs

      🎊 Nearing 200th Kaizen Post – We want to hear from you! Do you have any questions, suggestions, or topics you would like us to cover in future posts? Your insights and suggestions help us shape future content and make this series better for everyone.
    • Kaizen #198: Using Client Script for Custom Validation in Blueprint

      Nearing 200th Kaizen Post – 1 More to the Big Two-Oh-Oh! Do you have any questions, suggestions, or topics you would like us to cover in future posts? Your insights and suggestions help us shape future content and make this series better for everyone.
    • Celebrating 200 posts of Kaizen! Share your ideas for the milestone post

      Hello Developers, We launched the Kaizen series in 2019 to share helpful content to support your Zoho CRM development journey. Staying true to its spirit—Kaizen Series: Continuous Improvement for Developer Experience—we've shared everything from FAQs
    • Kaizen #193: Creating different fields in Zoho CRM through API

      🎊 Nearing 200th Kaizen Post – We want to hear from you! Do you have any questions, suggestions, or topics you would like us to cover in future posts? Your insights and suggestions help us shape future content and make this series better for everyone.
    • Client Script | Update - Introducing Commands in Client Script!

      Have you ever wished you could trigger Client Script from contexts other than just the supported pages and events? Have you ever wanted to leverage the advantage of Client Script at your finger tip? Discover the power of Client Script - Commands! Commands
    • Recent Topics

    • Reverse payment on accidentally closed invoice.

      An invoice was closed accidentally with the full payment added. However, only partial payment was paid. How can I reopen the invoice and reverse this to update it to show partial payment?
    • New integration: Track booking page appointments in Google Analytics 4

      Hello all, Greetings from the Zoho Bookings team! We’re excited to introduce our new Google Analytics 4 (GA4) integration designed to help you track booking activity, understand customer behavior, and measure marketing performance, all in one place. What
    • How to list emails in a folder, e.g. Inbox, on multiple pages when using Zoho mail webpage?

      Something as shown in the figure. There are totally 50 emails in Sent folder. If "Mail per page" equals 20, then the Sent folder is split into 3 pages. When I wander through Sent folder, I can just select a specific page to jump to. BTW, it seems that
    • Zoho Calendar soft bounce on @hotmail.com and @yahoo.com email addresses

      Hello, our Zoho calendar recently does not send the calendar invites to emails with hotmail and yahoo domains and comes back with a "soft bounce". other domains like Gmail works fine. Also sending "email" to the same emails to the above domains work well
    • ERROR CODE :512 - 5.4.4 DNS error:NXDOMAIN.

      Suddenly we cant send mail, we are getting this error for all outbound mail to multiple domains.
    • Can Zoho Flows repeat Actions more than once?

      I'm attempting to make an intentional Zoho Flow loop using the below layout. However, when "WithinLimit" condition is met, the program fails to execute the action "Get & Add Request Co..." again. Is this by design? Is Zoho Flows unable to repeat actions
    • Unveiling Cadences: Redefining CRM interactions with automated sequential follow-ups

      Last modified on 01/04/2024: Cadences is now available for all Zoho CRM users in all data centres (DCs). Note that it was previously an early access feature, available only upon request, and was also known as Cadences Studio. As of April 1, 2024, it's
    • customer data security

      We are exploring ways to enhance our within Zoho CRM. Our Goal: We want to fully integrate RingCentral with Zoho CRM to enable click-to-call functionality for our sales team. However, to comply with data privacy regulations and protect customer contact
    • Zoho Cliq not working on airplanes

      Hi, My team and I have been having this constant issue of cliq not working when connected to an airplane's wifi. Is there a reason for this? We have tried on different Airlines and it doesn't work on any of them. We need assistance here since we are constantly
    • Sync CRM inventory data with Zoho Books

      I just switched everything over to ZoHo books, but I am trying to find out why the CRM Estimates, Invoices, and Sales Orders created in ZoHo CRM are not then duplicated in ZoHo Books? I had Quickbooks before, and had to do everything twice, I thought
    • mask Customer phone number and agents cant see customer phone number

      Is there any way we can integrate Zoom Phone with Zoho CRM while ensuring that customer phone numbers remain masked? We need a solution where agents can make outbound calls but cannot see customer phone numbers. Please let us know if there is any solution
    • Email Reminders on Shared Calendars

      How do we turn off the setting that emails reminders to everyone who has accepted or declined a calendar invite? If 8 of us have been invited to the same meeting, we receive 8 notifications for every step of the process, from invitation to decision.
    • WebDAV / FTP / SFTP protocols for syncing

      I believe the Zoho for Desktop app is built using a proprietary protocol. For the growing number of people using services such as odrive to sync multiple accounts from various providers (Google, Dropbox, Box, OneDrive, etc.) it would be really helpful if you implemented standard protocols such as WebDAV / FTP / SFTP so that alternative inc clients can be used.
    • What's New in Zoho Inventory | Q2 2025

      Hello Customers, The second quarter have been exciting months for Zoho Inventory! We’ve introduced impactful new features and enhancements to help you manage inventory operations with even greater precision and control. While we have many more exciting
    • How to refresh a ticket view ?

      I am doing a widget where I send a rest api call to make a new draft to the ticket I am viewing. The issue is sometimes it refresh a ticket view and I can see inserted draft right away, but sometimes I do not see it even if it is inserted correctly and
    • Ugh! - Text Box (Single Line) Not Enough - Text Box (Multi-line) Unavailable in PDF!

      I provide services, I do not sell items. In each estimate I send I provide a customized job description. A two or three sentence summary of the job to be performed. I need to be able to include this job description on each estimate I send as it's a critical
    • Merge Items

      Is there a work around for merging items? We currently have three names for one item, all have had a transaction associated so there is no deleting (just deactivating, which doesn't really help. It still appears so people are continuing to use it). I also can't assign inventory tracking to items used in past transactions, which I don't understand, this is an important feature moving forward.. It would be nice to merge into one item and be able to track inventory. Let me know if this is possible.
    • Supervisor Rules - Zoho Desk

      Hi, I have set up a Supervisor Rule in Zoho Desk to send an email alert when a ticket has been on hold for 48 hours. Is there a way to change it so that the alert only sends once and not on an hourly basis? Thank you Laura
    • ResponseCode 421, 4.7.0 [TSS04] Messages from 136.143.188.51 temporarily deferred due to user complaints

      Had email bounce. Let me know if you can fix this. Thanks. Michael
    • Zoho Canvas - Custom templates for related lists

      Hi, I see that the example pages load always one of our related lists in a custom template, but I dont know how to work with that:  1) How can i make my own custom templates for related lists?  2) Where and how can i check out existing custom templates?
    • Automation #15: Automatically Adding Static Secondary Contacts

      Rockel is a top-tier client of Zylker traders. Marcus handles communications with Rockel and would like to add Terence, the CTO of Zylker traders to the email conversations. In this case, the emails coming from user address rockel.com should have Terence
    • New Zoho triggers Google Dangerous flag due toabnormal charcters

      Just signed up and doing my first email test. I sent it to my google email account but it got flagged as Dangerous" due abnormal characters. My DNS setup looks ok. Page snips attached Help Please Thanks, Rick DC PowerWorld
    • Is there a API to fetch tasks in a Board/Section

      I am writing a scheduled function that retrieves all the tasks and send an reminder on cliq. I cannot seem to find a API to fetch tasks (by user / board / section) What are the way to fetch tasks?
    • Having trouble fetching contents of Zoho Connect Feeds using the API, requesting alternative API documentation.

      I'm trying to retrieve feed/post data from Zoho Connect using the API but facing challenges with the current documentation. What I've tried: OAuth authentication is working correctly (getting 200 OK responses) Tested multiple endpoints: /pulse/nativeapi/v2/feeds,
    • Adding an Account Name to Tasks/Reminders

      Does anyone know how to add the related account name to a task?  When we look at the list of activities and when the reminders pop up, there is no way of quickly seeing who the account is. 
    • Triggering Zoho Flow on Workdrive File Label

      Right now Im trying to have a zoho flow trigger on the labeling/classification of a file in a folder. Looking at the trigger options they arent great for something like this. File event occurred is probably the most applicable, but the events it has arent
    • SendMail to multiple recipients

      Hi, I'm trying to send an email to a list of recipients.  Right now the "to" field is directed to a string variable. (List variables won't work here). In the string variable, how can I make it work? trying "user@app.com;user2@app.com" or "user@app.com; user2@app.com" just failed to send the emails. Ravid
    • Populate drop down field from another form's subform

      Hello, I found how to do that, but not in case of a subform. I have a Product form that has a subform for unit and prices. A product might have more than one unit. For example, the product "Brocoli" can be sold in unit at 3$ or in box of 10 at 25 $. Both
    • Usar o Inventory ou módulo customizado no CRM para Gestão de Estoque ?

      Minha maior dor hoje em usar o zoho é a gestão do meu estoque. Sou uma empresa de varejo e essa gestão é fundamental pra mim. Obviamente preciso que esse estoque seja visível no CRM, Inicialmente fiz através de módulos personalizados no próprio Zoho CRM,
    • Signup forms behaviour : Same email & multiple submissions

      My use case is that I have a signup form (FormA) that I use in several places on my website, with a hidden field so I can see where the contact has been made from. I also have a couple of other signup forms (FormB and FormC) that slight differences. All
    • getting error in project users api

      Hello, I'm getting a "Given URL is wrong" error when trying to use the Zoho Projects V3 API endpoint for adding users to a project. The URL I'm using is https://projectsapi.zoho.com/api/v3/portal/{portalid}/projects/{projectid}/projectusers/ and it's
    • Change total display format in weekly time logs

      Hi! Would it be possible to display the total of the value entered in the weekly time log in the same format that the user input? This could be an option in the general settings -> display daily timesheet total in XX.XX format or XX:XX.
    • Different Company Name for billing & shipping address

      We are using Zoho Books & Inventory for our Logistics and started to realize soon, that Zoho is not offering a dedicated field for a shipping address company name .. when we are creating carrier shipping labels, the Billing Address company name gets always
    • How to display historical ticket information of the total time spent in each status

      Hi All, Hoping someone can help me, as I am new to Zoho Analytics, and I am a little stuck. I am looking to create a bar chart that looks back over tickets raised in the previous month and displays how much time was spent in each status (With Customer,
    • Zoho Projects iOS app update: Global Web Tabs support

      Hello everyone! In the latest version(v3.10.10) of the Zoho Projects app update, we have brought in support for Global Web Tabs. You can now access the web tabs across all the projects from the Home module of the app. Please update the app to the latest
    • Zoho Community Weekend Maintenance: 13–15 Sep 2025

      Hi everyone, We wanted to give you a heads-up that Zoho Community will undergo scheduled maintenance this weekend. During this period, some community features will be temporarily unavailable, while others will be in read-only mode. Maintenance Window:
    • Agent Performance Report

      From data to decisions: A deep dive into ticketing system reports An agent performance report in a ticketing system provides a comprehensive view of how support agents manage customer tickets. It measures efficiency and quality by tracking key performance
    • Show both Vendor and Customers in contact statement

      Dear Sir, some companies like us working with companies as Vendor and Customers too !!! it mean we send invoice and also receive bill from them , so we need our all amount in one place , but in contact statement , is separate it as Vendor and Customer, 
    • URL validation

      We use an internal intranet site which has a short DNS name which Zoho CRM will not accept.   When attempting to update the field it says "Please enter a valid URL". The URL I am trying to set is http://intranet/pm/ Our intranet is not currently setup with a full DNS name and given the amount of links using the shortname probably isn't a feasible change for us.
    • Pourquoi dans zohobooks version gratuite on ne peut ajouter notre stock d'ouverture??

      Pourquoi dans zohobooks version gratuite on ne peut ajouter notre stock d'ouverture ??
    • Next Page