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

                                                                                                                • Find and Merge Duplicates to trigger webhook

                                                                                                                  My sales team uses the Find and Merge Duplicates feature often to cleanup records in the CRM. We use webhooks to signal to our internal tools database when new Contacts are created, updated, or deleted, in order to keep our DB in sync with Zoho CRM. However,
                                                                                                                • Introducing WhatsApp integration and quick editing capabilities in Zoho Sign

                                                                                                                  Hi there, Zoho Sign already helps users collect signatures via email and SMS, and we're happy to announce that you can now send documents and authenticate recipients right through WhatsApp. Some of the key benefits include: Communication with recipients
                                                                                                                • Dynamic Field Folders in OneDrive

                                                                                                                  Hi, With the 2 options today we have either a Dynamic Parent Folder and lots of attachments all in that one folder with only the ability to set the file name (Which is also not incremented so if I upload 5 photos to one field they are all named the same
                                                                                                                • Logging Out of FSM

                                                                                                                  I have tried to log out of FSM app of the last person and it will not let me do so. I need to log in to my account.
                                                                                                                • Enhancement in Zoho CRM: Control who gets to participate in a forecast by customizing the user hierarchy

                                                                                                                  Include only users from the sales function; exclude the rest Dear Customers, We hope you're well! We started this year with a series of exciting enhancements to Zoho CRM and to this list, we are thrilled to add an enhancement to forecasting. Let's talk
                                                                                                                • Multiple Zoho One accounts

                                                                                                                  Hello. I'm searching for a solution to run multiple organizations under 1 Zoho One account or have a different Zoho One account for each organization and still be able to easily login to each. Currently Zoho One doesn't allow the same email address to
                                                                                                                • Tips and tricks #63: Hold and Drag to select elements in the Show app for iOS

                                                                                                                  Hello everyone! Welcome to another tips and tricks article. In today's article, we will learn about the Hold and Drag function in the Show app for iOS. The Hold and Drag option lets you select multiple elements on a slide quickly. Once they are selected,
                                                                                                                • Organize and manage PDFs with Zoho PDF Editor's dashboard

                                                                                                                  Hello users, Zoho PDF Editor's dashboard is a one-stop place to upload, sort, share PDF files, and more. This article will explore the various capabilities that Zoho PDF Editor's dashboard offers. A few highlights of Zoho PDF Editor's dashboard: Upload
                                                                                                                • Possible to generate/download Quote PDF using REST API?

                                                                                                                  See title. Is there any way after a quote has been created to export to a PDF using a specified template and then download it? Seems like something that should be doable. Is this not supported in the API v2.0?
                                                                                                                • Free Webinar - AI for email: Helpful or Hype?

                                                                                                                  Hello, Zoho Mail community! 👋 We're kicking things off with a webinar you won't want to miss—and yes, we're going there: Is AI in email actually useful, or is it all hype? In this session, two of our experts will have an open, no-fluff conversation about
                                                                                                                • Balancing access, security, and productivity with Email Policy

                                                                                                                  An organization typically includes multiple user groups, such as leadership, sales, and support, each with different email usage patterns and security needs. Administrators must balance flexibility and control, thereby ensuring email usage aligns with
                                                                                                                • Is it possible to update multiple work items at once?

                                                                                                                  Hi, Is it possible to update the statuses/release tags of multiple work items at once? I came across this thread that says it's not possible at the moment, but it was related to the Sprints mobile app. Does this feature not exist in the website as well?
                                                                                                                • See Every IM Conversation as It Happens

                                                                                                                  Instant messaging moves fast. Customers expect quick replies and smooth conversations across WhatsApp, Instagram, Facebook, and live chat. But without real-time visibility, small issues become big problems. A session stays open longer than expected. A
                                                                                                                • Release Notes | January 2026

                                                                                                                  We have rolled out a set of powerful new enhancements across Zoho Vertical Studio that bring several long-awaited capabilities to your applications. These updates focus on deeper customization, smarter automation, better reporting, and improved usability
                                                                                                                • Product Request: Send email to Secondary email

                                                                                                                  Guys, we should be able to send the campaign to the secondary email too.  Is this on the plans for Zoho Campaign? It looks like I can map the secondary email from the CRM to the Campaigs, but can not send the message.  
                                                                                                                • Franchise

                                                                                                                  Is there a solution of how to organize global franchise organisations?
                                                                                                                • Recording overpayment?

                                                                                                                  So a customer just overpaid me and how do I record this? I can't enter an amount that is higher than the invoice amount. Eg. Invoice is $195 and he sent $200. He's a reccuring customer so is there a way to record so that he has a $5 advance for future invoice?
                                                                                                                • Holidays

                                                                                                                  Hi; For defining Holidays, you need to add logic to handle the year as well as the month & day. We need to be able to enter Holidays for the next year. I need to add a holiday for January 2, 2017, but I can't until January 1st, which is a Sunday and we
                                                                                                                • Composite Product (kit) - Dynamic Pricing

                                                                                                                  I am setting up Composite Products for item kits that I sell. I also sell the items from the kit individually. Problem is when pricing changes on an individual part, the Composite Product price does not change meaning when the cost of item # 2 in the
                                                                                                                • Urgent: Slow Loading Issue on Zoho Commerce Website

                                                                                                                  Dear Zoho Support Team, I am experiencing slow loading times on my Zoho Commerce website, which is affecting its performance and user experience. The issue persists across different devices and networks. Could you please investigate this matter and provide
                                                                                                                • Need help with importing expenses

                                                                                                                  I'm using the template downloaded from the application. When I try to import my expenses, I get the message: Duplicate entry in the Expense Date column. Ensure it contains unique values. None of the rows will import. There are duplicate dates, but they
                                                                                                                • Search not working!

                                                                                                                  I have items in my notebook tagged but when I search for a tag nothing comes up! Any fix for this?
                                                                                                                • ERROR CODE :550 - 550 5.1.1 Invalid email recipients

                                                                                                                  This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. mustafa.ashraf@techlink-eg.net, ERROR CODE :550 - 550 5.1.1 Invalid email recipients
                                                                                                                • What's New in Zoho POS - February 2026

                                                                                                                  Hello everyone, Welcome to Zoho POS’s monthly updates, where we share our latest feature updates, enhancements, events, and more. Let’s take a look at how February went. Purchase and sell items on different units We have introduced a unit conversion functionality
                                                                                                                • Can i integrate bigin with google voice?

                                                                                                                   I make all my calling through google voice to seprate my personal line from business. I want to log my calls with customers automatically but i domt see anywhere where i can do that. Any help? Im pretty sure i wont be able to. Sad
                                                                                                                • POP/SMTP access authentication failed

                                                                                                                  I am unable to log setup outlook for my zoho mail account. I am using these settings poppro.zoho.com port 995 SSL smtp.zoho.com port 587(tls)/465(ssl) username/password works on mail.zoho.com but not with POP access. Can you help?
                                                                                                                • Invoice template with sales tax totals

                                                                                                                  Hi everyone,  I am trying to edit my invoice template so that only the total sales tax collected for my tax group shows up. Right now, under by sub total, each individual tax shows up and that takes up a lot of unnessary space, so I just want the one
                                                                                                                • Our Review Of Zoho CRM after 60 Days

                                                                                                                  The purpose of this is to just share with Zoho why I love their product, but ultimately why I could not choose Zoho CRM for our next CRM. About two months ago we begun a CRM exploration process for our financial planning firm, based in Texas. We already
                                                                                                                • Error AS101 when adding new email alias

                                                                                                                  Hi, I am trying to add apple@(mydomain).com The error AS101 is shown while I try to add the alias.
                                                                                                                • This domain is not allowed to add. Please contact support-as@zohocorp.com for further details

                                                                                                                  I am trying to setup the free version of Zoho Mail. When I tried to add my domain, theselfreunion.com I got the error message that is the subject of this Topic. I've read your other community forum topics, and this is NOT a free domain. So what is the
                                                                                                                • Allow Admin to Configure Report > More Options Button

                                                                                                                  As an Admin, I want to configure the options of the Report > More Options button to improve UX and reduce Developer overhead. See attached screenshot. Original question posted here: https://help.zoho.com/portal/en/community/topic/modify-standard-rep
                                                                                                                • Generate a link for Zoho Sign we can copy and use in a separate email

                                                                                                                  Please consider adding functionality that would all a user to copy a reminder link so that we can include it in a personalized email instead of sending a Zoho reminder. Or, allow us to customize the reminder email. Use Case: We have clients we need to
                                                                                                                • You cannot send this campaign as there is no contact in the selected mailing list.

                                                                                                                  We have synced contact lists and sent campaigns just fine prior to today.  Now no matter what list I upload when I go to send the campaign it gives an error "You cannot send this campaign as there is no contact in the selected mailing list." And now it
                                                                                                                • Pivot Report Formula - using a today() variable

                                                                                                                  Is it possible for me to use a value of today() in a formula on a pivot table? I'm trying to identify where the end date of a project is greater than the current date if("10. Projects (Zoho Projects).End Date" > today(), 'Yes', 'No') I get the error that
                                                                                                                • Cannot connect IMAP to outlook

                                                                                                                  Hello I have followed the instructions to connect my zoho account to Outlook IMAP but get this message: Session Id: bba118fb-151c-824f-9512-3ad1e91b109d Timestamp: 1708976566964 Error code: INVALIDCREDENTIALS INTERACTIONREQUIRED I'm using the exact configeration
                                                                                                                • Department Overview by Modified Time

                                                                                                                  We are trying to create visuals to show the work our agents do in Zoho Desk. Using Zoho Analytics how can we create a Department Overview per modified time and not ticket created time? In order for us to get an accurate view of the work our agents are
                                                                                                                • Enhance Sign CRM integration

                                                                                                                  Hello all, I'm working on a custom Deluge script to enhance the integration between Zoho CRM and Sign by using a writer merge template for additional flexibility. I want to replicate the post-sign document integration that exists between CRM and Sign
                                                                                                                • Zoho Workdrive download was block by security software

                                                                                                                  Hi Team, Recently workdrive download was blocked by huorong security. Could you please advise how to put zoho workdrive as white list? every time we put "*.zohoexternal.com" or "workdrive.zohoexternal.com", the warning msg will still pop in next dow
                                                                                                                • Choosing a portal option and the "Unified customer portal"?

                                                                                                                  I am trialling Zoho to replace various existing systems, one of which is a customer portal. Our portal allows clients to add and edit bookings, complete forms, manage their subscriptions and edit some CRM info. I am trying to understand how I might best
                                                                                                                • General feedback

                                                                                                                  I think Zoho is at the moment (potentially) the best, or perhaps the only, real online solution, for business, and not just business. Surely the only one that has all the features that I need (and I've probably tried everything, at least all that has a cost-free option). It has still got lots of bugs and imperfect features, so I do hope it keeps developing and becomes a really professional platform. Lots of people (including me) want to use such one platform for all scheduling/mail/note-taking...
                                                                                                                • Next Page