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







                            Zoho Developer Community





                                                  Use cases

                                                  Make the most of Zoho Desk with the use cases.

                                                   
                                                    

                                                  eBooks

                                                  Download free eBooks and access a range of topics to get deeper insight on successfully using Zoho Desk.

                                                   
                                                    

                                                  Videos

                                                  Watch comprehensive videos on features and other important topics that will help you master Zoho Desk.

                                                   
                                                    

                                                  Webinar

                                                  Sign up for our webinars and learn the Zoho Desk basics, from customization to automation and more

                                                   
                                                    
                                                  • Desk Community Learning Series


                                                  • Meetups


                                                  • Ask the Experts


                                                  • Kbase


                                                  • Resources


                                                  • Glossary


                                                  • Desk Marketplace


                                                  • MVP Corner




                                                            • Sticky Posts

                                                            • Kaizen #197: Frequently Asked Questions on GraphQL APIs

                                                              🎊 Nearing 200th Kaizen Post – We want to hear from you! 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 #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.
                                                            • Celebrating 200 posts of Kaizen! Share your ideas for the milestone post

                                                              Hello Developers, We launched the Kaizen series in 2019 to share helpful content to support your Zoho CRM development journey. Staying true to its spirit—Kaizen Series: Continuous Improvement for Developer Experience—we've shared everything from FAQs
                                                            • Kaizen #193: Creating different fields in Zoho CRM through API

                                                              🎊 Nearing 200th Kaizen Post – We want to hear from you! 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.
                                                            • Client Script | Update - Introducing Commands in Client Script!

                                                              Have you ever wished you could trigger Client Script from contexts other than just the supported pages and events? Have you ever wanted to leverage the advantage of Client Script at your finger tip? Discover the power of Client Script - Commands! Commands


                                                            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 Writer

                                                                                              Get Started. Write Away!

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

                                                                                                Zoho CRM コンテンツ








                                                                                                  Nederlandse Hulpbronnen


                                                                                                      ご検討中の方




                                                                                                            • Recent Topics

                                                                                                            • Zoho Mail SMTP IP addresses

                                                                                                              We are using Zoho Mail and needs to whitelist IP for some redirections from your service to another e-mails. You can provide IP address list for Zohomail SMTP servers?
                                                                                                            • Zoho project purchases

                                                                                                              Hi Folks, I think having a purchase module in projects will help in putting together a project p and L. Project wise purchases and expenses.  Do let me know your thoughts.
                                                                                                            • Create Tasklist with Tasklist Template using API v3

                                                                                                              In the old API, we could mention the parameter 'task_template_id' when creating a tasklist via API to apply a tasklist template: https://www.zoho.com/projects/help/rest-api/tasklists-api.html#create-tasklist In API v3 there does not seem to be a way to
                                                                                                            • How can I restore all the deleted Time entries of a Task in Zoho Projects

                                                                                                              How can I restore all the deleted Time entries of a Task in Zoho Projects? Query: In Zoho Projects, I cloned a task and deleted the time entries from the cloned task. However, this also deleted the time entries from the original task. How can I restore
                                                                                                            • Is there a way to make an account inactive in ZoHo Desk

                                                                                                              We have a few Clients "Accounts" that we no longer do business with. It would be beneficial for them to not show up in lists. However, we want to go back and view tickets, time, etc.
                                                                                                            • How to set the value of the Phone field importing contacts in Zoho Desk

                                                                                                              Hi everyone, i'm new in Zoho Desk, we're setting up the environment and i'm importing contacts from another CRM using a file CSV and i'm getting a problem with phone numbers (italian): the leading zero is cut away, also if the value is inside double quotes.
                                                                                                            • Set Custom Icon for Custom Modules in new Zoho CRM UI

                                                                                                            • Change total display format in weekly time logs

                                                                                                              Hi! Would it be possible to display the total of the value entered in the weekly time log in the same format that the user input? This could be an option in the general settings -> display daily timesheet total in XX.XX format or XX:XX.
                                                                                                            • Deprecation Notice: OpenAI Assistants API will be shut down on August 26, 2026

                                                                                                              I recieved this email from openAI what does it means for us that are using the integration and what should we do? Earlier this year, we shared our plan to deprecate the Assistants API once the Responses API reached feature parity. With the launch of Conversations,
                                                                                                            • How to center a field inside a section?

                                                                                                              I’ve been trying to center a field inside a section in Zoho Canvas. When I align it visually, it looks centered in the editor, but after clicking Save, the field appears misaligned on the actual canvas. I also tried setting the field to full width, but
                                                                                                            • Kaizen #192 - Implementing Custom Token Persistence in Python SDK

                                                                                                              Welcome back to another week of Kaizen! Last week, we discussed how to implement Login with Zoho using OAuth 2.0 and saw how to bring it to life in a real-world application with the Zoho CRM Python SDK. We also discussed how Zylker Academy built a custom
                                                                                                            • Showing the map along with mileage expense

                                                                                                              When you use the GPS to track mileage, it shows you the map of the actual path travelled. It would be very useful and practical to save that map with the mileage expense, so that when the report is created, it provides a map of each mileage expense associated
                                                                                                            • Enable Validation Rule for Multi-Select Picklist Field

                                                                                                              Zoho, Please allow validation rules for multi-select fields.
                                                                                                            • File Upload field not showing in workflow

                                                                                                              Hi, I have added a field on Zoho CRM. I want to use it in a workflow where that particular field is updated based on another field, however it is not showing up in the field list to select it in the workflow. Why is this please?
                                                                                                            • CRM Custom function updating a module record shows the Super Admin user as the record modifier

                                                                                                              Dear Zoho CRM Team, Is there any way to update this so that when a custom function has updated a record the Super Admin user doesn't become the modifier? This happens on the record as a modifier and shows up in the audit logs. It would be more useful
                                                                                                            • Best practice importing items and matching assemblies

                                                                                                              Hi, I was wondering what would be the best practice to import items and composite items (assemblies) From my backup, what should I import first? The items or the composite items? I am on Zoho one, using inventory and books. Kind regards, Sabine
                                                                                                            • Best way to fetch employee names from Zoho People into Zoho Creator Inventory Stock Form field Employee Name Lookup

                                                                                                              Hi Team, I have a requirement in my Zoho Creator application (Inventory Stock Adjustment) where I need to fetch employee names from Zoho People and use them as a lookup in a form. Currently, I am considering using an integration field to fetch this data
                                                                                                            • get file api is returning Junk data

                                                                                                              I am working on extension development where at one point I need to retrieve attachments on records I found out I can use only invokeconnection and not invokeurl in extension development The invoke connection returns the image in raw binary format. When
                                                                                                            • Need help with message box

                                                                                                              End user updates many records at once. Each have unique serial number. They want a confirmation box that says starting number, ending number and qty. Is there any way to do this? I been searching and asking support but seems like no great solution.
                                                                                                            • [Webinar] The Transformative Power of Gen BI

                                                                                                              Traditional decision-making tools are no longer enough. The integration of generative AI into business intelligence (BI) is proving to be a true game changer—enabling businesses to make faster, smarter, and better informed decisions. Early adopters of
                                                                                                            • Backorder process review - Automating Removal of Sales Order from "On Hold" When PO is Received

                                                                                                              Hello Zoho Inventory Team, Currently, sales orders in On Hold status are released only when the bill for the purchase order is created. In our workflow, it would be much more efficient if the sales order could automatically move out of On Hold as soon
                                                                                                            • How to access the saved Query using API?

                                                                                                              I have created a query in setting. Is it possible to access it from a API? What's the endpoint? I tried /v8/queries/important_deals but didnt' work.
                                                                                                            • création d'une base de données

                                                                                                              base de donnee d'un lycée
                                                                                                            • User Session variables to recall after form submit & redirect to menu

                                                                                                              Hey, Forgive me if this is a simple answer I have overlooked. I have built a big onboarding process for my SAAS platform which is built and managed by an external Dev team. I am hoping to embed my new creator app on the SAAS platform. I have a menu page
                                                                                                            • Zoho Writer Merge Template with data from Zoho Analytics Views

                                                                                                              Hello, Is there any way to pull information from Zoho Analytics and put it into a Merge Template? I am trying to create a bulk export of one report that filters on a field to create a single document for each of the filter fields.
                                                                                                            • Having to enter bill before stock shows as available.

                                                                                                              Hi, Am I right in thinking you must create a bill from the purchase order receipt before the goods are available for shipping?
                                                                                                            • Agent Availability report

                                                                                                              From data to decisions: A deep dive into ticketing system reports Businesses need to track when their support agents check in and check out from work. This report, titled Agent Availability, is one of the static reports that helps managers track the number
                                                                                                            • Writing by Hand in "Write" Notes

                                                                                                              Hi there! I just downloaded this app a few moments ago, and I was wondering if there was a way to write things by hand in "Write" mode instead of just typing in the keyboard. It would make things a bit more efficient for me in this moment. Thanks!
                                                                                                            • AI-driven construction analytics using Zoho Projects Plus

                                                                                                              Construction projects thrive on timelines; if a project is completed on or before the expected time, it makes headlines, but if it gets delayed, the company’s credibility will be at risk. Such projects require precise planning and constant monitoring,
                                                                                                            • Canadian payroll

                                                                                                              Hello ZOHO, is any updates on when payroll for Canada will be available?
                                                                                                            • Unified customer view: Bringing product intelligence into your CRM data

                                                                                                              For businesses today, applications and digital interfaces are the main touch points in the customer journey. While Zoho CRM data already tells who your customers are and what they buy, Zoho Apptics tells you how they interact and engage with your product.
                                                                                                            • Zoho Creator SaaS app with multiple client AND multiple users

                                                                                                              I am close to finalizing a Zoho Creator app that will be used by different companies to manage sale info, and each company can have multiple users using the app. Things were going perfectly until I tried a search on a report. I use a database field in each table to separate the data for each company, which works great. BUT when I do a search, I get to see ALL the data. This means that Company A could easily see the data from Companies B and C via the built-in search. Is there a way to set up the
                                                                                                            • Project Change Orders and Additions

                                                                                                              We are in the process of migrating from QuickBooks Online to Zoho Books. We have Zoho One and like the ability to sync all of our data across everything. And I like that projects work in a way that's less dumb than QuickBooks. I'm trying to figure out
                                                                                                            • Track online, in-office, and client location meetings separately with the new meeting venue option

                                                                                                              Hello everyone! We’re excited to announce meeting enhancements in Zoho CRM that bring more clarity and structure to how meetings are categorized. You can now specify the meeting venue to clearly indicate whether a meeting is being held online, at the
                                                                                                            • Create custom rollup summary fields in Zoho CRM

                                                                                                              Hello everyone, In Zoho CRM, rollup summary fields have been essential tools for summarizing data across related records and enabling users to gain quick insights without having to jump across modules. Previously, only predefined summary functions were
                                                                                                            • Possible to send Zoom AI Companion transcripts and summaries to contacts in CRM?

                                                                                                              Title says it all. Is it possible to send Zoom AI Companion transcripts and summaries to contacts in Zoho CRM?
                                                                                                            • Introducing segments for targeted user engagement

                                                                                                              Hello everyone, We’re excited to announce Segments in Zoho Apptics, a new way to group users based on their behavior, preferences, and app activity. With Segments, you can deliver more meaningful, timely, and relevant experiences to your users. When combined
                                                                                                            • How do I edit the Calendar Invite notifications for Interviews in Recruit?

                                                                                                              I'm setting up the Zoho Recruit Interview Calendar system but there's some notifications I don't have any control over. I've turned off all Workflows and Automations related to the Calendar Scheduling and it seems that it's the notification that is sent
                                                                                                            • Posibility to add Emoticons on the Email Subject of Templates

                                                                                                              Hi I´ve tried to add Emoticons on the Subject line of Email templates, the emoticon image does show up before saving the template or if I add the Emoticon while sending an Individual email and placing it manually on the subject line. Emoticons also show
                                                                                                            • Clarity on extended contract status

                                                                                                              Clarity on “extended” status- How does Zoho “extend” a contract?  E.g. if client extends by 1 month, can the “end date” be adjusted accordingly in Zoho and tagged as “Extended” with a clear audit trail that also captures the client’s email? Note- Email
                                                                                                            • Next Page