ZeptoMail is now Zoho CPaaS.

Built on ZeptoMail’s proven email delivery infrastructure, Zoho CPaaS is expanding beyond email. You can now reach your users on more channels*—SMS, WhatsApp, and Voice — through a developer-friendly API, without rebuilding what already works.

*New channels are only available in specific DCs.

Email

Email

Receipts, confirmations, and alerts over SMTP or API, with inbox placement measured in seconds.

SMS

SMS

Time-sensitive codes and alerts straight to the handset. No app, no internet, high open rates.

WhatsApp message

WhatsApp message

Rich updates from a verified sender, with template management, media, and interactive buttons.

Voice calls

Voice calls

Programmable calls and templates for confirmations, reminders, and transactional handling on any number.

Four channels. One platform.

One platform for every critical customer communication

Reach your users wherever they are, every time. Whether your business demands the inbox, a text, a WhatsApp notification, or a voice call, Zoho CPaaS provides a purpose-built channel with dedicated deliverability infrastructure—each with its own API, all managed from one console.

SMS

Transactional SMS

Deliver time-sensitive messages directly to your users' phones. No application, no internet required. SMS achieves open rates above 90%, making it the most reliable fallback and primary channel for critical alerts. Integrate using the SMS API with the same developer-friendly conventions as the email channel.

*Available only in IN DC

Find out more

const url = "https://cpaas.zoho.com/v1.1/sms";
const token = "<token>";

const requestBody = {
  sender_key: "<sender_key>",
  template_key: "<template_key>",
  to: [{ mobile_no: "<mobile_no>" }],
  merge_info: { "<merge_key>": "<merge_value>" }
};

fetch(url, {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    Authorization: token
  },
  body: JSON.stringify(requestBody)
})
  .then((response) => response.json())
  .then((resp) => console.log("success"))
  .catch((error) => console.log(error, "error"));
                                        

curl "https://cpaas.zoho.com/v1.1/sms" \
  -X POST \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Authorization: <token>" \
  -d '{
    "sender_key": "<sender_key>",
    "template_key": "<template_key>",
    "to": [{"mobile_no": "<mobile_no>"}],
    "merge_info": {"<merge_key>": "<merge_value>"}
  }' 
                                        

using System;
using System.Net;
using System.Text;
using System.IO;
using Newtonsoft.Json.Linq;

namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
            var baseAddress = "https://cpaas.zoho.com/v1.1/sms";

            var http = (HttpWebRequest)WebRequest.Create(new Uri(baseAddress));
            http.Accept = "application/json";
            http.ContentType = "application/json";
            http.Method = "POST";
            http.PreAuthenticate = true;
            http.Headers.Add("Authorization", "<token>");
            JObject parsedContent = JObject.Parse("{'sender_key': '<sender_key>','template_key': '<template_key>','to': [{'mobile_no': '<mobile_no>'}],'merge_info': {'<merge_key>': '<merge_value>'}}");

            ASCIIEncoding encoding = new ASCIIEncoding();
            Byte[] bytes = encoding.GetBytes(parsedContent.ToString());
            Stream newStream = http.GetRequestStream();
            newStream.Write(bytes, 0, bytes.Length);
            newStream.Close();

            var response = http.GetResponse();
            var stream = response.GetResponseStream();
            var sr = new StreamReader(stream);
            var content = sr.ReadToEnd();
            Console.WriteLine(content);
        }
    }
}
                                        

import requests

url = "https://cpaas.zoho.com/v1.1/sms"

payload = "{\n\"sender_key\": \"<sender_key>\",\n\"template_key\": \"<template_key>\",\n\"to\": [{\"mobile_no\": \"<mobile_no>\"}],\n\"merge_info\": {\"<merge_key>\": \"<merge_value>\"}\n}"
headers = {
    "accept": "application/json",
    "content-type": "application/json",
    "authorization": "<token>",
}

response = requests.request("POST", url, data=payload, headers=headers)
print(response.text)
                                        

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => "https://cpaas.zoho.com/v1.1/sms",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => "{\n\"sender_key\": \"<sender_key>\",\n\"template_key\": \"<template_key>\",\n\"to\": [{\"mobile_no\": \"<mobile_no>\"}],\n\"merge_info\": {\"<merge_key>\": \"<merge_value>\"}\n}",
    CURLOPT_HTTPHEADER => array(
        "accept: application/json",
        "authorization: <token>",
        "cache-control: no-cache",
        "content-type: application/json",
    ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response;
}
?>
                                        

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import org.json.JSONObject;

public class SmsSendApi {
    public static void main(String[] args) throws Exception {
        String postUrl = "https://cpaas.zoho.com/v1.1/sms";
        BufferedReader br = null;
        HttpURLConnection conn = null;
        String output = null;
        StringBuffer sb = new StringBuffer();
        try {
            URL url = new URL(postUrl);
            conn = (HttpURLConnection) url.openConnection();
            conn.setDoOutput(true);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty("Accept", "application/json");
            conn.setRequestProperty("Authorization", "<token>");
            JSONObject object = new JSONObject("{\n\"sender_key\": \"<sender_key>\",\n\"template_key\": \"<template_key>\",\n\"to\": [{\"mobile_no\": \"<mobile_no>\"}],\n\"merge_info\": {\"<merge_key>\": \"<merge_value>\"}\n}");
            OutputStream os = conn.getOutputStream();
            os.write(object.toString().getBytes());
            os.flush();
            br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
            while ((output = br.readLine()) != null) {
                sb.append(output);
            }
            System.out.println(sb.toString());
        } catch (Exception e) {
            br = new BufferedReader(new InputStreamReader((conn.getErrorStream())));
            while ((output = br.readLine()) != null) {
                sb.append(output);
            }
            System.out.println(sb.toString());
        } finally {
            if (br != null) br.close();
            if (conn != null) conn.disconnect();
        }
    }
}         
                                        

const url = "https://cpaas.zoho.com/v1.1/whatsapp";
const token = "<Authorization-token>";

const requestBody = {
  from: "<FROM_PHONE_NUMBER>",
  to: "<TO_PHONE_NUMBER>",
  template_key: "<TEMPLATE_KEY>",
  merge_info: { "<merge_key>": "<merge_value>" }
};

fetch(url, {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    Authorization: token
  },
  body: JSON.stringify(requestBody)
})
  .then((response) => response.json())
  .then((resp) => console.log("success"))
  .catch((error) => console.log(error, "error"));
                                        

curl --location 'https://cpaas.zoho.com/v1.1/whatsapp' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: <Authorization-token>' \
  --data '{
    "from": "<FROM_PHONE_NUMBER>",
    "to": "<TO_PHONE_NUMBER>",
    "template_key": "<TEMPLATE_KEY>",
    "merge_info": {"<merge_key>": "<merge_value>"}
  }'
                                        

using System;
using System.Net;
using System.Text;
using System.IO;
using Newtonsoft.Json.Linq;

namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
            var baseAddress = "https://cpaas.zoho.com/v1.1/whatsapp";

            var http = (HttpWebRequest)WebRequest.Create(new Uri(baseAddress));
            http.Accept = "application/json";
            http.ContentType = "application/json";
            http.Method = "POST";
            http.PreAuthenticate = true;
            http.Headers.Add("Authorization", "<Authorization-token>");

            JObject parsedContent = JObject.Parse("{'from': '<FROM_PHONE_NUMBER>','to': '<TO_PHONE_NUMBER>','template_key': '<TEMPLATE_KEY>','merge_info': {'<merge_key>': '<merge_value>'}}");

            ASCIIEncoding encoding = new ASCIIEncoding();
            Byte[] bytes = encoding.GetBytes(parsedContent.ToString());
            Stream newStream = http.GetRequestStream();
            newStream.Write(bytes, 0, bytes.Length);
            newStream.Close();

            var response = http.GetResponse();
            var stream = response.GetResponseStream();
            var sr = new StreamReader(stream);
            var content = sr.ReadToEnd();
            Console.WriteLine(content);
        }
    }
}
                                        

import requests
import json

url = "https://cpaas.zoho.com/v1.1/whatsapp"

payload = json.dumps({
    "from": "<FROM_PHONE_NUMBER>",
    "to": "<TO_PHONE_NUMBER>",
    "template_key": "<TEMPLATE_KEY>",
    "merge_info": {"<merge_key>": "<merge_value>"}
})

headers = {
    "accept": "application/json",
    "content-type": "application/json",
    "authorization": "<Authorization-token>"
}

response = requests.request("POST", url, data=payload, headers=headers)
print(response.text)
                                        

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => "https://cpaas.zoho.com/v1.1/whatsapp",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => json_encode(array(
        "from" => "<FROM_PHONE_NUMBER>",
        "to" => "<TO_PHONE_NUMBER>",
        "template_key" => "<TEMPLATE_KEY>",
        "merge_info" => array(
            "<merge_key>" => "<merge_value>"
        )
    )),
    CURLOPT_HTTPHEADER => array(
        "accept: application/json",
        "authorization: <Authorization-token>",
        "cache-control: no-cache",
        "content-type: application/json"
    ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response;
}
?>
                                        

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import org.json.JSONObject;

public class WabaTemplateSendApi {
    public static void main(String[] args) throws Exception {
        String postUrl = "https://cpaas.zoho.com/v1.1/whatsapp";
        BufferedReader br = null;
        HttpURLConnection conn = null;
        String output = null;
        StringBuffer sb = new StringBuffer();
        try {
            URL url = new URL(postUrl);
            conn = (HttpURLConnection) url.openConnection();
            conn.setDoOutput(true);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty("Accept", "application/json");
            conn.setRequestProperty("Authorization", "<Authorization-token>");

            JSONObject mergeInfo = new JSONObject();
            mergeInfo.put("<merge_key>", "<merge_value>");

            JSONObject body = new JSONObject();
            body.put("from", "<FROM_PHONE_NUMBER>");
            body.put("to", "<TO_PHONE_NUMBER>");
            body.put("template_key", "<TEMPLATE_KEY>");
            body.put("merge_info", mergeInfo);

            OutputStream os = conn.getOutputStream();
            os.write(body.toString().getBytes());
            os.flush();

            br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
            while ((output = br.readLine()) != null) {
                sb.append(output);
            }
            System.out.println(sb.toString());
        } catch (Exception e) {
            br = new BufferedReader(new InputStreamReader((conn.getErrorStream())));
            while ((output = br.readLine()) != null) {
                sb.append(output);
            }
            System.out.println(sb.toString());
        } finally {
            if (br != null) br.close();
            if (conn != null) conn.disconnect();
        }
    }
}     
                                        

WhatsApp

WhatsApp business messaging

Send rich transactional messages over WhatsApp. Reach customers on the channel they check most, with the trust of a verified sender. The WhatsApp API supports template management, media attachments, and interactive buttons.

*Available across all major DCs

Find out more

voice

Automated voice calls

Trigger automated outbound voice calls for OTPs, appointment reminders, or critical alerts. Build call flow templates that let recipients confirm, reschedule, or escalate all without a live agent. Integrate using the Voice API to trigger calls programmatically from any backend event.

*Available in US, IN, EU and AU DCs

Find out more

const url = "https://cpaas.zoho.com/v1.1/voice";

const requestBody = {
    "to": "<to>",
    "from": "<from>",
    "agent_key": "<agent_key>",
    "template_key": "<template_key>",
    "merge_info": {
        "<merge_key>": "<merge_value>"
    }
};

fetch(url, {
    method: "POST",
    headers: {
        "Accept": "application/json",
        "Content-Type": "application/json",
        "Authorization": "Zoho-oauthtoken <token>"
    },
    body: JSON.stringify(requestBody)
})
.then(response => response.json())
.then(resp => console.log(resp))
.catch(error => console.log(error, "error"));
                                        

curl "https://cpaas.zoho.com/v1.1/voice" \
    -X POST \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "Authorization: Zoho-oauthtoken <token>" \
    -d '{
    "to": "<to>",
    "from": "<from>",
    "agent_key": "<agent_key>",
    "template_key": "<template_key>",
    "merge_info": {"<merge_key>": "<merge_value>"}}'
                                        

using System;
using System.Net;
using System.Text;
using System.IO;
using Newtonsoft.Json.Linq;

namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
            var baseAddress = "https://cpaas.zoho.com/v1.1/voice";

            var http = (HttpWebRequest)WebRequest.Create(new Uri(baseAddress));
            http.Accept = "application/json";
            http.ContentType = "application/json";
            http.Method = "POST";
            http.PreAuthenticate = true;
            http.Headers.Add("Authorization", "Zoho-oauthtoken <token>");
            JObject parsedContent = JObject.Parse("{'to': '<to>','from': '<from>','agent_key': '<agent_key>','template_key': '<template_key>','merge_info': {'<merge_key>': '<merge_value>'}}");
            Console.WriteLine(parsedContent.ToString());
            UTF8Encoding encoding = new UTF8Encoding();
            Byte[] bytes = encoding.GetBytes(parsedContent.ToString());

            Stream newStream = http.GetRequestStream();
            newStream.Write(bytes, 0, bytes.Length);
            newStream.Close();

            var response = http.GetResponse();

            var stream = response.GetResponseStream();
            var sr = new StreamReader(stream);
            var content = sr.ReadToEnd();
            Console.WriteLine(content);
        }
    }
}
                                        

import requests

url = "https://cpaas.zoho.com/v1.1/voice"

payload = {
    "to": "<to>",
    "from": "<from>",
    "agent_key": "<agent_key>",
    "template_key": "<template_key>",
    "merge_info": {
        "<merge_key>": "<merge_value>"
    }
}
headers = {
    "accept": "application/json",
    "content-type": "application/json",
    "authorization": "Zoho-oauthtoken <token>",
}

response = requests.request("POST", url, json=payload, headers=headers)

print(response.text)
                                        

<?php

$curl = curl_init();

$payload = array(
    "to" => "<to>",
    "from" => "<from>",
    "agent_key" => "<agent_key>",
    "template_key" => "<template_key>",
    "merge_info" => array(
        "<merge_key>" => "<merge_value>"
    )
);

curl_setopt_array($curl, array(
    CURLOPT_URL => "https://cpaas.zoho.com/v1.1/voice",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => json_encode($payload),
    CURLOPT_HTTPHEADER => array(
        "accept: application/json",
        "authorization: Zoho-oauthtoken <token>",
        "cache-control: no-cache",
        "content-type: application/json",
    ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response;
}
?>
                                        

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;

import org.json.JSONObject;

public class VoiceSendApi {
    public static void main(String[] args) throws Exception {
        String postUrl = "https://cpaas.zoho.com/v1.1/voice";
        BufferedReader br = null;
        HttpURLConnection conn = null;
        String output = null;
        StringBuffer sb = new StringBuffer();
        try {
            URL url = new URL(postUrl);
            conn = (HttpURLConnection) url.openConnection();
            conn.setDoOutput(true);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty("Accept", "application/json");
            conn.setRequestProperty("Authorization", "Zoho-oauthtoken <token>");
            JSONObject mergeInfo = new JSONObject();
            mergeInfo.put("<merge_key>", "<merge_value>");
            JSONObject object = new JSONObject();
            object.put("to", "<to>");
            object.put("from", "<from>");
            object.put("agent_key", "<agent_key>");
            object.put("template_key", "<template_key>");
            object.put("merge_info", mergeInfo);
            OutputStream os = conn.getOutputStream();
            os.write(object.toString().getBytes(StandardCharsets.UTF_8));
            os.flush();
            br = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
            while ((output = br.readLine()) != null) {
                sb.append(output);
            }
            System.out.println(sb.toString());
        } catch (Exception e) {
            br = new BufferedReader(new InputStreamReader(conn.getErrorStream(), StandardCharsets.UTF_8));
            while ((output = br.readLine()) != null) {
                sb.append(output);
            }
            System.out.println(sb.toString());
        } finally {
            try {
                if (br != null) {
                    br.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                if (conn != null) {
                    conn.disconnect();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}      
                                        

PRICING

Pricing that works like your sending volume

Pay-as-you-go payment plan
No monthly fees
No hidden charges

Zoho CPaaS still runs on a pay-as-you-go model similar to our email channel (ZeptoMail). You buy credits for the channels you use and spend them at your own pace. Every feature is available from day one, regardless of how much you send.

See pricing

Platform capabilities

Everything you need to send, track, and protect

Zoho CPaaS gives you reliable transactional delivery across email, SMS, WhatsApp, and Voice, without stitching together multiple providers. Every channel is built on ZeptoMail's delivery infrastructure and ships ready to integrate, monitor, and scale.

Everything you need to send, track, and protect

Channel-specific APIs, consistent conventions

Each channel has its own dedicated API, built for that channel's requirements. All APIs follow the same authentication pattern and response structure, so adding a new channel is straightforward once you've integrated the first.

Channel-specific APIs, consistent conventions

Unified analytics across all channels

Track delivery, open, click, and response rates for email, SMS, WhatsApp, and Voice in one dashboard. Filter by channel, date range, or sending Agent to diagnose issues fast.

Unified analytics across all channels

Agent-based message segmentation

Use Agents to separate message streams by product, environment, or team—each with its own API credentials, suppression list, and reporting view. No cross-contamination of reputation.

Agent-based message segmentation

Sender reputation management

Automatic suppression lists, bounce handling, and spam complaint monitoring protect your sending domains and phone numbers. Dedicated IPs are available for high-volume email senders.

Sender reputation management

Message templates

Create and manage pre-approved templates for WhatsApp and SMS messages, reusable HTML email templates, and call flows with dynamic variables for personalization at scale.

Message templates

Security and compliance

Zoho CPaaS operates under Zoho’s no-advertising, no third-party data sharing policy. Your data is safe behind closed doors. Industry-standard security and compliance protocols are in place at each channel level.

Security and compliance

Integrate in minutes. Scale without limits.

Zoho CPaaS is built for developers who need to move fast without trading off reliability. Channel-specific APIs, consistent conventions, and no feature paywalls mean you can go from integration to production quickly.

Developer-friendly

SMTP relay for zero-code setup. REST APIs with SDKs across major languages. Learn one channel, add the rest quickly.

No gatekeeping on features

Analytics, Agents, templates, suppression management, and dedicated IPs — all available regardless of sending volume. No Enterprise plan required.

Transparent pay-as-you-go pricing

No monthly minimums, no unused credit write-offs, no feature tiers. Buy credits per channel as you need them.

Deliverability you can depend on

Built on ZeptoMail's reliability, with proven inbox placement across millions of transactional emails. The same reliability extends to SMS, WhatsApp, and Voice.

24/7 support

Around-the-clock access to technical assistance is available over chat, phone, and email for all things Zoho CPaaS.

One console for every channel

Every channel, Agent, template, and credit balance is managed from a single console with one set of credentials—no separate dashboards per channel.

Customer stories

Email deliverability trusted by businesses that can’t afford a missed message—now across new channels.

Improves our business deals

Read testimonials
“ZeptoMail’s SMTP configuration option along with separate Agents for specific functions and mail monitoring convinced us to move to ZeptoMail for our transactional emails.ZeptoMail has allowed us to minimize the frequency of transactional reports and helped us improve our business deals with better email deliverability.

Perathuselvam S

Deputy Manager – System Support

Read testimonials

99%
emails delivered

Read testimonials
“ZeptoMail helps in improving customer relationship since it has high open rate. We can extract detailed report on deliverability. API integration is an excellent feature. It has been very good and more than 99% of the mail gets delivered.Good customer service and very minimum glitches are the main reason why I would recommend ZeptoMail to other businesses.

Vishal PS

VP | Product Head – CRM, IIFL Finance

Read testimonials

Quick and smooth integration

Read case study
“After moving to Zoho ZeptoMail, integration was quick and onboarding was very smooth. The dashboard gives clear visibility into email transactions, and reaching the technical team is much easier now. We hardly face mail flow issues anymore. The reliable email relay service, intuitive dashboard, and prompt technical support make it much easier for us to run our operations smoothly.

Dinesh Vora

IT Infrastructure Director, Parle Biscuits Pvt. Ltd

Read case study

Affordable and reliable delivery

Read testimonials
“On a daily basis we send transactional emails in large volumes for daily reports, billing, digitally signed reports , retention statements etc. ZeptoMail’s SMTP has helped us achieve affordable and reliable delivery. Ease of Dashboard access and less cost compared to other service providers made us choose ZeptoMail.

Nallenthran

IT Head, Alice Blue India

Read testimonials

Existing ZeptoMail users

ZeptoMail is now Zoho CPaaS. Your setup stays intact.

Your SMTP credentials, API tokens, sending domains, Agents, and suppression lists are fully preserved. No reconfiguration is needed. The new channels—SMS, WhatsApp, and Voice—are ready to be enabled from the same console whenever you’re ready.

Frequently asked questions

Zoho CPaaS is a Communication Platform as a Service built on ZeptoMail's proven email delivery infrastructure. It enables developers and businesses to send transactional emails, SMS, WhatsApp messages, and voice calls, each through a dedicated channel API, all managed from one console.

ZeptoMail was dedicated to transactional email. Zoho CPaaS retains everything ZeptoMail offered—like SMTP relay, email sending API, Agents, and analytics—and adds SMS, WhatsApp Business messaging, and automated voice calls, each with its own dedicated API.

A CPaaS (Communication Platform as a Service) is a cloud-based platform that lets developers embed communication channels such as email, SMS, voice, and messaging into their applications through APIs—without building or maintaining the underlying carrier or delivery infrastructure.

No, your existing SMTP credentials, API tokens, sending domains, Agents, and suppression lists carry forward without any changes. The rebranding to Zoho CPaaS does not require reconfiguration of your current email setup.

A transactional communication platform is infrastructure designed specifically to deliver automated, event-triggered messages between a business and its users, such as OTPs, order confirmations, payment receipts, and appointment reminders across multiple channels with high reliability and speed.

Reliable transactional communication across every channel.

One platform, one console, a dedicated API across all channels—email, SMS, WhatsApp and Voice.