Skip to main content

Switch from SendGrid to Zoho ZeptoMail in just 5 minutes.

Modify just one line in your existing code and make a seamless transition to ZeptoMail.

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.

Step

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.

Step

Add and verify your domain

Step

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.

Step

Welcome aboard!

  • Welcome to ZeptoMail. Start sending your transactional emails from ZeptoMail. Happy email sending!

Sign up for Zoho ZeptoMail
Domain addition and verification
 
       
copy

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

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
  • SendGrid
  • 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. Zeptomail  

SendGrid Transition API Code Explained

A detailed documentation into SendGrid transition API to start sending your transactional emails from ZeptoMail.

SendGrid Transition API  

ZeptoMail 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

Mail Agents

Mail Agents

Mail Agents in ZeptoMail are designed to assist in categorizing your transactional emails based on their type, purpose, multiple applications, and other criteria. Each Mail Agent is given a unique API token and SMTP credentials. Learn more

 1512 

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

How long does it take to transition to ZeptoMail?

It’s quick and simple to switch to ZeptoMail. Modify just one line of your API code, and you’ll be ready to send transactional emails within five minutes.

 1012 

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.