Send Email API
The transmission API lets you to send emails to numerous recipients.
Note: Transmission refers to a campaign. For example, transmission_id means the campaign's unique ID.
Request Type
POST
Request URL
https://campaigns.zoho.com/emailapi/v2/transmission
Content-Type
application/json
List of Request Body Attributes
Parameters | Data Type | Description |
transmission_name | String | A user-defined identifier for the transmission (Max length: 150). |
recipients | JSON array | An array of recipient objects containing information about who will receive the message. Each object may include merge data and additional metadata. |
recipients[].address | String | Email address of the recipient (Max length: 100). |
| recipients[].name | String | Optional display name associated with the recipient’s address. (Max. length: 100). |
| recipients[].additional_data | JSON Object | Optional JSON object containing arbitrary user-defined metadata about the recipient (e.g., phone number, country, or internal identifiers). |
| recipients[].merge_data | JSON Object | A JSON object containing key-value pairs used for merge tag substitution in the email subject or content. Keys correspond to merge tags defined in the message, and values replace those tags during rendering. Example: $[first_name|Customer]$ substitutes first_name or the default value Customer. |
| recipient_list_id | String | ID referencing a pre-saved recipient list. When provided, the system loads recipients from the associated list instead of requiring an explicit recipients array in the request payload. |
| options | JSON Object | Optional configuration settings that control email processing and delivery behaviour. |
| options.open_tracking | String | Enables or disables open-tracking for the transmission. Values: enabled/disabled Default: enabled |
| options.click_tracking | String | Enables or disables click-tracking for the transmission. Values: enabled/disabled Default: enabled |
| options.schedule_at | Long | Timestamp (in milliseconds) representing when the message should be scheduled for delivery. If omitted, the message is delivered immediately. |
| content | JSON Object | Defines the email content, sender identity, and related rendering rules. |
| content.from | JSON Object | Specifies the sender of the email. |
| content.from.address | String | Required email address of the sender (Max length: 100). |
| content.from.name | String | Optional display name of the sender (Max length: 100). |
| content.reply_to | String | Optional reply-to address. Replies to the email will be directed to this address instead of the sender (Max length: 100). |
content.subject | String | Email subject line. Supports merge tags for personalisation. (Max length: 200). |
content.html | String | HTML version of the email body. Merge tags within the content are replaced using merge_data. |
content.text | String | Plain-text version of the email body. Merge tags are also supported in this field. If content.html node is provided, text need not be specified as it is automatically generated. |
| content.attachments | JSON Array | List of files to be sent as email attachments. Each attachment must include a file name and Base64-encoded file data. |
| content.attachments[].name | String | File name of the attachment, including extension. e.g., report.pdf (Max length: 100) |
| content.attachments[].data | String | Base64-encoded content of the file. |
| content.template_id | String | ID referencing a pre-saved email template. When provided, the system loads HTML and/or text content from the stored template instead of requiring content.html and content.text fields in the payload. |
List of Response Body Attributes
| Parameters | Data Type | Description |
| rejected_recipients | Integer | The count of the recipients rejected by our API. Rejection maybe due to invalid syntax. |
| accepted_recipients | Integer | The count of the recipients accepted by our API. |
| response | JSON Object | Contains the response details of the API. |
| code | Integer | Success or failure code. |
| message | String | Success or failure message returned by the API. |
| transmission_id | String | Unique ID of the transmission. |
| errors | JSON Array | Contains the error details of the API such as 'code' and 'message'. |
Unsubscribe Link
Unsubscribe links can be included in the content using an anchor tag with the attribute data-zcea-unsubcribe="1". Refer to the 'Sample Request Payload for transmission with unsubscribe link' to your right. If you had configured an unsubscribe webhook, it will be called when a contact clicks this link. This webhook will contain the contact details, from which you can get the contact email and add them to your suppression list using our Suppression API.
Attachments
- Attachments are supported only for transmissions that include more than one recipient.
- Attachments must be Base64-encoded.
- File names must include an extension.
- Maximum total attachment size per transmission: 5 MB.
- Maximum no. of attachments: 5
- Attachments are validated for file type and size. Unsupported or restricted file types may be rejected for security reasons.
Possible Error Cases
Error Codes | Description |
400001 | Transmission name not provided. |
400002 | The recipient list is not provided. |
400003 | Content details are not provided. |
400004 | Sender details are not provided. |
400005 | The sender address is not provided. |
400006 | Subject is not provided. |
400007 | Content body is not provided. |
400008 | Invalid sender address. |
400009 | The sender domain is not authenticated. Please authenticate your domain before sending emails. |
400011 | Recipient limit exceeded. |
| 400012 | CNAME record not verified for bounce domain. |
400013 | None of the recipients are valid. |
| 400015 | Your account license has expired. |
| 400016 | You do not have sufficient credits to perform this action. |
| 400017 | Schedule time is lesser than current time. |
| 400024 | Invalid tracking option. |
| 400025 | Invalid Reply-To address. |
| 400026 | Your trial period has ended. |
| 400027 | The transmission name exceeds the maximum allowed length. |
| 400028 | The subject exceeds the maximum allowed length. |
| 400029 | The from address exceeds the maximum allowed length. |
| 400030 | The from name exceeds the maximum allowed length. |
| 400031 | The reply-to address exceeds the maximum allowed length. |
| 400032 | The content exceeds the maximum allowed length. |
| 400033 | No attachments provided. |
| 400034 | One or more attachments missing name. |
| 400035 | One or more attachments have invalid name. |
| 400036 | Name too long for one or more attachments. |
| 400037 | One or more attachments missing data. |
| 400038 | One or more attachments missing file extension. |
| 400039 | One or more attachments have invalid type. |
| 400040 | Attachments limit exceeded. You cannot add more than 5 attachments. |
| 400041 | Total attachments size exceeds the allowed limit. You cannot add more than 5 MB. |
| 400042 | Attachments are not supported for Single Recipient Transmissions. |
| 400043 | The name of one or more recipients exceeds the maximum allowed length. |
Sample Request Payload for Transmission with inline content
Copied{
"transmission_name": "hello_customer",
"recipients": [
{
"address": "lucy@example.campaigns.zoho.com",
"name": "Lucy Girea",
"additional_data": {
"phone" : "+919876543210",
"country": "CA"
},
"merge_data": {
"first_name": "Lucy"
}
}
],
"content": {
"from": {
"address": "aron@marketing.campaigns.zoho.com",
"name": "Aron Fletcher"
},
"subject": "Hello $[first_name|Customer]$, Welcome to Zylker",
"html": "<html><body>Welcome $[first_name|Customer]$, your content here!<br></body></html>",
}
}
Sample Request Payload for Transmission with pre-configured recipient list
Copied{
"transmission_name": "hello_customer",
"recipient_list_id": "8000000097065",
"content": {
"from": {
"address": "aron@vnaash.in",
"name": "Aron Fletcher"
},
"subject": "Welcome to Zylker 2",
"text": "Welcome, $[first_name]$, your content here!"
}
}Sample Request Payload for Transmission with template content
Copied{
"transmission_name": "hello_customer",
"recipients": [
{
"address": "lucy@example.campaigns.zoho.com",
"additional_data": {
"phone": "+919876543210",
"country": "CA"
},
"merge_data": {
"first_name": "Lucy"
}
}
],
"content": {
"from": {
"address": "aron@vnaash.in",
"name": "Aron Fletcher"
},
"subject": "Welcome to Zylker 2",
"template_id": "8000000124003"
}
}Sample Request Payload for scheduled transmission
Copied{
"transmission_name": "hello_customer",
"recipients": [
{
"address": "lucy@example.campaigns.zoho.com",
"name": "Lucy Girea",
"additional_data": {
"phone": "+919876543210",
"country": "CA"
},
"merge_data": {
"first_name": "Lucy"
}
}
],
"options": {
"schedule_at": 1728366058000
},
"content": {
"from": {
"address": "aron@marketing.campaigns.zoho.com",
"name": "Aron Fletcher"
},
"subject": "Welcome to Zylker",
"html": "<html><body>Welcome $[first_name|Customer]$, your content here!<br></body></html>"
}
}Sample Request Payload for transmission with tracking disabled
Copied{
"transmission_name": "hello_customer",
"recipients": [
{
"address": "lucy@example.campaigns.zoho.com",
"name": "Lucy Girea",
"additional_data": {
"phone": "+919876543210",
"country": "CA"
},
"merge_data": {
"first_name": "Lucy"
}
}
],
"options": {
"open_tracking": "disabled",
"click_tracking": "disabled"
},
"content": {
"from": {
"address": "aron@marketing.campaigns.zoho.com",
"name": "Aron Fletcher"
},
"subject": "Welcome to Zylker",
"html": "<html><body>Welcome $[first_name|Customer]$, your content here!<br></body></html>"
}
}Sample Request Payload for transmission with unsubscribe link
Copied{
"transmission_name": "hello_customer",
"recipients": [
{
"address": "lucy@example.campaigns.zoho.com",
"additional_data": {
"phone": "+919876543210",
"country": "CA"
},
"merge_data": {
"first_name": "Lucy"
}
}
],
"content": {
"from": {
"address": "aron@vnaash.in",
"name": "Aron Fletcher"
},
"subject": "Welcome to Zylker 2",
"html": "<html><body>Welcome $[first_name|Customer]$, your content goes here <br/><br/> <a href=\"https://zylker.com.com/unsubscribe\" data-zcea-unsubscribe=\"1\" title=\"Unsub\">Unsubscribe</a></body></html>"
}
}Sample Request Payload for transmission with reply-to address
Copied{
"transmission_name": "hello_customer",
"recipients": [
{
"address": "lucy@example.campaigns.zoho.com",
"name": "Lucy Girea",
"additional_data": {
"phone": "+919876543210",
"country": "CA"
},
"merge_data": {
"first_name": "Lucy"
}
}
],
"content": {
"from": {
"address": "aron@marketing.campaigns.zoho.com",
"name": "Aron Fletcher"
},
"reply_to": "aron@reply.campaigns.zoho.com",
"subject": "Welcome to Zylker",
"html": "<html><body>Welcome $[first_name|Customer]$, your content here!<br></body></html>"
}Sample Request Payload for transmission with attachments
Copied{
"transmission_name": "hello_customer",
"recipients": [
{
"address": "lucy@example.campaigns.zoho.com",
"name": "Lucy Girea",
"additional_data": {
"phone": "+919876543210",
"country": "CA"
},
"merge_data": {
"first_name": "Lucy"
}
},
{
"address": "andrew@example.campaigns.zoho.com",
"name": "Andrew Smith",
"additional_data": {
"phone": "+11234567890",
"country": "US"
},
"merge_data": {
"first_name": "Andrew"
}
}
],
"content": {
"from": {
"address": "aron@marketing.campaigns.zoho.com",
"name": "Aron Fletcher"
},
"reply_to": "aron@reply.campaigns.zoho.com",
"subject": "Welcome to Zylker",
"html": "<html><body>Welcome $[first_name|Customer]$, your content here!<br></body></html>",
"attachments": [
{
"name": "invoice.pdf",
"data": "JVBERi0xLjQKJc..."
},
{
"name": "notes.txt",
"data": "SGVsbG8gd29ybGQ="
}
]
}Sample Response - Success
Copied{
"rejected_recipients": 1,
"accepted_recipients": 1,
"response": {
"code": 200001,
"message": "Your transmission has been scheduled successfully"
},
"transmission_id": "146429000000058021"
}Sample Response - Failure
Copied{
"errors": [
{
"code": 400012,
"message": "CNAME not verified for bounce domain"
},
{
"code": 400009,
"message": "Sender domain not authenticated. Please authenticate your domain before sending"
}
]
}