Kaizen #44 - Handling Attachments API in Java and Java SDK (Part 1/2)

Kaizen #44 - Handling Attachments API in Java and Java SDK (Part 1/2)

Hello everyone!

Welcome back to yet another post in the Kaizen series.
This week, we will discuss about the attachments API in Java and Java SDK.

1. Introduction to Attachments API

Attachments in Zoho CRM are an important aspect of any record as they add additional information in the form of documents such as Marketing Collateral, Sales Quotes/Orders/Invoices, SLA and etc to the existing record. A record can contain multiple attachments. However, the attachments hold a maximum limit per record. The attachment limit per record is 100Mb. It can be either a single file or multiple files. In the case of multiple files, the total file size of the multiple files must not exceed 100Mb. The allowable limit for an image is 10Mb, and the resolution is 10megapixel. 

Let's discuss some important details concerning the attachments API. 
i. While uploading an attachment or an image through a curl request, the image must be included in the request with the content type as multipart/form-data

ii. The oauth scopes required for attachment API : 
ZohoCRM.modules.all 
(or) 
ZohoCRM.modules.{module_name}.{operation_type}
(and) 
ZohoCRM.modules.attachments.all

iii. The possible oauth scope module_names are: 
leads, accounts, contacts, deals, campaigns, tasks, cases, events, calls, solutions, products, vendors, pricebooks, quotes, salesorders, purchaseorders, invoices, custom, and notes.

2. Operations in the Attachments API

The attachments API in Zoho CRM allows a user to get a list of attachments, upload or download a file and delete them as well. Our focus for this week will be on executing the following operations using Java's HTTP client and CRM's Java SDK.
a. List attachments
b. Upload attachments

a. List Attachments

To get the list of attachments of a specific record. 

Request method:  GET
Request URL:  
{{api-domain}}/crm/v2/{module_api_name}/{record_id}/attachments

Sample URL:
{{api-domain}}/crm/v2/Leads/3719520000000659047/attachments

Java SDK Code -
In Java SDK, we employ the getAllAttachmentsDetails() method to fetch all the necessary details. We will need the record_id for whom the attachment details are fetched. Here, the record_id provided is 3719520000000659047. After fetching the details, we iterate over the response and just print the necessary details. 
public void getAllAttachmentsDetails() throws Exception {
              ZCRMRecord record=ZCRMRecord.getInstance("Leads",3719520000000659047L); 
 int page=1;
              int per_page=200;
 BulkAPIResponse responseIn=record.getAllAttachmentsDetails(page, per_page,null);
        List <ZCRMAttachment> attchments=(List<ZCRMAttachment>)responseIn.getData(); 
        if(attchments!=null) 
        {
            for(ZCRMAttachment attchmentIns : attchments)
            {
                System.out.println(attchmentIns.getId()); 
                System.out.println(attchmentIns.getFileName()); 
                System.out.println(attchmentIns.getFileType());
                System.out.println(attchmentIns.getSize()); 
                ZCRMRecord parentRecord1=attchmentIns.getParentRecord();
                System.out.println(parentRecord1.getEntityId());
                ZCRMUser createdBy1=attchmentIns.getCreatedBy();
                System.out.println(createdBy1.getId()); 
                System.out.println(createdBy1.getFullName());
                ZCRMUser modifiedBy1=attchmentIns.getModifiedBy();
                System.out.println(modifiedBy1.getId()); 
                System.out.println(modifiedBy1.getFullName());
                ZCRMUser owner1=attchmentIns.getOwner();
                System.out.println(owner1.getId()); 
                System.out.println(owner1.getFullName()); 
                System.out.println(attchmentIns.getCreatedTime()); 
                System.out.println(attchmentIns.getModifiedTime()); 
            }
        }
}


Java Code 
In the absence of Java SDK, we make a GET request to the mentioned URL and display the response.
public void getAllAttachmentDetails() throws Exception
 {
  CloseableHttpClient httpclient = HttpClients.createDefault();
     HttpGet httpget = new HttpGet("{{api-domain}}/crm/v2/Leads/3719520000000659047/attachments");
     httpget.addHeader("Authorization", "Zoho-oauthtoken 1000.9XXX.6XXX");
     System.out.println("Request Type: "+httpget.getMethod());
     HttpResponse httpresponse = httpclient.execute(httpget);
     Scanner sc = new Scanner(httpresponse.getEntity().getContent());
     System.out.println(httpresponse.getStatusLine());
     while(sc.hasNext()) {
          System.out.println(sc.nextLine());
     }
 }


Sample Response
{
    "data": [
        {
            "Owner": {
                "name": "Patricia Boyle",
                "id": "3719520000000191015",
                "email": "patricia.boyle@zohocorp.com"
            },
            "Modified_Time": "2020-08-12T10:28:07+05:30",
            "File_Name": "testimg.jpg",
            "Created_Time": "2020-08-12T10:28:07+05:30",
            "Size": "120335",
            "Parent_Id": {
                "name": "Johnson Charles",
                "id": "3719520000000659047"
            },
            "$editable": true,
            "$file_id": "8urshba63343dcc7b41418d74eeca1d4c323e",
            "$type": "Attachment",
            "$se_module": "Leads",
            "Modified_By": {
                "name": "Patricia Boyle",
                "id": "3719520000000191015",
                "email": "patricia.boyle@zohocorp.com"
            },
            "$state": "save",
            "id": "3719520000000981001",
            "Created_By": {
                "name": "Patricia Boyle",
                "id": "3719520000000191015",
                "email": "patricia.boyle@zohocorp.com"
            },
            "$link_url": null
        }
    ],
    "info": {
        "per_page": 200,
        "count": 2,
        "page": 1,
        "more_records": false
    }
}

b. Upload Attachments

To attach a file to a record.

Request method :  POST
Request URL:
{{api-domain}}/crm/v2/{module_api_name}/{record_id}/attachments

Sample URL:
 
{{api-domain}}/crm/v2/Leads/3719520000000659047/attachments

Java SDK Code
For uploadAttachment(), we need the record_id and the file to upload as a pre-requisite. We employ the uploadAttachment() to upload our file to the record.
public void uploadAttachment() throws Exception{
  ZCRMRecord record=ZCRMRecord.getInstance("Leads",3719520000000659047L); 
  APIResponse responseIn=record.uploadAttachment("/Users/srivathsan-8829/Downloads/record.txt"); 
  System.out.println( "Status:"+ responseIn.getMessage()); 
        System.out.println( "Message:"+ responseIn.getStatus()); 
        System.out.println("http code"+ responseIn.getStatusCode()); 
        System.out.println( " Code:"+responseIn.getResponseJSON().toString());
 }


Java Code 

Uploading an attachment to a record in Java without Java SDK can be a tedious task. As shown below, the request needs to be multipart request. 

public void uploadAttachments() throws Exception
 {
    CloseableHttpClient httpclient = HttpClients.createDefault();
       File file = new File("/Users/srivathsan-8829/Downloads/record.txt");
       FileBody filebody = new FileBody(file, ContentType.DEFAULT_BINARY);
       MultipartEntityBuilder entitybuilder = MultipartEntityBuilder.create();
       entitybuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
       HttpEntity mutiPartHttpEntity = entitybuilder.build();
       RequestBuilder reqbuilder = RequestBuilder.post("{{api-domain}}/crm/v2/Leads/3719520000000659047/attachments");
       reqbuilder.setEntity(mutiPartHttpEntity);
       reqbuilder.addHeader("Authorization", "Zoho-oauthtoken 1000.9XXX.6XXX");
       HttpUriRequest multipartRequest = reqbuilder.build();
       HttpResponse httpresponse = httpclient.execute(multipartRequest);
       System.out.println(EntityUtils.toString(httpresponse.getEntity()));
       System.out.println(httpresponse.getStatusLine());
 }

Sample Response
{
    "data": [
        {
            "code": "SUCCESS",
            "details": {
                "Modified_Time": "2020-08-12T10:28:07+05:30",
                "Modified_By": {
                    "name": "Patricia Boyle",
                    "id": "3719520000000191015"
                },
                "Created_Time": "2020-08-12T10:28:07+05:30",
                "id": "3719520000000981001",
                "Created_By": {
                    "name": "Patricia Boyle",
                    "id": "3719520000000191015"
                }
            },
            "message": "attachment uploaded successfully",
            "status": "success"
        }
    ]
}

Note :-
FILE_SIZE_MORE_THAN_ALLOWED_SIZE - This error is specific to the attachments API which is returned when you try to upload an attachment/photo exceeding the allowed size.

We hope you found this post useful. In our next kaizen post, we will discuss how to download and delete an attachment via Java HTTP Client and Java SDK. Let us know your thoughts in the comment section or reach us out at support@zohocrm.com.

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

                                                                                                                • Zoho Creator Developer Console | Improved Distribution and Lifecycle Management for apps

                                                                                                                  Hello everyone, We're excited to introduce new enhancements now in the Zoho Creator Developer Console. These updates strengthen private app distribution through licensing controls and extend environment support across all installed apps, helping teams
                                                                                                                • Anchor Links in Dashboards

                                                                                                                  Hello,  Our dashboards frequently have multiple sections that would be more easily skipped between using anchor links. Please consider adding an anchor link feature to the text widget? This could be done by adding an anchor link option to the text widget next to the "remove" option (see screenshot). The option would assign an ID to the <div> containing the text widget in the live dashboard. Then, the chosen ID could be linked using a traditional <a href="#link_id"> in the html section of the text
                                                                                                                • Sync images with Shopify/Cart

                                                                                                                  Hello, sync images with shopify or other cart, it cuts out the double work of having to upload to shopify/cart and zoho. Thanks
                                                                                                                • Is it Possible to Modify Standard Report Urls

                                                                                                                  Is there a way to permanently modify standard report Urls? Use case: Suppose I have a Products report. Showing list as timeline, calendar, or kanban doesn't make sense. Want to hide that from users by adding #Report:Products?zc_ShowAs=false&zc_Print=false
                                                                                                                • 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,
                                                                                                                • External User onboarding for zoho connect is not really intuitive.

                                                                                                                  So the external user is sent an invite, which has a button that directs them to login to zoho to view the invite, but if they don't have a zoho account, they cannot access that invite, which seems kinda silly, as there is not real way on for them to create
                                                                                                                • Having trouble fetching contents of Zoho Connect Feeds using the API, requesting alternative API documentation.

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

                                                                                                                  Hi there. I looked at the API documentation and nowhere did it mention how to use the API method to upload a file even though it is mentioned that it is possible to be done so. Please help.
                                                                                                                • Select the task view on the board in the Zoho Connect iPhone app

                                                                                                                  Hello. How do I select the task view on the board in the Zoho Connect iPhone app? The Android app has this functionality.
                                                                                                                • Auto tagging

                                                                                                                  Some of the articles I enter into Notebook get there when I enter them in Raindrop.io and IFTTT copies the articles in Notebook. When this happens the notes are tagged but instead of useful one word tags with topic the tag pertains to the specific article
                                                                                                                • Zoho Sheet for Desktop

                                                                                                                  Does Zoho plans to develop a Desktop version of Sheet that installs on the computer like was done with Writer?
                                                                                                                • WebDAV support

                                                                                                                  I need WebDAV support so that I can upload/download (and modify) documents from my local file system. Is anything planned in his direction?
                                                                                                                • Constant refresh required in lots of Zoho tabs

                                                                                                                  "Hey Zoho, if you can sync my notification bell across 15 tabs using a BroadcastChannel, why can't you send a 'Data Refresh' signal the same way? We don't need a browser reload—we just need the data to sync without us clicking F5 like it's 1999." "PS:
                                                                                                                • What's New in Zoho Billing | January 2026

                                                                                                                  Excited about the latest enhancements in Zoho Billing? Our January updates bring an intelligent AI assistant, smarter subscription management, and improved tax compliance, saving you time and reducing manual work. Dive into the details below to see how
                                                                                                                • Cliq iOS can't see shared screen

                                                                                                                  Hello, I had this morning a video call with a colleague. She is using Cliq Desktop MacOS and wanted to share her screen with me. I'm on iPad. I noticed, while she shared her screen, I could only see her video, but not the shared screen... Does Cliq iOS is able to display shared screen, or is it somewhere else to be found ? Regards
                                                                                                                • Inserting images into Articles or Knowledgebase

                                                                                                                  Hi, Are there any plans in improving the Knowledgebase text editor so it would allow inserting images through Windows clipboard via copy-paste? Say for example I took a screenshot using the snipping tool in Windows and I'd like to insert that image to
                                                                                                                • Links not functioning in Zoho mail

                                                                                                                  Links that are included in emails I receive are not activating. Nothing at all happens when I click on them. I have researched FAQs and this forum to no avail. Any suggestions?
                                                                                                                • Zoho Mail iOS app update: Manage folders and tags

                                                                                                                  Hello everyone! In the most recent version of the Zoho Mail iOS app, we have brought in support to manage(create, edit and delete) the folders and tags. Create folders Create Tags Edit/ Delete folder In addition to this, we have also brought in support
                                                                                                                • Zoho Social API for generating draft posts from a third-party app ?

                                                                                                                  Hello everyone, I hope you are all well. I have a question regarding Zoho Social. I am developing an application that generates social media posts, and I would like to be able to incorporate a feature that allows saving these posts as drafts in Zoho Social.
                                                                                                                • [Important announcement] Zoho Writer will mandate DKIM configuration for automation users

                                                                                                                  Hi all, Effective Dec. 31, 2024, configuring DKIM for From addresses will be mandatory to send emails via Zoho Writer. DKIM configuration allows recipient email servers to identify your emails as valid and not spam. Emails sent from domains without DKIM
                                                                                                                • UI issue with Organize Tabs

                                                                                                                  When looking at the organize Tabs window (bellow) you can see that some tabs are grayed out. there is also a "Add Module/Web Tab" button. When looking at this screen it's clear that the grayed out tabs can not be removed from the portal user's screen
                                                                                                                • Zoho CRM Feature Requests - SMS and Emails to Custom Modules & Time Zone Form Field

                                                                                                                  TLDR: Add Date/Time/Timezone form field, and be able to turn off auto timezone feature. Allow for Zoho Voices CRM SMS Extension to be able to be added to custom modules, and cases. Create a feature that tracks emails by tracking the email chain, rather
                                                                                                                • 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
                                                                                                                • Link Purchase Order to Deal

                                                                                                                  Zoho Books directly syncs with contacts, vendors and products in Zoho CRM including field mapping. Is there any way to associate vendor purchase orders with deals, so that we can calculate our profit margin for each deal with connected sales invoices
                                                                                                                • Extend the Image Choice Field

                                                                                                                  Hi, The New Yes/No field is great for what it does, and the Image Choice Field is good but could be better with some functions from the Yes/No field. Take an example, rather than just Yes/No you want Yes/No/Maybe (Or more than 3 choices), but unlike the
                                                                                                                • CRM x WorkDrive: File storage for new CRM signups is now powered by WorkDrive

                                                                                                                  Availability Editions: All DCs: All Release plan: Released for new signups in all DCs. It will be enabled for existing users in a phased manner in the upcoming months. Help documentation: Documents in Zoho CRM Manage folders in Documents tab Manage files
                                                                                                                • New 2026 Application Themes

                                                                                                                  Love the new themes - shame you can't get a little more granular with the colours, ie 3 different colours so one for the dropdown menu background. Also, I did have our logo above the application name but it appears you can't change logo placement position
                                                                                                                • Zoho Desk: Macro to assign Ticket to self

                                                                                                                  Hello, We are using macros in Zoho Desk to set some fields and send a response. I would also like to assign the ticket to myself (or whoever applies the macro). I can only set a fixed agent in the macro, so I would have to create one for every agent.
                                                                                                                • Turn off Knowlege Base Follow options and Follower lists

                                                                                                                  Is there a way to hide or turn off the option in the Knowledge Base for users to follow specific departments/categories/sections/articles? If not, is there a way to turn off the public list of followers for each of those things? Otherwise, customer names
                                                                                                                • Enterprise Data management solutions

                                                                                                                  I'm on the hunt for the perfect Data management solution for my organization. I've been doing a ton of research across different websites, but honestly, it's just left me more confused! A friend suggested I check here, so I'm hoping someone can point
                                                                                                                • New Feature: Audit Log in Zoho Bookings

                                                                                                                  Greetings from the Zoho Bookings team! We’re excited to introduce Audit Log, a new feature designed to help you track all key actions related to your appointments. With Audit Log, you can maintain transparency, strengthen security, and ensure accountability.
                                                                                                                • Automated Task reminder

                                                                                                                  First question: If a task does not have a reminder set, will it still send an email notification that the task is due today? If not, how can I set up an automated reminder to send the task owner an email that it is due on a certain date?
                                                                                                                • Zoho Support - contract notifications

                                                                                                                  Hi, I have a few questions about using Zoho support. Is there a way to add custom contract notifications like (90 days before expiry send notification e-mail to agent and customer, then another 60 days before expiry and another 30 days.). And is it possible
                                                                                                                • Kaizen #230 - Smart Discount-Based Quote Approvals Using CRM Functions and Approval Process

                                                                                                                  Hello everyone! Welcome back to the Kaizen series! Discount approvals are a standard part of sales governance. Most organizations need something like this: Discount % Required Action < 10% Auto-approve 10–19.99% Sales Manager approval ≥ 20% VP Sales approval
                                                                                                                • How to create a new Batch and update Stock via Inventory?

                                                                                                                  Hi everyone, We are building an automation where a user enters batch details (Batch Number, Mfg Date, Expiry, and Quantity) into a Custom Module. I need this to trigger an API call to Zoho Inventory to: Create the new batch for the item. Increase the
                                                                                                                • OAuth2 Scope Error - Incorrectly defaulting to CRM instead of Analytics.

                                                                                                                  Hello Zoho Team, I am trying to connect n8n to Zoho Analytics API V2 for a simple automation project. Despite using the correct Analytics-specific scopes, my OAuth handshake is failing with a CRM-related error. The Problem: The authorization screen shows:
                                                                                                                • This user is not allowed to add in Zoho. Please contact support-as@zohocorp.com for further details

                                                                                                                  Hello, Just signed up to ZOHO on a friend's recommendation. Got the TXT part (verified my domain), but whenever I try to add ANY user, I get the error: This user is not allowed to add in Zoho. Please contact support-as@zohocorp.com for further details I have emailed as well and writing here as well because when I searched, I saw many people faced the same issue and instead of email, they got a faster response here. My domain is: raisingreaderspk . com Hope this can be resolved.  Thank you
                                                                                                                • Archive Option in Conversation View

                                                                                                                  Hello, I have a suggestion\request to add an "Archive Thread" button in conversation view of Zoho Mail. The best suggestion I have is to put an "Archive Thread" button next to the "Label Entire Thread" button in conversation view. Most users don't just
                                                                                                                • Is it possible to create a meeting in Zoho Crm which automatically creates a Google Meet link?

                                                                                                                  We are using Google's own "Zoho CRM for Google" integration and also Zoho's "Google Apps Sync" tools, but none of them provide us with the ability to create a meeting in Zoho CRM that then adds a Google Meet link into the meeting. Is this something that
                                                                                                                • Trigger a Workflow Function if an Attachment (Related List) has been added

                                                                                                                  Hello, I have a Case Module with a related list which is Attachment. I want to trigger a workflow if I added an attachment. I've seen some topics about this in zoho community that was posted few months ago and based on the answers, there is no trigger
                                                                                                                • Next Page