Kaizen #16 - Python SDK

Kaizen #16 - Python SDK

Hello everyone!
Welcome back to another week of Kaizen!
This week, we will discuss the Python SDK.

What is the Python SDK for Zoho CRM?

Python SDK allows you to create client Python applications that you can integrate with Zoho CRM, effortlessly. It serves as a wrapper for the REST APIs, thus making it easier to use the services of Zoho CRM.

Here is a sample of how the SDK acts as a middle ware between Zoho CRM and a client Python Application.




What can you do with the Python SDK?
  • Exchange data between Zoho CRM and the client application where the CRM entities are modelled as classes.
  • Authenticate your application easily every time you sync data between Zoho CRM and your application, as the SDK takes care of generating the access/refresh tokens automatically.

Environment Setup
How to Start using the Python SDK?

Follow the below steps:
  • Step-1: Register your application (Self Client or Web-based client)
  • Step-2: Install the SDK
  • Step-3: Import the SDK in your project
  • Step-4: Initialize the SDK
    4.a. Choose the token persistence method
    4.b. Setup the configuration dictionary
    4.c. Generate the tokens
  • Step-5: Connect to Zoho CRM through the available methods
Let us now discuss these steps in detail.

Step-1: Register your application
All the Zoho CRM APIs are authenticated by the OAuth2.0 standards. It is mandatory to authenticate your application with Zoho.
You can register your application either as a Self Client (single user app) or a web-based app (multiple users app).

1.a. Self Client
  • Go to https://api-console.zoho.com.
  • Click ADD CLIENT.
  • Choose the Client Type as Self Client, and click CREATE.
  • You will receive a client ID and a client secret upon successful registration.

1.b. Web-based Client
  • Go to https://api-console.zoho.com.
  • Click ADD CLIENT.
  • Choose the client as Web based and click CREATE NOW.
  • Specify the client name, homepage URL of your application's UI, and a redirect URI to which you want to redirect the users after they grant consent to your application.
  • Click CREATE.
  • Your client ID and client secret will be displayed.
Step-2: Install the SDK

You can install the Python SDK through pip. Pip is a tool for dependency management in Python.

To install the SDK, run the below command in your Python IDE.

pip install zcrmsdk

This command installs the Python and creates a package named zcrmsdk in the installation directory of python (Example: '/Library/Python/2.7/site-packages').

Note
You must also have the Python requests installed. Run the command pip install requests to install them.

Step-3: Import the SDK in your project

Use the below statement in your IDE to import the downloaded SDK in your code.

import zcrmsdk

You can also set an alias for the imported SDK module. Run the below command to import the SDK in a custom name.


import zcrmsdk as your_custom_name

Note that you must use this name while referencing to any class in the SDK.

Example:

import zcrmsdk as my_zoho_sdk
my_zoho_sdk.ZCRMRestClient.initialize(config)

Step-4: Initialize the SDK 

Initializing the SDK involves the following steps.

  • Step 4.a - Choosing the token persistence method
  • Step 4.b - Setting up the configuration dictionary
  • Step 4.c - Generating the tokens

4.a. Token Persistence
Your application should retain tokens (grant, access, and refresh tokens) to automate the process of data sync between your python application and Zoho CRM.

You can persist (store) the tokens in three ways.
  1. MySQL Persistence (default)
  2. File Persistence
  3. Custom DB Persistence

4.a.1. MySQL Persistence

When you want to store the tokens in the MySQL DB, run the below command to install the necessary package.

pip install mysql-connector

In this case, you must include the following keys in the configuration dictionary (discussed in the next section), along with other mandatory keys.

"mysql_username": "root",
"mysql_password": "*****",
"mysql_port":" port_number"

Note
When you use MySQL persistence, ensure that
  • MySQL runs in the same machine serving at the mentioned port (The default port is 3306.)
  • There is a database named zohooauth.
  • There is a table name oauthtokens with the columns useridentifier (varchar(100)), accesstoken (varchar(100)), refreshtoken (varchar(100)) and expirytime (bigint).

4.a.2. File Persistence
If you want to store the tokens in a file, you can create a file named zcrm_oauthtokens.pkl and provide the absolute path of the directory containing this file in the below key of the configuration array.

"token_persistence_path": "path_to_the_folder_containing_the pkl_file"

If you do not create this file, the SDK itself creates this file in the path you have specified, and persists the tokens there.
Note: This method is recommended only for self client apps.

4.a.3. Custom DB Persistence
To use custom DB persistence, you must
  • Implement AbstractBaseClass (AbstractZohoOAuthPersistence from OAuthClient.py), and write a custom implementation of the following functions:
    get_oauthtokens(user_email)
    save_oauthtokens(oauthtokens)
    delete_oauthtokens(user_email)
Include the following keys in the configuration dictionary, along with other mandatory keys.

"persistence_handler_class": "ClassName of the custom implementation",
"persistence_handler_path": "Absolute path of the module (.py file)"

4.b. Configuration dictionary
The below table contains the list of keys you must include in the configuration dictionary based on the type of persistence.

Mandatory keys

File Persistence
MySQL Persistence
Custom DB Persistence
client_id
client_id
client_id
client_secret
client_secret
client_secret
redirect_uri
redirect_uri
redirect_uri
token_persistence_path
mysql_username
persistence_handler_class
--
mysql_password
persistence_handler_path
--
mysql_port
--
currentUserEmail
currentUserEmail
currentUserEmail

Optional keys

File Persistence
MySQL Persistence
Custom DB Persistence
applicationLogFilePath
applicationLogFilePath
applicationLogFilePath
sandbox
sandbox
sandbox
access_type
access_type
access_type
accounts_url
accounts_url
accounts_url
apiBaseUrl
apiBaseUrl
apiBaseUrl
apiVersion
apiVersion
apiVersion

Where,
  • client_id, client_secret, and redirect_uri - Client details you received after registering your application. For self client apps, you can pass a dummy value for the redirect uri.
  • token_persistence_path - The path to store the OAuth tokens in the file. This key is mandatory if you want to use file persistence. If you include this key, this method takes precedence over other persistence methods.
  • mysql_username, mysql_password, mysql_port - The MySQL username, password, and the port, respectively.
  • persistence_handler_class - Name of the class of the custom implementation for persistence. This key is mandatory if you want to use custom persistence.
  • persistence_handler_path - Absolute path of the module (.py file). This key is mandatory if you want to use custom persistence.
  • applicationLogFilePath - The absolute path to log the exceptions during the usage of the SDK.
  • sandbox - Boolean key to make API calls to the sandbox environment. The value true makes API calls to the sandbox. Default value is false.
  • access_type - Must be set to offline as the SDK does not support online OAuth client, now.
  • accounts_url - The domain-specific accounts URL from which you generate the tokens.
  • apiBaseUrl - The domain-specific API URL from which you make API calls. For users from domains other than the US, this key is mandatory.
  • apiVersion - Represents the version of the CRM APIs. The value is v2.
  • currentUserEmail - The email ID of the current user. When you do not specify this value, the SDK throws an exception. This key is mandatory in the configuration dictionary for self-client apps.

For web-based apps, set the user Email ID in the current thread as an attribute.

threading.current_thread().setattr('current_user_email','user@email.com')

Below is a configuration dictionary with all the keys. 

config = {
"apiVersion":"v2",
"currentUserEmail":"email@gmail.com"
"sandbox":"False"
"applicationLogFilePath":"",
"client_id":"1000.3xxxxxxxxxxxxxxxxxxxxxxxxX0YW",
"client_secret":"29xxxxxxxxxxxxxxxxxxxxxxxxxxxxx7e32",
"redirect_uri":"https://www.abc.com",
"token_persistence_path":"/Users/Zoho/Desktop/PycharmProjects",//For File Persistence
"access_type":"offline",
//Use the below keys for MySQL DB persistence
"mysql_username":"",
"mysql_password":"",
"mysql_port":"3306",
//Use the below keys for custom DB persistence
"persistence_handler_class" : "Custom",
"persistence_handler_path": "/Users/Zoho/Desktop/PythonSDK/CustomPersistance.py"
}

Now that you have created and registered your app with Zoho, you must authenticate it. 
Pass the configuration dictionary in the method ZCRMRestClient.initialize(config) and authenticate your app.

4.c. Generating the tokens

As the V2 Zoho CRM APIs follow the OAuth2.0 protocol, it is mandatory to authorize the OAuth2.0 app before using the SDK functions with an access token.
You can generate an access token from a grant token.
You can generate the grant token in two ways based on the type of client.

For Self Client Applications
  1. Log in to Zoho and go to Zoho Developer Console.
  2. Select your Self Client.
  3. Provide the necessary scopes separated by commas, along with the scope aaaserver.profile.READ.
  4. Select the Time Duration from the drop-down. This is the time the grant token is valid for.
  5. Provide a description for the scopes. Click GENERATE.
  6. Copy the grant token.

For Web-based Applications

It is the responsibility of your client app to generate the grant token for the users trying to login.
Your Application's UI must have the Login with Zoho option to open the grant token URL of Zoho, which would prompt for the user's OAuth2.0 authorization.
Upon the successful login of the user, the grant token will be sent as a parameter to your registered redirect URL.

Generating an access token from the grant token
Use the below code snippet in your main class.

zcrmsdk.ZCRMRestClient.initialize(config)
oauth_client = zcrmsdk.ZohoOAuth.get_client_instance()
grant_token = "paste_grant_token_here"
oauth_tokens = oauth_client.generate_access_token(grant_token)

Note
  • The code snippet to generate the access token from the grant token is valid only once per grant token. If the grant token expires before you generate the access token, you must generate a new grant token only.
  • Generating access and refresh tokens is a one-time process. After the tokens are generated the first time, the SDK persists them based on the keys defined in the configuration dictionary, and refreshes the access token as and when required.

Step-5: Connect to Zoho CRM through the available methods

The below image shows the sample code to get the current user details. You can find the code for this sample in the attachment.


The below image contains the response to the above code.



We hope you found this post useful. Stay tuned for more!

Cheers!

    Access your files securely from anywhere

        All-in-one knowledge management and training platform for your employees and customers.






                              Zoho Developer Community




                                                    • Desk Community Learning Series


                                                    • Digest


                                                    • Functions


                                                    • Meetups


                                                    • Kbase


                                                    • Resources


                                                    • Glossary


                                                    • Desk Marketplace


                                                    • MVP Corner


                                                    • Word of the Day


                                                    • Ask the Experts



                                                              • Sticky Posts

                                                              • 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.
                                                              • Kaizen #226: Using ZRC in Client Script

                                                                Hello everyone! Welcome to another week of Kaizen. In today's post, lets see what is ZRC (Zoho Request Client) and how we can use ZRC methods in Client Script to get inputs from a Salesperson and update the Lead status with a single button click. In this
                                                              • Kaizen #222 - Client Script Support for Notes Related List

                                                                Hello everyone! Welcome to another week of Kaizen. The final Kaizen post of the year 2025 is here! With the new Client Script support for the Notes Related List, you can validate, enrich, and manage notes across modules. In this post, we’ll explore how
                                                              • Kaizen #217 - Actions APIs : Tasks

                                                                Welcome to another week of Kaizen! In last week's post we discussed Email Notifications APIs which act as the link between your Workflow automations and you. We have discussed how Zylker Cloud Services uses Email Notifications API in their custom dashboard.
                                                              • Kaizen #216 - Actions APIs : Email Notifications

                                                                Welcome to another week of Kaizen! For the last three weeks, we have been discussing Zylker's workflows. We successfully updated a dormant workflow, built a new one from the ground up and more. But our work is not finished—these automated processes are


                                                              Manage your brands on social media



                                                                    Zoho TeamInbox Resources



                                                                        Zoho CRM Plus Resources

                                                                          Zoho Books Resources


                                                                            Zoho Subscriptions Resources

                                                                              Zoho Projects Resources


                                                                                Zoho Sprints Resources


                                                                                  Qntrl Resources


                                                                                    Zoho Creator Resources



                                                                                        Zoho CRM Resources

                                                                                        • CRM Community Learning Series

                                                                                          CRM Community Learning Series


                                                                                        • Kaizen

                                                                                          Kaizen

                                                                                        • Functions

                                                                                          Functions

                                                                                        • Meetups

                                                                                          Meetups

                                                                                        • Kbase

                                                                                          Kbase

                                                                                        • Resources

                                                                                          Resources

                                                                                        • Digest

                                                                                          Digest

                                                                                        • CRM Marketplace

                                                                                          CRM Marketplace

                                                                                        • MVP Corner

                                                                                          MVP Corner







                                                                                            Design. Discuss. Deliver.

                                                                                            Create visually engaging stories with Zoho Show.

                                                                                            Get Started Now


                                                                                              Zoho Show Resources

                                                                                                Zoho Writer

                                                                                                Get Started. Write Away!

                                                                                                Writer is a powerful online word processor, designed for collaborative work.

                                                                                                  Zoho CRM コンテンツ




                                                                                                    Nederlandse Hulpbronnen


                                                                                                        ご検討中の方




                                                                                                                • Recent Topics

                                                                                                                • Task list flag Internal/External for all phases

                                                                                                                  Phases are commonly used in projects to note milestones in the progression of a project, while task lists can be used to group different types of tasks together. It makes sense to be able to define a task list as either internal or external however the
                                                                                                                • HAVING PROBLEM WITH SENDING EMAIL

                                                                                                                  Hi all, I'm unable to receive emails on info@germanforgirls.eu. I'm getting an error code 550. 5.1.1. invalid email recipients. Moreso, I would like info@germanforgirls.eu to be the default "send from" email and not solomon@germanforgirls.eu. Kindly see
                                                                                                                • Sharing my portal URL with clients outside the project

                                                                                                                  Hi I need help making my project public for anyone to check on my task. I'm a freelance artist and I use trello to keep track on my client's projects however I wanted to do an upgrade. Went on here and so far I'm loving it. However, I'm having an issue sharing my url to those to see progress. They said they needed an account to access my project. How do I fix this? Without them needing an account.
                                                                                                                • Different Task Layouts for Subtasks

                                                                                                                  I was wondering how it would be possible for a subtask to have a different task layout to the parent task.
                                                                                                                • Subscription went to default (@zoho.com) address instead for custom domain

                                                                                                                  Hello! So I bought a lite sub to test things out, wanting to use my own domain. However, after passing through all the verification steps (completed now), it seems that the sub I bought was assigned to the default email that I already had with Zoho and
                                                                                                                • Canvas templates and font-family

                                                                                                                  i dont understant why its always the smallest things that waste all of my time! why in some videos i see they have tamplates in the Canvas editor and i cant seem to fint it? and why oih why cant i cange the font? i just want simple Arial! help meeeeeeeeee
                                                                                                                • Re: Ca.gory groups and not all email addresses being added to a group emails

                                                                                                                  Hi, I have added emails under 'Contacts' into categories but when sending a group email and putting the category name in not all email addresses go onto the email. I have refreshed the page, deleted and redone the info etc with no luck. I only found out
                                                                                                                • IMPORTANT

                                                                                                                  Dear Zoho Support Team, I am currently experiencing an issue when trying to send emails from my Zoho Mail account. Each time I attempt to send a message, I receive the following error: "Unable to send message; Reason: 554 5.1.8 Email Outgoing Blocked."
                                                                                                                • Able to Send Emails from Zoho but Not Receiving Emails from Gmail

                                                                                                                  Hello, I am experiencing an issue with my shopify domain email setup and would appreciate your help. Current situation: I can successfully send emails using Zoho. I can receive emails from some services (for example, Facebook). However, I cannot receive
                                                                                                                • Announcing new features in Trident for Windows (v.1.38.5.0)

                                                                                                                  Hello Community! Trident for Windows just received a major update, with a range of capabilities that focuses on strengthening and enhancing communication. Let’s dive into what’s new! View complete technical email details. For those who need deeper visibility
                                                                                                                • Accounting of Amazon

                                                                                                                  I have recently started selling on Amazon.in and I am facing issues with different types of transactions: What entry to do in case of return? If I had sent two products and customer returned both the products but I had received only one and got the claim
                                                                                                                • Compose Emails Faster Using Templates and Snippet

                                                                                                                  Hello everyone, We have made an enhancement to the Send as Email option in Tickets. Agents can use templates and snippets to draft their response, which helps save time and maintain consistency. The Send as Email page will display the available templates
                                                                                                                • Customize Colors used on graphs and charts according to users desire.

                                                                                                                  It would be great if we could customize the graph's colors as we see fit. I hate that yellow is always the default color!
                                                                                                                • Emails not integrating

                                                                                                                  My emails from Hubspot did not integrtate over. How do I fix that?
                                                                                                                • Creating meetings from an email

                                                                                                                  Hi. Similar to Outlook, it would be helpful if a meeting can be scheduled from an email so that the attendees need not be manually entered every time it's created.
                                                                                                                • Want to use Zoho Books in Switzerland. CHF support planned?

                                                                                                                  Hi, We're a Swiss company using other Zoho suite software and I discovered Zoho Books and other accounting SaaS when looking for an accounting tool. Do you intend to cover Switzerland and CHF based accounting anytime soon? Roy
                                                                                                                • RouteIQ for Zoho FSM

                                                                                                                  Beste, Zou wel top zijn dat we een RouteIQ hebben voor FSM aangezien we constant moeten zien wat de beste route is voor onze monteurs. Nu moeten we een speciale aparte programma hebben om de beste route te berrekenen voor onze monteurs aangezien de planning
                                                                                                                • Changes to the send mail Deluge task in Zoho CRM

                                                                                                                  Hello everyone, At Zoho, we continuously enhance our security measures to ensure a safer experience for all users. As part of our ongoing security enhancements, we're making an important update on using the send mail Deluge task in Zoho CRM. What's changing?
                                                                                                                • How to Invoice Based on Timesheet Hours Logged on a Zoho FSM Work Order

                                                                                                                  Hi everyone, We’re working on optimizing our invoicing process in Zoho FSM, and we’ve run into a bit of a roadblock. Here’s our goal: We want to invoice based on the actual number of hours logged by our technicians on a job, specifically using the timesheets
                                                                                                                • Inclusion is the new engagement

                                                                                                                  When in a very challenging situation, it helps to have peers or friends around you saying, “Everything will be okay.” They speak to you in common or shared language. But your inner voice comes to you in a truly uplifting language that stays close to your
                                                                                                                • DKIM verification for Squarespace website - Corrections to instructions

                                                                                                                  Zoho Campaigns DKIM TXT record instructions for Squarespace show that Host field should show: 22111._domainkey.[domain name, e.g. mywebsite.com] However, after 72hrs, I had to reach out to Squarespace tech support, and they confirmed that the domain name
                                                                                                                • Disable All

                                                                                                                  I want to disable all the fields on the form when it loads.  I know there is a way to do this by listing all the fields as follows: disable Name; disable Address; disable City;  ... I have over 50 fields on my form and i am wondering if there is a single command or way to just disable all fields on load.   On load = disable All Thank you for any help.  
                                                                                                                • Migrating my email from GMAIL to ZOHO MAIL..........

                                                                                                                  I am a long time GMAIL user and I really only understand how they operate, but after reviewing your tutorials and forums online, it is quite unbelievable how much more and how much more streamlined ZOHO mail is, not to mention ZOHO's wonderful, more advanced capabilities. I do have several questions about transitioning over to ZOHO.  Primarily, where is the best place to start, what do I do first? And how hard is it actually to move all my business and personal accounts over here?  When I sign up
                                                                                                                • iOS Zoho Mail App Crashesruni

                                                                                                                  Whenever I trying to search emails via the Zoho Mail app on my iPhone the app crashes, I am running the latest version of the app and the latest iOS version. I have all set reset the app and deleted the app and still have the same issue. Thank you in
                                                                                                                • Assessment Answered - Automation (Related List)

                                                                                                                  Hello everyone, We have linked a candidate assessment to our job posting. When someone applies, they are required to answer all the assessment questions. However, some candidates submit their applications without completing the questions. In such cases,
                                                                                                                • Paid Support Plans with Automated Billing

                                                                                                                  We (like many others, I'm sure) are designing or have paid support plans. Our design involves a given number of support hours in each plan. Here are my questions: 1) Are there any plans to add time-based plans in the Zoho Desk Support Plans feature? The
                                                                                                                • Shared Views

                                                                                                                  Hello, is there a way to prevent an agent from changing a shared table view? I have no issues with agents being able to create and customize their own view, but when I create a view and share it to my team -- the expectation is that they are viewing it
                                                                                                                • Using Zoho answer bot across departments (help center articles from another department)

                                                                                                                  Hi Zoho Community, I’ve run into a major issue and hope someone here has experience with this setup. We currently have a Help Center in the department A where all of our knowledge base articles are maintained. However, we would like to use a Zoho Answer
                                                                                                                • Zoho Mail will not set up in Thunderbird

                                                                                                                  I am using Thunderbird 13.0.1 in Linux Mint 13 64-bit. I cannot set up my Zoho IMAP email in this client. This is evidently a common problem as evidenced by these postings in the Thunderbird forum: thunderbird can't seem to "find the settings" I cannot
                                                                                                                • Zoho Desk Partners with Microsoft's M365 Copilot for seamless customer service experiences

                                                                                                                  Hello Zoho Desk users, We are happy to announce that Zoho Desk has partnered with Microsoft's M365 to empower customer service teams with enhanced capabilities and seamless experiences for agents. Microsoft announced their partnership during their keynote
                                                                                                                • The Social Wall: January 2026

                                                                                                                  Hello everyone, We’re back with the first edition of The Social Wall of 2026. There’s a lot planned for the year ahead, and we’re starting with a few useful features and improvements released in January to help you get started. Create a GBP in Social
                                                                                                                • Pipeline: Copying rulesets from one data source to another

                                                                                                                  When creating and editing data pipelines, it would be really helpful to be able to copy the ruleset from one data source and 'paste' it to another. This would save time and reduce manual mistakes.
                                                                                                                • Doubt about maximum email reach

                                                                                                                  Good morning, greetings. This is Bramdon García from EDULABS S.A.S ESP, located in Colombia. I'm writing to inquire about the possibility of sending an email to 35,000 people simultaneously. Our company has a Zoho account, but we'd like to know if there's
                                                                                                                • Zoho calendar not working in browser

                                                                                                                  Hello, I am new to Zoho. I have two accounts for two separate businesses. In one of them, calendar loads in a browser no problem. However, if I use this account (sairfeetmusic.co.uk) calendar does not load. I also cannot add it to my Thunderbird Lightening
                                                                                                                • Authentication Failure when adding POP3 accounts

                                                                                                                  Hi everyone, I am a new user currently migrating from Gmail to Zoho Mail. I decided to make the switch following Google's decision to discontinue POP3 fetching. I previously used Gmail as my primary mail hub, and Zoho seems like the perfect alternative
                                                                                                                • Trident Application Folder

                                                                                                                  Hi, How to choose installation folder for Trident, by default it gets installed in C drive. How to change drive?
                                                                                                                • Email disappeared to specific contact

                                                                                                                  Good afternoon, this morning I emailed somebody. This email isn’t showing up in my sent folder. They sent me a response which I clicked on and it disappeared immediately. Why could this be?
                                                                                                                • Create an Eye-Catching Announcement Widget for Your Help Center

                                                                                                                  Hello Everyone! In this week’s edition, let’s explore how to keep your customers updated with exciting news in the Help Center. See how ZylkerMobile wowed their customers by bringing updates right to their portal. ZylkerMobile, the renowned brand for
                                                                                                                • Updating records through Zoho Sheets View doesn't update timeline or trigger workflow rules

                                                                                                                  I have noticed that when i update a series of record with the zoho sheets view (see here http://d.pr/i/ahnR) it doesn't update timeline history or trigger workflow rules. I am using it in the Deals module. Looking forward for some more info. Denis
                                                                                                                • How do I change the account bank charges are charged to?

                                                                                                                  I want bank charges charged to my Credit Card Fees account. Is there a way to do this?
                                                                                                                • Next Page