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.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.
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. |
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 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"
}
]
}