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

                                                                                                                • Service Reports.

                                                                                                                  Hello Team, I have a requirement to create multiple service reports for a single AP. That means, in one AP I have 5 service line items, and all line items are linked to assets. Once I complete the AP, I want to generate 5 individual service reports, one
                                                                                                                • Blueprint enhancements - Parallel and multiple transitions, and more

                                                                                                                  Last modified on Sep 4, 2023: All Zoho CRM users can now access these enhancements. Initially, these features were available only on an early access basis and by request. However, as of August 2, 2023, they have been made available to all users in all
                                                                                                                • Item Bulk Edit - Allow for Reorder Level

                                                                                                                  We're implementing a process for using the Reorder Level field for Items, and I have to go through and add this value to a huge chunk of our Items. It's driving me bonkers that I have to do this individually through the UI rather than bulk updating. It
                                                                                                                • Zoho CRM || Unable to Bulk Assignment of Territories for Contacts

                                                                                                                  Dear Zoho CRM Support Team, I hope this email finds you well. We recently performed a bulk upload of Contacts into Zoho CRM using the official sample Excel template downloaded from the CRM. The upload itself was completed successfully; however, we encountered
                                                                                                                • What's New in Zoho Inventory | August – October 2025

                                                                                                                  Hello customers, The last quarter has been incredibly productive! We've released a powerful slate of new features and enhancements in Zoho Inventory designed to give you better control, greater efficiency, and expanded functionality across your inventory
                                                                                                                • Disable Zoho Inventory Tracking / Delink Zoho Books & Inventory

                                                                                                                  We have integrated zoho inventory with zoho books? Now after a long time, we want to disable inventory tracking and delink these 2 modules. Zoho says we cant do it. Anybody else going thru the same ? Any possibility at all? Why does zoho not allow to
                                                                                                                • Tracking Non-Inventory Items

                                                                                                                  We have several business locations and currently use zoho inventory to track retail items (sales and purchase orders). We were hoping to use zoho inventory to track our non-inventory items as well (toilet paper, paper towels, etc). I understand that we
                                                                                                                • Price Managment

                                                                                                                  I have been in discussions with Zoho for some time and not getting what I need. Maybe someone can help explain the logic behind this for me as I fail to understand. When creating an item, you input a sales rate and purchase rate. These rates are just
                                                                                                                • Set Warehouse based on Vendor

                                                                                                                  Greetings. I would like to set automaticaly the Warehouse based on the Vendor. Context: I am working on an adaptation of a Purchase Order to be used as a Quotation. I have defined that when a user has to raise a quote the Vendor will be "PROCUREMENT" I would like to set the Warehouse to a predefined value when "PROCUREMENT" is set as Vendor. I have tried to do with the Automation feature using the Field Update option, but Warehouse does not is listed as a field. Can you help? Thanks in advance.
                                                                                                                • How do I save audio files to my PC that I record into Zoho Notebook from my phone?

                                                                                                                  I was thinking of using Zoho Notebook as a way to store composition ideas, as well as for other things if it can handle this. For this to be useful for me though, I need to be able to have an easy way to download those audio files to my PC, either individually
                                                                                                                • Search mails in shared mailbox

                                                                                                                  Hi everyone, is there a way to search mails in shared mailbox's? Search in streams or mail doesn't return anything from mails in shared mailboxes. Thanks! Rafal
                                                                                                                • Zoho Landing Page "Something went wrong" Error

                                                                                                                  Hello, Every time I try to create a new landing page, I receive a "Something went wrong" error with no explanation. I cannot create any new pages, which means we cannot use this application. I did create one landing page successfully over a month ago,
                                                                                                                • Writing SQL Queries - After Comma Auto Suggesting Column

                                                                                                                  When writing SQL Queries, does anyone else get super annoyed that after you type a comma and try to return to a new line it is automatically suggest a new column, so hitting return just inputs this suggested column instead of going to a new line? Anyone
                                                                                                                • Sync your Products Module for better context.

                                                                                                                  In customer support, context is everything. The integration between Zoho Desk and Zoho CRM helps your sales and support teams function as one, delivering better customer experiences. With the latest update to this integration, you can now sync the Product module in your Zoho CRM with your Zoho Desk portal. This feature enables products from Zoho CRM to reflect in the "product" field in Zoho Desk. This can save your support team valuable time and effort.    Some things to note when syncing the two:
                                                                                                                • Where is the desktop app for Zoho Projects???

                                                                                                                  As a project manager, I need a desktop app for the projects I manage. Yes, there's the web app, which is AWESOME for cross browser and platform compatibility... but I need a real desktop app for Projects that allow me to enter offline information where
                                                                                                                • CRM verify details pop-up

                                                                                                                  Was there a UI change recently that involves the Verify Details pop-up when changing the Stage of a Deal to certain things? I can't for the life of me find a workflow or function, blueprint, validation rule, layout rule ect that would randomly make it
                                                                                                                • Does Zoho Writer have Dropdowns

                                                                                                                  I want to add a drop down field in Zoho writer. Is this possible?
                                                                                                                • openUrl in blueprints

                                                                                                                  My customer wants to open a URL at the end of a blueprint transition. Seems this isn't possible right now but it would be very useful. In this thread, https://help.zoho.com/portal/en/community/topic/openurl-not-working the Zoho agent said that it's logically
                                                                                                                • Dropshipping Address - Does Not Show on Invoice Correctly

                                                                                                                  When a dropshipping address is used for a customer, the correct ship-to address does not seem to show on the Invoice. It shows correctly on the Sales Order, Shipment Order, and Package, just not the Invoice. This is a problem, because the company being
                                                                                                                • Prepayment of a sales order

                                                                                                                  How does everyone handle this common (at least it is common for us!) situation? We require all our orders to be fully prepaid before shipment since we manufacture made to order, custom products. Since ZOHO does not allow a sales order to be prepaid, we are forced to create an invoice at the time an order is placed to allow the customer to pay it. Our sales category is therefore skewed, since the sale was actually booked at the time an order was placed, rather then at the time it is shipped, which
                                                                                                                • Access to Specific Zoho Desk layout for external parties

                                                                                                                  Hi, We have a partner who handles for us sales requests from specific markets. He is not a Zoho Desk user. But we want him to b part of a specific Zoho Desk layout to handle inquiries.  How to achieve it in the easiest way possible?
                                                                                                                • Deposit on a Sales Order

                                                                                                                  Good day, 100% of my business is preorders, no inventory. I am trying to run away from QB for one of my businesses, but I require two options that I don't seem to find with Zoho Books. 1 - If there is a way to apply a deposit on a sales order, as with
                                                                                                                • Bulk Delete Attachments

                                                                                                                  Is there a way to bulk delete attachments on the form entries? our storage is full and deleting files one by one is pain taking process.
                                                                                                                • How do I sync multiple Google calendars?

                                                                                                                  I'm brand new to Zoho and I figured out how to sync my business Google calendar but I would also like to sync my personal Google calendar. How can I do this so that, at the very least, when I have personal engagements like doctor's appointments, I can
                                                                                                                • Ability to Disable System Banner Messages in Chat Flow Control

                                                                                                                  Dear Zoho SalesIQ Team, Greetings, We would like to request an enhancement related to the system banner messages in Zoho SalesIQ chat flow control. Current Behavior: SalesIQ allows configuring various automatic banner/system messages such as: Waiting
                                                                                                                • Idle Chat Reminders for Agent-Handled Conversations

                                                                                                                  Dear Zoho SalesIQ Team, Greetings, We would like to request an enhancement to the Idle Chat Handling functionality in Zoho SalesIQ—specifically for chats that are handled by human agents after a bot-to-agent transfer. Current Behavior: In Zobot settings,
                                                                                                                • Snapchat

                                                                                                                  Are there any plans to add Snapchat to Zoho Social or is there any API that we can use to integrate into Zoho.
                                                                                                                • Zoho Sign "An unexpected error occured" when clients trying to sign documents

                                                                                                                  We are unable to have clients sign our documents. When attempting to complete the process an error appears saying "an unexpected error occured" and in the document history just shows "signing failure." We are at a complete standstill with no response
                                                                                                                • ¡Vuelven los Workshops Certificados de Zoho a España!

                                                                                                                  ¡Hola usuarios de Español Zoho Community! Hace ya unos días que hemos dado la bienvenida al 2026, y promete ser un año de lo más emocionante. Y es que nos gustaría haceros nuestro particular regalo de Reyes, aunque lleguemos un poco tarde. 🎁 ¡Nos gustaría
                                                                                                                • How to list services on quote instead of products

                                                                                                                  I need to create a customer facing estimate that displays our services. The default quote layout only allows products to be listed. Is there a way to correct this?
                                                                                                                • Syncing calendar with Google Calendar doesn't work when events are sent to auto repeat

                                                                                                                  Hi... The ZOHO CRM -- GOOGLE CALENDAR sync is broken. If I create a single event on either side, sync works, but if I create an event with auto repeat on either side it doesn't work. Furthermore, events created before the sync don't show up in the calendar.
                                                                                                                • Invoice status on write-off is "Paid" - how do I change this to "Written off"

                                                                                                                  HI guys, I want to write off a couple of outstanding invoices, but when I do this, the status of the invoices shows as "Paid". Clearly this is not the case and I need to be able to see that they are written off in the customer's history. Is there a way
                                                                                                                • Zoho Books - France

                                                                                                                  L’équipe de Zoho France reçoit régulièrement des questions sur la conformité de ses applications de finances (Zoho Books/ Zoho Invoice) pour le marché français. Voici quelques points pour clarifier la question : Zoho Books est un logiciel de comptabilité
                                                                                                                • Please, make writer into a content creation tool

                                                                                                                  I'm tired of relying on Google Docs. I'm actually considering moving to ClickUp, but if Writer were a good content creation tool instead of just a word processor, I would finally be able to move all my development within the Zoho ecosystem, rather than
                                                                                                                • ZohoSalesIQ.Chat cannot send messages

                                                                                                                  Chat cannot send messages. Our app implements the customer service chat window functionality by integrating the Mobilisten SDK. Recently, we encountered an issue: after successful SDK initialization and visitor registration, when the `startWithQuestion`
                                                                                                                • Missed chats on WhatsApp closing after one minute

                                                                                                                  Hi, we have added WhatsApp as a channel. However, if a chat is not picked up within 2mins, the chat is marked as missed and is closed within a minute. Why are they not staying in our "missed" queue for 24 hours as per our WhatsApp preference settings?
                                                                                                                • Feature Request: Add Tax ID Display on Event Tickets

                                                                                                                  Hello Backstage Team, I’ve had several clients bring up an issue regarding tax compliance when creating events. For tax purposes, they are required to show their Tax ID on the event tickets. Currently, this isn’t an option, so they have to manually generate
                                                                                                                • 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
                                                                                                                • Email Alias: To keep emails flowing without disruption

                                                                                                                  Email Alias acts like a nickname for a user’s primary email address, allowing multiple email addresses to deliver messages into the same mailbox. Consider the scenario where an employee manages multiple responsibilities, such as responding to sales inquiries,
                                                                                                                • Inventory "Bulk Actions" button - add more fields to "Bulk Update > Select a field"

                                                                                                                  Can we not get a lot more actions that are commonly used by customers into the "More Actions" button on the Inventory list? More fields listed in the Bulk Update > Select A Field? Possible Bulk update Fields Preferred Supplier ( to quickly move items
                                                                                                                • Next Page