What makes ZeptoMail special?
SendGrid is a cloud-based email delivery and management service that helps businesses send marketing emails and transactional emails. It offers several monthly subscription options, each with its own set of features included in the plan.
But if transactional emails are your focus, why should you pay for unused features and emails every month?
With Zoho ZeptoMail, start paying for only what you use. It’s built specifically for sending transactional emails to enhance email delivery speed and inbox placement. ZeptoMail offers a pay-as-you-go pricing model with access to all features regardless of what you pay.
Get started with Zoho ZeptoMail.
Transition smoothly from SendGrid to Zoho ZeptoMail using this four-step guide.
Sign up for Zoho ZeptoMail.
Enter the relevant credentials and Sign up for Zoho ZeptoMail.
Right after you sign up, check your inbox for a verification email sent to validate your email address.
After verifying your account, you’ll need to enable two-factor authentication by selecting from a list of TFA options.
Add and verify your domain
Once your account is verified, you can add your domain address and bounce address.
To verify your domain, you need to set up DKIM and CNAME records in your DNS settings.
Get to know more from the step-by-step guide on how to add and verify your domain.
Modify one line of your existing code.
Change one line of your API code to make the switch from SendGrid to ZeptoMail.
Send an API request to https://api.zeptomail.com/v1.1/sg/email
To authorize your request, add the Send mail token in the header section.
Welcome aboard!
Welcome to ZeptoMail. Start sending your transactional emails from ZeptoMail. Happy email sending!
![Sign up for Zoho ZeptoMail](http://www.zohowebstatic.com/sites/zweb/images/zeptomail/migration/step-1.jpg)
![Domain addition and verification](http://www.zohowebstatic.com/sites/zweb/images/zeptomail/migration/step-2.jpg)
curl "https://api.zeptomail.com/v1.1/sg/email" \
-X POST \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Zoho-enczapikey ***" \
-d '{
"headers" : { "key" : "headers" },
"from": { "email": "rebecca@example.com", "name": "Rebecca" },
"personalizations" : [ { "to" : [ { "name" : "John Doe", "email" : "john@example.com" },{ "name" : "Julia Doe", "email" : "julia@example.com" } ],
"cc" : [ { "name" : "Jane", "email" : "jane@example.com" } ],
"bcc" : [ { "name" : "Jim", "email" : "jim@example.com" } ] },
{"to" : [ { "name" : "Janice", "email" : "janice@example.com" } ],
"bcc" : [ { "name" : "Jordan", "email" : "jordan@example.com" } ] } ],
"subject" : "Order confirmation",
"content" : [ { "type" : "html/text", "value" : "Your order is confirmed!" } ],
"reply_to" : { "email": "customer_service@example.com", "name": "Customer Service Team" } }'
import fetch from 'node-fetch';
fetch("https://api.zeptomail.com/v1.1/sg/email", {
body: JSON.stringify({
"personalizations": [
{
"to": [
{
"email": "john@example.com",
"name": "John"
},
{
"email": "julia@example.com",
"name": "Julia"
}
],
"cc": [
{
"email": "jane@example.com",
"name": "Jane"
}
],
"bcc": [
{
"email": "jim@example.com",
"name": "Jim"
}
],
},
{
"to": [
{
"email": "janice@example.com",
"name": "Janice"
}
],
"bcc": [
{
"email": "jordan@example.com",
"name": "Jordan"
}
]
}
],
"from": {
"email": "rebecca@example.in",
"name": "Rebecca"
},
"reply_to": {
"email": "customer_service@example.com",
"name": "Customer Service Team"
},
"subject": "Order Confirmation",
"content": [
{
"type": "text/html",
"value": "Your order is confirmed!"
}
],
"attachments": [
{
"content": "[base64-content]",
"filename": "index.html",
"type": "text/html",
"disposition": "attachment"
}
],
}),
method: "POST",
headers: {
"Authorization": "Zoho-enczapikey ***",
"Accept": "application/json",
"Content-Type": "application/json"
}
}).then(async (resp) => {
let result = await resp.json()
console.log(result)
}).catch((err) => {
console.log(err)
})
using System;
using System.Net;
using System.Text;
using System.IO;
using System.Net.Http;
using Newtonsoft.Json;
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://api.zeptomail.com/v1.1/sg/email";
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-enczapikey ***");
JObject parsedContent = JObject.Parse("{
'headers' : {'key' : 'headers'},
'from': {
'email': 'rebecca@example.com',
'name': 'Rebecca'
},
'personalizations': [
{
'to': [
{
'email': 'john@example.com',
'name': 'John'
},
{
'email': 'julia@example.com',
'name': 'Julia'
}
],
'cc': [
{
'email': 'jane@example.com',
'name': 'Jane'
}
],
'bcc': [
{
'email': 'jim@example.com',
'name': 'Jim'
}
],
},
{
'to': [
{
'email': 'janice@example.com',
'name': 'Janice'
}
],
'bcc': [
{
'email': 'jordan@example.com',
'name': 'Jordan'
}
]
}
],
'subject' : 'Order Confirmation',
'content' : [
{
'type' : 'html/text',
'value' : 'Your order is confirmed!'
}
],
'reply_to' : {
'email': 'customer_service@example.com',
'name': 'Customer Service Team'
}
}");
Console.WriteLine (parsedContent.ToString());
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://api.zeptomail.com/v1.1/sg/email"
payload = "{ \"headers\" : { \"key\" : \"headers\" }, \"from\": { \"email\": \"rebecca@example.in\", \"name\": \"Rebecca\" }, \"personalizations\" : [ { \"cc\" : [ { \"name\" : \"Jane\", \"email\" : \"jane@example.com\" } ], \"bcc\" : [ { \"name\" : \"Jim\", \"email\" : \"jim@example.com\" } ], \"to\" : [ { \"name\" : \"John\", \"email\" : \"john@example.com\" },{ \"name\" : \"Julia\", \"email\" : \"julia@example.com\" } ] }, {\"to\" : [ { \"name\" : \"Janice\", \"email\" : \"janice@example.com\" }], \"bcc\" : [ { \"name\" : \"Jordan\", \"email\" : \"jordan@example.com\" } ] }], \"subject\" : \"Order confirmation\", \"content\" : [ { \"type\" : \"html/text\", \"value\" : \"Your order is confirmed!\" } ], \"reply_to\" : { \"email\": \"customer_service@example.com\", \"name\": \"Customer Service Team\" } }"
headers = {
'accept': "application/json",
'content-type': "application/json",
'authorization': "Zoho-enczapikey ***",
}
response = requests.request("POST", url, data=payload, headers=headers)
print(response.text)
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.zeptomail.com/v1.1/sg/email",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => '{
"headers": {
"[key]": "[headers]"
},
"from": {
"email": "rebecca@example.in",
"name": "Rebecca"
},
"personalizations": [
{
"to": [
{
"email": "john@example.com",
"name": "John"
},
{
"email": "julia@example.com",
"name": "Julia"
}
],
"cc": [
{
"email": "jane@example.com",
"name": "Jane"
}
],
"bcc": [
{
"email": "jim@example.com",
"name": "Jim"
}
],
},
{
"to": [
{
"email": "janice@example.com",
"name": "Janice"
}
],
"bcc": [
{
"email": "jordan@example.com",
"name": "Jordan"
}
]
}
],
"subject": "Order Confirmation",
"content": [
{
"type": "html/text",
"value": "Your order is confirmed!"
}
],
"reply_to": {
"email": "customer_service@example.com",
"name": "Customer Service Team"
}
}'
CURLOPT_HTTPHEADER => array(
"accept: application/json",
"authorization: Zoho-enczapikey ***",
"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 JavaSendapi {
public static void main(String[] args) throws Exception {
String postUrl = "https://api.zeptomail.com/v1.1/sg/email";
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-enczapikey ***");
JSONObject object = new JSONObject("{\"headers\" : { \"key\" : \"headers\" }, \"from\": { \"email\": \"rebecca@example.in\", \"name\": \"Rebecca\" }, \"personalizations\" : [ { \"cc\" : [ { \"name\" : \"Jane\", \"email\" : \"jane@example.com\" } ], \"bcc\" : [ { \"name\" : \"Jim\", \"email\" : \"jim@example.com\" } ],\"to\" : [ { \"name\" : \"John\", \"email\" : \"john@example.com\" }, { \"name\" : \"Julia Doe\", \"email\" : \"julia@example.com\"} ] },{\"to\" : [ { \"name\" : \"Janice\", \"email\" : \"janice@example.com\" }],\"bcc\" : [ { \"name\" : \"Jordan\", \"email\" : \"jordan@example.com\" } ] } ], \"subject\" : \"Order Confirmation\", \"content\" : [ { \"type\" : \"html/text\", \"value\" : \"Your order is confirmed!\" } ], \"reply_to\" : { \"email\": \"customer_service@example.com\", \"name\": \"Customer Service Team\" } }");
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 {
try {
if (br != null) {
br.close();
}
} catch (Exception e) {
e.printStackTrace();
}
try {
if (conn != null) {
conn.disconnect();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
![Send transactional emails from ZeptoMail](http://www.zohowebstatic.com/sites/zweb/images/zeptomail/migration/step-4.jpg)
How is ZeptoMail different from SendGrid?
Here are some concepts and terminologies to help you navigate Zoho ZeptoMail.
- Email Segments
- DNS Requirements
- Attachment Management
- User Management
- User Activity Logs
- Measure
- Suppress Emails
- Email Logs
- Email Trackers
- Logs and Content Retention
- Subscription
- Support
- IPs
- Webhooks
- Outbound → SubusersSubusers can be created to segment different types of emails you send.(An upgrade is required to use this feature.)
- Settings → Sender Authentication → Domain AuthenticationProvide your CNAME to authenticate your domain manually under DNS records.
- TeammatesManage ownership of multi-users and their accessibility in an account.(Only 1 teammate can be added using the Essentials Plan. An upgrade is required to add more teammates.)
- StatsGet reports of opens, clicks, delivered, bounces, and spam reports. You can also get insightful reports to analyze overall performance.
- Settings → Suppression SettingsBounces, spam, unsubscribes, and invalid addresses are added to suppressions manually or automatically.
- Email Activity FeedGet a preview of recent email activity associated with your account or any subusers.
- Settings → Tracking SettingsEnable click and open tracking for sending domains.
- Essentials Plan3 days of email activity retention.(An upgrade is required to increase up to 30 days of email activity storage.)
- For 50,000 emails$19.95 per month + additional charges for access to all features.(Free for 30 days.)
- 24/7 ticket and chat support for the basic plan.(An upgrade is required for live phone support.)
- IP Access ManagementInclude a list of IPs that will be used to send emails from your account.
- Settings → WebhooksAdd webhooks to domains to receive notifications on events linked to the messages you send.(An upgrade is required to use Webhooks.)
- zeptomail
- Mail AgentsMail Agents help categorize your emails by type, purpose, application, and more.(All users can use this feature.)
- Domains → DNS SettingsSecure your domain’s authenticity by setting up DKIM and CNAME records in your DNS settings
- File CacheSave storage by uploading files to the File Cache. Use the File Cache key when sending emails through the API.File Cache supports up to 1GB of storage per account.
- Manage UsersMultiple users and their ownership can be managed in an account.(A total of 30 users can be added to your ZeptoMail account. No upgrade is required.)
- Activity LogsView the actions performed by various users in your ZeptoMail account.1 year of activity log retention.
- ReportsGet back-to-back reports of sent, delivered, soft bounces, hard bounces, process failed, opens, clicks, and custom reports for all users.
- Suppression ListCertain types of hard bounces are automatically added to the suppression list. Additionally, you have the option to suppress specific email addresses and domains manually.
- Processed EmailsWithin the processed emails section, you’ll find the sent emails listed in the order they were processed.
- Email TrackingYou must enable open and click tracking for each Mail Agent in ZeptoMail to track sent emails.
- Any Number of Credits60 days of processed email data retention and content retention.
- For 50,000 emails$12.50 (5 credits) access all features for all users.1 credit free (10,000 emails) for6 months.
- 24/7 comprehensive technical assistance available via phone and chat for all users.
- IP RestrictionsIP addresses that are used to send emails can be added to this list to prevent any malicious activity.
- Mail Agent → WebhooksActivate webhooks to receive notifications about events taking place in your emails.(Webhooks are an optional feature for all users.)
Get a detailed comparison between SendGrid and ZeptoMail.
SendGrid vs. ZeptomailSendGrid Transition API Code Explained
A detailed documentation into SendGrid transition API to start sending your transactional emails from ZeptoMail.
SendGrid Transition APIZeptoMail feature highlights
- Mail Agents
- File Cache
- Processed Emails
- Templates
- Webhooks
- Email Tracking
- Domains
- Suppression List
- Reports
- Subscription
- Manage Users
- Activity Logs
- Content Settings
- IP Restrictions
- Export Logs
Why choose ZeptoMail?
Exclusively transactional
ZeptoMail ensures exceptional inbox placement and emails are delivered in seconds.
User-friendly interface
ZeptoMail’s intuitive interface makes it easy to navigate and connect with your business.
Email segmentation
Organize your emails into Mail Agents, grouping them by domain, application, or purpose.
No gatekeeping
Access ZeptoMail’s features without any interruptions or additional costs. No updates are required.
Comprehensive reports
ZeptoMail gives you in-depth insights into every email you send like opens, clicks, bounce details, stored content, and more.
Flexible pricing
With ZeptoMail’s pay-as-you-go pricing, you don’t need to worry about paying for monthly plans or unused emails.
Attachment storage
ZeptoMail’s File Cache is where attachments can be stored and uploaded for quick email sending.
24/7 support
Reach out for technical assistance via ZeptoMail’s chat, phone, and email support, available 24/7.
Security and privacy
In ZeptoMail, security is a top priority. We ensure the confidentiality of transactional email content.
Frequently asked questions
Upgrade now and enjoy secure email sending with ZeptoMail.
All names and marks mentioned here remain the property of their original owners. Details are as published by the named competitors on their website(s) on April 2024 and are subject to change without notice. The details provided on this page are for general purposes only and cannot be considered as authorized information from the respective competitors. Zoho disclaims any liability for possible errors, omissions, or consequential losses based on the details here.