Skip to content

Zoho: Mass update records

Zoho massUpdate.massUpdateRecords: arguments, response, policy and SDK examples.

← Mass update operations · Get started

Operation zoho.massupdaterecords

Provider route: POST /crm/v8/{module}/actions/mass_update. Alter supplies the connection’s credentials and routing.

Install @alter-ai/sdk @alter-ai/zoho with npm, or alter-sdk-zoho with pip. Supply your connected customer’s grant ID and the arguments described below.

import { App } from "@alter-ai/sdk";
import { ZohoIntegration } from "@alter-ai/zoho";
async function execute(input: Parameters<ZohoIntegration["massUpdate"]["massUpdateRecords"]>[0]) {
const app = new App({ apiKey: process.env.ALTER_API_KEY! });
try {
const provider = new ZohoIntegration(app, { grantId: process.env.PROVIDER_GRANT_ID! });
const call = await provider.massUpdate.massUpdateRecords(input);
const result = await call.wait();
return result.bodyJson();
} finally {
await app.close();
}
}
import os
from alter_sdk import App
from alter_sdk_zoho import ZohoIntegration
async def execute(arguments):
async with App(api_key=os.environ["ALTER_API_KEY"]) as app:
provider = ZohoIntegration(app, {"grant_id": os.environ["PROVIDER_GRANT_ID"]})
call = await provider.mass_update.mass_update_records(arguments)
result = await call.wait()
return result.body_json()
FieldTypePresenceDescription and constraints
$objectRootAdditional keys: not allowed
pathobjectRequired within parentAdditional keys: not allowed
path.modulestringRequired within parentOne of: Leads, Accounts, Contacts, Deals, Campaigns, Tasks, Calls, Meetings, Cases, Solutions, Products, Vendors, Price_Books, Quotes, Sales_Orders, Purchase_Orders, Invoices, Custom
bodyobjectRequired within parentRepresents the mass update request payload. The payload must include the `data` array along with either `ids` for a synchronous update or `cvid` for an asynchronous scheduled update. `ids` and `cvid` are mutually exclusive.
Additional keys: not allowed
body.cvidstringOptionalSpecify the Custom View ID whose matching records must be mass updated. Use `cvid` to schedule an asynchronous background job that processes the records in the Custom View. Use the [Get Custom View API](custom_views.yaml#$.paths./settings/custom_views.get) to get the ID of the requires custom view.

The response returns a `job_id` that can be passed to [Get Mass Update Status API](mass_update.yaml#$.paths./{module}/actions/mass_update.get) to track the progress of the scheduled job.

> Note:
> The cvid key is supported for mass update via API in the following editions:
> - Enterprise
> - Ultimate
> - CRM Plus
> - Zoho One Enterprise

Format: int64
Pattern: ^[0-9]+$
body.dataarrayRequired within parentSpecify the array of objects, where each object maps a field’s API name to the new value to be applied across the targeted records. The key must be provided along with either `ids` or `cvid`.
Maximum items: 1
body.data[]objectEach itemEach object maps one or more field API names to the new
values to be applied.


> Note:

> The Deals module allows up to three fields per object;
all other supported modules allow only one field per
object.
> Email, lookup, multi-line, layout, and line item fields
cannot be mass updated.

Additional keys: allowed
body.idsarrayOptionalSpecify the record IDs to be mass updated synchronously. Use
`ids` for non-scheduler updates that target a small batch of
records and require immediate processing. Use the [Get
Records API](record.yaml#$.paths./{module}.get) to get the
valid IDs of the required records.


> Note:

> - You can use either ids key or the cvid key, you
cannot use them both in a request.

> - Scheduler type(using record IDs):

> - You can mass update a maximum of 50,000 records in a
single API call.

> - Automation rules are triggered automatically when the
record count is less than 1000. When the record count is
greater than 1000, automation rules do not get triggered.

> - If some of the records have invalid data, only those
records will not be processed in the API call.

> - Non-scheduler type(using CVID and territory ID):

> - You can mass update a maximum of 500 records in a
single API call.

> - Automation rules such as approvals, blueprints, and
workflows are triggered automatically.

> - When you want to mass update records in a territory,
you must specify the custom view ID.

> - You cannot mass update Email, lookup fields, layout
fields, multi-line fields, and line items.

> - You can mass update up to three fields in the Deals
module and only one field in all other modules in a single
API call.

Maximum items: 500
body.ids[]stringEach itemEach string specifies the unique ID of a record to be updated.
Format: int64
body.territoryobjectOptionalSpecify the territory whose records must be mass updated. This key is valid only when you provide a Custom View ID in `cvid`.
Additional keys: not allowed
body.territory.idstringRequired within parentSpecify the unique ID of the territory. Use the [Get Territories API](territories.yaml#$.paths./settings/territories.get) to get the ID of the required territory.
Format: int64
Pattern: ^[0-9]+$
body.territory.include_childbooleanOptionalSpecify whether to include the records of the child
territories in the mass update.

Possible values:

true - Include the records of the child territories.

false - Restrict the mass update to the records in
the specified territory only.
body (anyOf 1)JSONAlternativeRepresents the synchronous variant of the request payload, provided when records are targeted by a list of record IDs. This variant does not accept the `territory` key.
body (anyOf 1).territoryJSONOptionalEnsures that the `territory` key is not provided along with the `ids` key.
body (anyOf 2)JSONAlternativeRepresents the scheduled variant of the request payload, provided when records are targeted by a Custom View ID. This variant accepts the optional `territory` key.

Response media type: application/json. The table describes the pinned successful response. Referenced models link to their complete fields.

FieldTypePresenceDescription and constraints
$JSONRoot
$ (anyOf 1)objectAlternativeRepresents the response wrapper returned when the mass update operation is accepted, containing one or more outcome entries for the processed records or the scheduled job.
Additional keys: not allowed
$ (anyOf 1).dataarrayRequired within parentRepresents the array that contains one response object per record processed or one entry describing the scheduled job.
Maximum items: 500
$ (anyOf 1).data[]objectEach itemRepresents a single response entry, containing either the scheduled job details (when the request was made using `cvid`) or the updated record details (when the request was made using `ids`).
Additional keys: not allowed
$ (anyOf 1).data[].codestringRequired within parentRepresents the result code for the individual entry.
Known values: SUCCESS
$ (anyOf 1).data[].detailsobjectRequired within parentRepresents additional details about the response.
Additional keys: allowed
$ (anyOf 1).data[].details (anyOf 1)objectAlternativeRepresents the scheduler-type details, returned when the mass update is scheduled via a Custom View ID. Contains the `job_id` that can later be used to track the job’s progress using the [Get Mass Update Status API](mass_update.yaml#$.paths./{module}/actions/mass_update.get).
Additional keys: not allowed
$ (anyOf 1).data[].details (anyOf 1).job_idstringRequired within parentRepresents the unique ID of the scheduled mass update job. Pass this value as the `job_id` query parameter to [Get Mass Update Status API](mass_update.yaml#$.paths./{module}/actions/mass_update.get) to retrieve the job’s current status and record counts.
Format: int64
Pattern: ^[0-9]+$
$ (anyOf 1).data[].details (anyOf 2)objectAlternativeRepresents the non-scheduler-type details, returned when the API processes individual records synchronously.
Additional keys: not allowed
$ (anyOf 1).data[].details (anyOf 2).Created_ByobjectRequired within parentRepresents the user who originally created the record.
Additional keys: not allowed
$ (anyOf 1).data[].details (anyOf 2).Created_By.idstringRequired within parentRepresents the unique ID of the user who created the record.
Format: int64
Pattern: ^[0-9]+$
$ (anyOf 1).data[].details (anyOf 2).Created_By.namestringRequired within parentRepresents the display name of the user who created the record.
Format: string
$ (anyOf 1).data[].details (anyOf 2).Created_TimestringRequired within parentRepresents the date and time, in ISO 8601 format, when the record was originally created.
Format: date-time
$ (anyOf 1).data[].details (anyOf 2).Modified_ByobjectRequired within parentRepresents the user who performed the mass update on the record.
Additional keys: not allowed
$ (anyOf 1).data[].details (anyOf 2).Modified_By.idstringRequired within parentRepresents the unique ID of the user who modified the record.
Format: int64
Pattern: ^[0-9]+$
$ (anyOf 1).data[].details (anyOf 2).Modified_By.namestringRequired within parentRepresents the display name of the user who modified the record.
Format: string
$ (anyOf 1).data[].details (anyOf 2).Modified_TimestringRequired within parentRepresents the date and time, in ISO 8601 format, when the record was last modified by the mass update operation.
Format: date-time
$ (anyOf 1).data[].details (anyOf 2).idstringRequired within parentRepresents the unique ID of the record that the mass update operation modified.
Format: int64
Pattern: ^[0-9]+$
$ (anyOf 1).data[].messagestringRequired within parentRepresents the message describing the result of the operation.
Format: string
$ (anyOf 1).data[].statusstringRequired within parentRepresents the status of the operation for this entry.
Known values: success
$ (anyOf 2)objectAlternativeRepresents the response wrapper returned when a non-scheduler-type mass update results in mixed responses, containing at least one successfully updated record and at least one failed record.
Additional keys: not allowed
$ (anyOf 2).dataarrayRequired within parentRepresents the array that contains one response object per record processed, indicating whether the mass update succeeded or failed for that record.
Maximum items: 500
Minimum items: 2
$ (anyOf 2).data[]objectEach itemRepresents a single per-record entry, containing either the details of the updated record or the error that prevented the record from being updated.
Additional keys: not allowed
$ (anyOf 2).data[].codestringRequired within parentRepresents the result code for the individual
record.

Possible values:

SUCCESS - The record was updated successfully.

MANDATORY_NOT_FOUND - A required property is missing
from the payload for the record.

INVALID_DATA - The request data is invalid for the
record.

MAPPING_MISMATCH - The provided value violates a
field mapping relationship for the record.

RECORD_LOCKED - The record is locked and cannot be
updated.

CONVERTED_RECORD - The record has already been
converted and cannot be updated.

Known values: SUCCESS, MANDATORY_NOT_FOUND, INVALID_DATA, MAPPING_MISMATCH, RECORD_LOCKED, CONVERTED_RECORD
$ (anyOf 2).data[].detailsobjectRequired within parentRepresents additional details about the response. For an updated record, it contains the record ID along with its creation and modification details. For a failed record, it contains the details of the failure, such as the ID of the record that could not be updated.
Additional keys: allowed
$ (anyOf 2).data[].messagestringRequired within parentRepresents the message describing the result of the operation for this record.
Maximum length: 255
$ (anyOf 2).data[].statusstringRequired within parentRepresents the status of the operation for this
record.

Possible values:

success - The record was updated.

error - The record was not updated.

Known values: success, error
$ (anyOf 2).data (allOf 1)JSONAll variants applyRepresents the constraint ensuring that the response contains at least one successfully updated record.
$ (anyOf 2).data (allOf 2)JSONAll variants applyRepresents the constraint ensuring that the response contains at least one record that failed to update.

SDK function policy ID: zoho.massupdaterecords. Catalog operation: massUpdateRecords. Rules can name either ID; function rules distinguish managed calls and conservatively cover raw calls sharing the route. Existing grant permissions and policy rules apply. wait() returns an immediate result or waits for a required approval; it never approves the request itself. Persist the approval ID to resume after a restart.

Provider errors retain their response; JSON decoding raises ProviderAPIError for provider failures. ManagedOperationError identifies contract/input/retention errors. See error handling and provider-specific behavior. Sensitive input may be refused before approval storage. A decoding error never resubmits a write.

Official provider source

Report an issue with this page

Necessary

Required for sign-in, security, authorization, and remembering your choices.

Always active

Analytics

Helps us understand which product and documentation features are useful.

Performance diagnostics

Uses performance tracing and privacy-masked session replay to diagnose problems.

You can change these choices at any time from Cookie settings.