Merge and Deliver via Webhook
Merges data into a Zoho Writer document template and delivers the merged output to a webhook endpoint.
Merge Data: Provide exactly one of merge_data, merge_data_csv_content, merge_data_json_content, merge_data_csv_url, merge_data_json_url, or record_id.
Endpoints
OAuth Scope
curl --request POST \
--url https://www.zohoapis.com/writer/api/v1/documents/a1b2c3d4e5f6g7h8i9/merge/webhook \
--header 'Authorization: Zoho-oauthtoken d92d4xxxxxxxxxxxxx15f52' \
--header 'content-type: multipart/form-data' \
-F 'webhook={
"invoke_url": "https://zylker.com/writer/callback",
"invoke_period": "oncomplete"
}' \
-F 'output_settings={
"format": "pdf"
}' \
-F 'merge_to=separatedoc' \
-F 'merge_data={
"data": [
{
"customer_name": "John Miller",
"customer_email_address": "john.miller@zylker.com",
"invoice_number": "INV-2026-045",
"items": [
{
"items.item_code": "SKU-1001",
"items.item_name": "Aria Smartwatch S2",
"items.item_images": [
"https://workdrive.zoho.com/external/sample-image-id-1/download?directDownload=True",
"https://workdrive.zoho.com/external/sample-image-id-2/download?directDownload=True"
],
"items.item_replacement": "Yes"
}
]
}
]
}' \
-F 'merge_data_csv_content=@file_path' \
-F 'merge_data_json_content=@file_path' \
-F 'merge_data_csv_url=https://zylker.com/merge-data.csv' \
-F 'merge_data_json_url=https://zylker.com/merge-data.json' \
-F 'record_id=4876000000123456' \
-F 'test_mode=true'Path Parameters
The unique identifier of the Zoho Writer document template.
Request Body
multipart/form-dataSpecifies the webhook endpoint and delivery timing for the merged documents.
Hide Sub-Attributes
The URL to which the merged documents are posted.
Controls when merged documents are posted to the webhook. oncomplete posts all documents after the full merge run completes. oneveryrecord posts each document individually as it is produced.
Controls the file format and access protection of the merged document.
Hide Sub-Attributes
The file format of the merged document.
An optional password to protect the merged document.
Applies permission-based restrictions to the merged document. Applicable only when format is pdf; ignored for other formats. When present, both password and permissions are required.
Hide Sub-Attributes
The password required to override the applied document restrictions.
The list of actions to restrict in the merged document. document.copy restricts copying content, document.print restricts printing, document.edit restricts editing, and document.fill restricts filling form fields. Any action not listed remains unrestricted.
separatedoc produces a separate merged document for each record. singledoc combines all records into a single merged document.
Inline merge data as a JSON object. Must contain a data key whose value is a JSON array of records, each being a key-value map matching the template's merge fields. For a subform field, use the subform's name as the key, mapped to an array of row objects; each row's keys follow the <subform_name>.<field_name> convention (e.g. items.item_code).
Hide Sub-Attributes
Array of records used to populate the template merge fields.
A CSV file uploaded in the request body, up to 2 MB. Each row represents one merge record. Supported formats: csv.
A JSON file uploaded in the request body, up to 2 MB. Must contain an array of merge records. Supported formats: json.
A publicly accessible URL pointing to a CSV file of merge records, up to 2 MB. Supported formats: csv.
A publicly accessible URL pointing to a JSON file of merge records, up to 2 MB. Supported formats: json.
A record identifier from Zoho CRM, Zoho Creator, or Bigin. When provided, the API fetches merge data internally from the respective service.
When true, the merge runs without consuming credit points. The output document will include a watermark. Limited to 50 merges per day per organization.
// Note: payload contains multiple type attributes
// type: object
webhook = {
"invoke_url": "https://zylker.com/writer/callback",
"invoke_period": "oncomplete"
}
// type: object
output_settings = {
"format": "pdf"
}
// type: string
merge_to = separatedoc
// type: object
merge_data = {
"data": [
{
"customer_name": "John Miller",
"customer_email_address": "john.miller@zylker.com",
"invoice_number": "INV-2026-045",
"items": [
{
"items.item_code": "SKU-1001",
"items.item_name": "Aria Smartwatch S2",
"items.item_images": [
"https://workdrive.zoho.com/external/sample-image-id-1/download?directDownload=True",
"https://workdrive.zoho.com/external/sample-image-id-2/download?directDownload=True"
],
"items.item_replacement": "Yes"
}
]
}
]
}
// type: file
merge_data_csv_content = <file>
// type: file
merge_data_json_content = <file>
// type: string(uri)
merge_data_csv_url = https://zylker.com/merge-data.csv
// type: string(uri)
merge_data_json_url = https://zylker.com/merge-data.json
// type: string
record_id = 4876000000123456
// type: boolean
test_mode = true {
"merge_report_data_url": "https://writer.zoho.com/writer/api/v1/merge/job/0tq5n465132106580437abe99b6f56f2b0c85/data",
"merge_report_url": "https://writer.zoho.com/writer/v1/mailmerge/job/0tq5n465132106580437abe99b6f56f2b0c85",
"records": [
{
"data": {
"name": "Amelia",
"email": "amelia@zylker.com"
},
"download_link": "https://writer.zoho.com/writer/api/v1/documents/a1b2c3d4e5f6g7h8i9/merge/download/gas3hfnkju456mndhjku987b",
"status": "inprogress"
}
]
}
© 2026, Zoho Corporation Pvt. Ltd. All Rights Reserved.