Kaizen 173: A Comparison of Zoho CRM REST APIs and GraphQL APIs.

Kaizen 173: A Comparison of Zoho CRM REST APIs and GraphQL APIs.


Hello everyone!
Welcome back to another week of Kaizen!

Zoho CRM offers two API architectures for its users: REST API and GraphQL API. Each of these API architectures has its own strengths and ideal use cases. In this post, we will discuss the difference between REST API and GraphQL API.

REST APIs, or RESTful APIs, allow clients to interact with server resources using standard HTTP methods such as GET, POST, PUT, PATCH, and DELETE. GraphQL is a query language that provides a more flexible and efficient way to access data and metadata within your Zoho CRM. Unlike REST APIs that return fixed datasets, GraphQL allows you to request specific resources, fields of the resources and relationships of the resources, reducing redundant data and streamlining your development process.

Endpoints

REST APIs access information through dedicated endpoints. 

REST APIs: Multiple endpoints for different resources

In contrast, GraphQL APIs operate through a single endpoint. In Zoho CRM, it is {api-domain}/crm/graphql

GraphQL APIs: Single endpoint for different resources

Over-fetching and under-fetching of data

REST APIs use Unique Resource Identifiers (URIs) for identifying resources. This approach allows clients to access specific data, but it can also lead to inefficiencies such as over-fetching or under-fetching of information. Over-fetching occurs when the client receives much more data than it requires. Under-fetching occurs when the client requires to send multiple requests to fetch all the data it requires.
In GraphQL APIs, the client controls the structure of the response by specifying the exact information they need.  This enables the clients to have precise data control and avoids over-fetching and under-fetching of data. It fetches required data from different resources and provides it as a single resource.

Schema Introspection

GraphQL APIs have a schema that outlines the different types of data that can be queried in the server. This is like a blueprint for the API and serves as a contract between the server and client for data exchange. Refer to this post on Interpreting Zoho CRM GraphQL schema for more details.

Editions supported

REST APIs are available across all versions of Zoho CRM, including trial versions. GraphQL APIs are supported for Enterprise, Zoho One Enterprise, CRM Plus and Ultimate edition orgs. Please note that GraphQL APIs are not available for trial edition of these editions.

Status Codes

Zoho CRM GraphQL APIs mostly return 200 status code except for a few errors that return 400 status code. Refer to this page on GraphQL error and status code for details.
Zoho CRM REST APIs return different status codes. Refer to this page on REST API status code for more details.

Credits Consumption

   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.
Both Zoho CRM REST APIs and Zoho CRM GraphQL API calls are associated with credits. Number of credits consumed depends on the intensity of the API call. 
Additionally, Zoho CRM REST APIs have Concurrency and Sub-concurrency limits. Concurrency limits the number of API calls that can be active at one time instance. It varies across different editions of Zoho CRM. For a few APIs that are more resource-intensive, there is an additional limit called sub-concurrency, The APIs that will fall 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
Sub-concurrency limit across different editions is 10. 
 In GraphQL APIs, we have different concepts called Complexity, and Depth. Query Complexity refers to the workload imposed on servers by a specific query. This complexity increases with the number of fields requested and the depth of the query structure. Query Depth refers to the nesting level of a field that is being queried. In Zoho CRM GraphQL APIs it is limited to seven.

Suitable scenarios for GraphQL APIs and REST APIs

Let’s explore a scenario - the case of Zylker Manufacturing, an industrial equipment manufacturer. Their sales team uses Zoho CRM to enhance their sales operations and manage customer relationships effectively. Meanwhile, their sales support team relies on a legacy system to oversee their activities. 
The support team needs to retrieve comprehensive information about one account and its associated contacts to track all support tickets related to that account. They also need associated deals of the account for contextual information.
With GraphQL APIs they can use a single API call to fetch all required information to create a unified view. The below query fetches specific data related to Accounts and their Contacts and Deals, as well as metadata about the fields in the Accounts , Contacts and Deals modules.

{
    Records {
        Accounts(where: { Account_Name: { like: "%King%" } }) {
            _data {
                Account_Name {
                    value
                }
                Contacts__r {
                    _data {
                        Email {
                            value
                        }
                        Full_Name {
                            value
                        }
                    }
                }
                Deals__r {
                    _data {
                        Expected_Revenue {
                            value
                        }
                        Deal_Name {
                            value
                        }
                        Stage {
                            value
                        }
                    }
                }
            }
        }
    }
    account_meta: Meta {
        Modules(filter: { api_name: "Accounts" }) {
            _data {
                plural_label
                id
                api_name
                module_name
                description
                singular_label
                fields(filter: { api_names: "Account_Name" }) {
                    _data {
                        id
                        api_name
                        display_label
                        json_type
                        data_type
                    }
                }
            }
        }
    }
    contact_meta: Meta {
        Modules(filter: { api_name: "Contacts" }) {
            _data {
                plural_label
                id
                api_name
                module_name
                description
                singular_label
                fields(filter: { api_names: ["Email", "Full_Name"] }) {
                    _data {
                        id
                        api_name
                        display_label
                        json_type
                        data_type
                    }
                }
            }
        }
    }
    deals_meta: Meta {
        Modules(filter: { api_name: "Deals" }) {
            _data {
                plural_label
                id
                api_name
                module_name
                description
                singular_label
                fields(filter: { api_names: ["Expected_Revenue", "Deal_Name", "Stage"] }) {
                    _data {
                        id
                        api_name
                        display_label
                        json_type
                        data_type
                    }
                }
            }
        }
    }
}


Using REST APIs in this scenario will require multiple API calls to the following APIs
  • Query API
  • Related Records API
  • Modules meta API, and 
  • Fields meta API.
We had explored another scenario involving Zylker Manufacturing in detail in an earlier Kaizen post where their sales support team needed the below details from Zoho CRM
  • details of the contact, such as email, phone, and Account details
  • details of the ongoing deals of the contact, including potential revenue and stages. 

GraphQL APIs are beneficial in these cases as they can fetch the required data in a single data query.  

Conversely, in simpler use cases, REST APIs may be more suitable. Let’s examine a second scenario involving an inventory management system. Zenith Products needs to manage its product catalog. The inventory management system requires the ability to:
  • Fetch Details of a Single Product
  • Fetch Details of Multiple Products
  • Update Product Information
 Each product can be accessed via a unique URL (endpoint), allowing for straightforward requests. For example:
  • To fetch a single product: GET /crm/{version}/products/{product_id}
  • To fetch multiple products: GET /crm/{version}/products
  • To update a product: PUT /crm/{version}/products/{product_id}
In such cases, REST APIs are preferred due to their simplicity.

Note
Currently, Zoho CRM GraphQL APIs only support queries. Queries allow you to fetch data from the server.

You can choose to use Zoho CRM REST APIs or GraphQL APIs depending on the specific need of your application. REST APIs are suitable for straightforward data retrieval needs whereas GraphQL is useful in situations involving complex queries and need precise data control.
We hope you found this post useful. Stay tuned for more insights in our upcoming Kaizen posts!

Info
More enhancements in the COQL API are now live in Zoho CRM API Version 7. Check out the V7 Changelog for detailed information on these updates.

Cheers!
Mable

    • Recent Topics

    • Restrict Past Date in Zoho CRM Module

      How can I restrict from selecting a previous Date? I want only future dates to be selectable
    • Post on behalf of employees as well as business socials

      Is there a way to give our sales team access to social to add their own LinkedIn accounts, so that when we schedule business posts, we can also post on behalf of them at the same time so they don't have to repost etc.
    • Alignment of Company Information Page Structure in Zoho One and Zoho Desk

      Hello Zoho One Support, We appreciate the continuous improvements across Zoho products. Recently, Zoho Desk restructured the Company Information page into three distinct sections: Company Profile – Includes Company Name, Logo, Alias, Description, Website,
    • Trying to setup a record to automatically create on a weekly basis

      Hello all, I need multiple records to be automatically created on a weekly basis. What I'm trying to accomplish is, I have a maintenance database where I track when I work on IT related systems. Every week on the same days I perform backups on systems
    • Effortlessly advance through your CRM blueprints by including optional fields in transitions

      Editions: Professional edition and above DCs: All Release plan: This enhancement is being released in a phased manner to customers. It will soon be available to all users. [Updated on 5 Sep 2024] This enhancement has been released to all users in all
    • ZOHO Reports - Filter Logic?

      Hi, I need a way to apply filter logics such as ((1 AND 2) OR 3). All I can see as of now is a way to enter different AND filters in the respective filter column. But how can I add an OR filter? Any advice would be highly appreciated. Mark
    • [Client Script] How to get selected related record Id

      Hi Zoho, I set an client script button in related record list. We would like to fetch the selected record id/field for further action. But I don't know how to get the selected id. If there is not possible to get related record info, then what does the
    • Google ads - zoho crm integration problem

      dear zoho team we were starting to use google ads integration with zoho crm years ago.  but till April there was an error. we can see GCLID in zoho crm but we couldn't get any information from google ads. (keywords campaign name etc) is there any problem
    • How to merge duplicate products?

      merge duplicate products
    • Rounding off rate in quote

      Hi team, Please help me to rounding of rate amount in quote
    • How can I delete duplicate transactions?

      I want to delete the duplicates not simply exclude them. I have duplicates, because I had automatic bank feeds turned on (had to make sure this critical functionality was working before migrating to Zoho). Now when I import my csv's exported from Wave,
    • Automate posting to job site boards via Deluge/ or Schedule

      Hi Zoho Recruit Community, I'm working on automating a recurring job posting for a long-standing labor hire role that we update monthly. Right now, I can automate the creation of the job opening using scheduled tasks and Deluge scripts. However, the challenge
    • Customer Statement Template

      Hi. how can i add order number "customer LPO number" in the customer statement. regards
    • Is it possible to select the methods of inserting a signature (Not provider)

      Hi, I tried to search through the help pages and application interface trying to find if there's a way to limit the assigned signees, for example, allowing only images or drawing, and disallowing the automatic signature creator as per their name. It'll
    • How To Sync 'Deals' data To The Related Contact In The 'Contacts' Module

      Hi there! I'm looking to be able to sync Deals and Contacts. Basically, when someone places an order we have it syncing the order data to Deals, complete with the customer's name and email. Is there any way to have that Deal synced to the matching contact in the Contacts module? Presumably matching by email address. I'm familiar with Workflows, however it doesn't seem that Workflows work across different modules. We're looking to be able to run reports based on what the customer bought, but can't
    • Zoho CRM Appointments and Services

      The Appointments and Services modules are nice but very limited. Is there any chance that Zoho will make these more customizable or expand the fuctionality? Appointments Allow "Appointment For" lookup to the Deals module. For us and I'm guessing others
    • How to separate Vendor custom fields from Customer custome fields

      Hi, Customer and Vendor form are separated in Books. We are synchronising them with (respectively) CRM Accounts and CRM Vendors. We add Customer Fields in Customer & Vendors Fields in Books as the CRM has some we need to synchronize. But Books shows Vendors
    • Auto scan receipt multiplies values by 1000 where decimal separator is comma

      This is a new problem as it worked properly in the past but not since Jan 2025. Where receipts use comma as the decimal separator values are multiplied by 1000 when auto scanning which means the user must go back and edit the expense.
    • Client Script | Update - Introducing Subform Events and Actions

      Are you making the most of your subforms in Zoho CRM? Do you wish you could automate subform interactions and enhance user experience effortlessly? What if you had Client APIs and events specifically designed for subforms? We are thrilled to introduce
    • Free webinar! The Zoho Sign Masterclass: The basics, latest features, and mobile apps

      Hi, Are you new to Zoho Sign or looking to brush up on its capabilities? This webinar will help you master Zoho Sign from the ground up, covering everything from the basics to the latest features. Whether you're an individual managing personal documents,
    • How to upload image from Creator field to CRM File Upload Field or Module Notes section

      Hello,  How can I upload an image from Creator Image Upload Field to CRM Module Image field (or Notes section).  The file upload field type would also work. I just cannot seem to find a way to upload the images from one application to another. Case: Field record requires images as part of the report. I would like the image from the field record form in Creator to be uploaded in the CRM as well as.  All of the other fields from the Creator Field Record Report work perfectly. Thank you very much for
    • Write-Off multiple invoices and tax calculation

      Good evening, I have many invoices which are long overdue and I do not expect them to be paid. I believe I should write them off. I did some tests and I have some questions:  - I cannot find a way to write off several invoices together. How can I do that,
    • Unable to pay bill from Prepaid Expense account

      Our transport vendor requires us to use their prepaid system.  We have paid R1150 upfront into the Prepaid Expenses account: As we use their services, we get billed.  These bills must obviously be settled by from our prepaid account.  I am unable to record
    • Whatsapp Integration not working

      Hello. My whatsapp integration does not seem to be working. I have created templates, but whatsapp messages do not go through. They keep telling me to use a templete, even though I do so.
    • Set Mandatory Lookup Fields in Ticket Layout

      I added a custom module called 'Site' in the desk. I also added a lookup field 'Site' in the ticket layout. Now, I want the 'Site' field to be mandatory in the blueprint transition. How can I do that?
    • Unable to import data into zoho analytics using the post man APIs of udemy for business

      Hi Can some one help me with the following Unable to import data into zoho analytics using the post man APIs of udemy for business through API beta feature, I have created the sample report in zoho analytics through the table structure but i am unable
    • errorCode":8504. What is wrong with my CONFIG?

      I can't determine what is wrong with my config. It worked properly until I added an additional field, but the additional field is just a number and shouldn't effect the config. I am attempting to do a bulk update add to an existing table based on this
    • Analytics report issue

      Hey, does anyone know why suddenly our Analytics report goes blank whenever we add a field from the contacts module? It shows when adding fields from all other modules. Thanks.
    • Send emails directly via Cases module

      Greetings all, The ability to send emails from the Cases module, which users have been eagerly anticipating, is now available, just like in the other modules. In Zoho CRM, Cases is a module specifically designed for managing support tickets. If your organization
    • Zoho CRM Calendar View

      Hello Zoho team, We need desperately a calendar view next to list, kandan and other views. I think it should be easy to implement as you already have the logic from Projects and also from Kanban View in CRM. In calendar view when we set it up - we choose
    • COST CENTER

      Hello, Is it possible to add cost centers.
    • High cpu load on client side by process sessionaudit.exe

      Hi, as stated above. This happens every time with different clients. Now, the first thing I have to do after making the connection is to go to taskmanager on client computer and kill the process 'sessionaudit.exe' If I don't their cpu is very high and
    • [Important announcement] Removal of Zoho Writer's DocuFiller Add-on

      Hi users, Effective 21st Feb. 2025, we will be removing the DocuFiller add-on for Zoho Writer's Fillable Templates. From that point on, the add-on's functionalities, such as sharing or publishing fillable forms for data collection and receiving submissions
    • Urgent - issue with VAT registration

      Im trying to enable VAT but it wont let me add my company VAT details. I'm getting this. Please disable Adjustments and Entity level discount before registering for VAT How do i do this as i cannot find answer. It would be nice if there was a help icon
    • No Updation of manual journals in case of Accrual basis of Accounting

      Hi Readers, Please help with a query of mine, Actually I am not able to see any of the transaction updated in the manual journals, if i view a the report(Balance Sheet) in Accrual format. Like the transactions which are to be there even in accrual basis
    • Re-emphasizing the importance of Domain Whitelisting in ASAP's JWT Authentication Mechanism

      The problem We discovered a security vulnerability related to using OAuth tokens in non-whitelisted domains and have reinforced our security measures. If you experience any request failures in the authorized domains, please verify that they are whitelisted
    • Excise Tax for Oman

      We are a long time user of Zoho for multiple businesses. We have now started a new business division which is trading of beverages. This product however has an import excise tax (50% of assessed excise value) and sales excise tax (50% of invoice value).
    • NEW TO ZOHO

      I am transferring from company accounts which are being recorded in written book keeping method. I have stocks which are purchased in cash some by credit from vendors. I have datas from pervious year like total sales and purchases etc In future i will
    • Multiple Selection/Select All for Approvals

      I have a suggestion from users regarding Approvals. In our environment, our Regional Managers can receive multiple requests for Approval or Rejection. They find it tedious to approve (or reject) each individual record. They would like to have a way to
    • Add tasklist from a template to Zoho Project using Deluge

      I have some tasklist templates that I want to be able to add to a project under certain circumstances. So if a project meets Condition A, add the tasklist from Template B to that project. If it meets condition C, add tasklist from Template D, and so on.
    • Next Page