Jains Connect now reads and writes Zoho CRM through one secure bridge.
CubeYogi built a custom middleware API for Jain Irrigation Systems. It lets the Jains Connect app get, create, update and search CRM records, with role-based access and a request log, while Zoho credentials stay on the server.
- 21
- endpoints across Leads, Notes, Attachments and Users
- 2
- token tiers: user (24 hours) and admin (15 minutes)
- 500
- team emails can be fetched in a single batch lead call
- 20 MB
- per file when uploading attachments to a record
A global irrigation company with a CRM its teams need on the move.
Jain Irrigation Systems Ltd. is an Indian multinational based in Jalgaon, Maharashtra, best known for micro-irrigation and its "more crop per drop" philosophy.
Jains Connect is the app through which Jains works with its Zoho CRM. It needed a dependable, controlled way to reach CRM data, so CubeYogi built the layer in between.

The app needed the CRM, but the CRM could not be handed to the app.
Secure access without shared keys
Putting Zoho OAuth credentials inside a mobile app is a risk. Jains needed every call to be authenticated against a real CRM user, with no CRM secrets on the device.
Different people, different powers
Most users should create, read and update. Only admins should delete leads, remove files or manage users. The rule had to be enforced by the server, not trusted to the app.
Zoho's raw API is not app-friendly
Lookup IDs, module names and v8 response shapes add work for every screen. The app needed plain requests such as "leads for this user" or "assign this lead to john@…".
The whole lead, not just a row
Teams work with notes, attached files, history and search on the same record. All of it had to be reachable from the app through one consistent interface.
Not a thin proxy. A bridge that understands Jains' data and roles.
One login, role decided by Zoho
A single call checks the user's email in the Jains_User module and issues a token matching their role. No separate user database to keep in sync.
Short-lived admin tokens
Admin and Super Admin tokens expire in 15 minutes and use a separate signing secret. Admin-only routes re-check the role as a second line of defence.
Emails instead of IDs
Assign a lead or set a reporting manager by email. The API resolves it to the right Zoho lookup record behind the scenes.
Three ways to fetch leads
By lead ID, for one Jains user, or for a batch of 2 to 500 users at once with results grouped by email and invalid addresses reported back.
Zoho-grade search
Criteria search with equals, contains, starts_with, between, and/or and more, so the app can filter by city, status, source or date range without new backend work.
Clear, consistent errors
Missing fields, wrong IDs, unknown users and Zoho faults come back with readable messages and standard 400, 401, 404 and 500 codes.
One bridge between the app and Zoho CRM v8.
The Jains Connect app only ever talks to the Bridge API. The bridge authenticates, enforces roles, calls Zoho on the app's behalf and logs what happened.
Log in once
The app sends the system API key and the user's email to /auth/login.
Check the role
The bridge looks the user up in Zoho and reads their User_Role.
Receive a token
Normal users get a 24-hour token. Admins get a 15-minute admin token.
Call an endpoint
Each request carries only the bearer token. No keys travel again.
Zoho does the work
The bridge calls Zoho v8 and returns clean JSON or a streamed file.
Activity is logged
Requests are recorded, with logs kept in Zoho CRM for the last 7 days.
Every endpoint, grouped by what the team does with it.
13 endpoints are open to every signed-in user. 8 are reserved for admins. An admin token works on all of them.
/getLeadsFetch by lead ID, for one Jains user, or for 2 to 500 users in one batch.
User/createLeadCreate a lead, optionally assigned to a user by email.
User/updateLead/:idUpdate any field, including status, email and assignee.
User/searchByCriteriaZoho criteria search with and/or, up to 10 conditions.
User/leadTimeline/:idFull activity history for a lead, with old and new field values.
User/leadCountTotal number of leads in the CRM.
User/deletedLeadsLeads currently in the CRM recycle bin, with who deleted them and when.
User/deleteLeads?ids=Bulk delete up to 100 leads in one call.
Admin/attachmentsList files on a Lead or Jains_User record with size, owner and dates.
User/attachment/downloadStreams the file straight from Zoho to the app as raw bytes.
User/attachment/uploadUpload one or more files, up to 20 MB each, with a per-file result.
User/attachment/deleteRemove an attachment from a record.
Admin/notesAll notes on a Lead or Jains_User record.
User/notesAdd a note. The title defaults to "Note" if left out.
User/notesEdit the title and content of an existing note.
User/notesBulk delete up to 100 notes, with the parent record checked first.
Admin/getusersList every user in the organisation.
Admin/getUserByEmailLook up one user by email address.
Admin/user/createCreate a Jains user. Normal users can have a reporting manager, given by email.
Admin/user/update/:idChange a user's name, email or reporting manager.
Admin/user/delete?ids=Delete one or more users in a single call.
AdminWhat the app can do now.
Jains Connect works with live CRM data through a single interface, and each person gets exactly the access their role allows.
Everyone works from live CRM data
Leads, notes, files and history are read and written in Zoho CRM itself, so there is no second copy of the data to reconcile.
Access matches the role
Normal users get a 24-hour token for everyday work. Delete and user-management actions need a short-lived admin token and a second role check.
Managers see whole teams at once
The batch lead call returns leads for up to 500 users in one response, grouped by email, with any invalid addresses listed.
Mistakes can be traced and recovered
Lead timelines show who changed what, the recycle bin list shows what was deleted and when, and requests are logged for the last 7 days.
New screens need little backend work
Search by city, status, source or date range already works through a single criteria endpoint, so the app can add filters without a new release of the bridge.


