Notix
Migrate from SendGrid

Migrate off SendGrid without stopping sending.

Notix reads your SendGrid account with a read-only key you paste, brings your contacts, unsubscribes and bounces over, and deletes its copy of the key within the hour. Your SendGrid account keeps sending the whole time.

Read-only key, held at most 1 hour
Code converter

Paste your SendGrid code, get the Notix version

Load an example or paste your own send call: Node.js, Python, PHP or cURL. Anything that does not have a Notix equivalent is listed under the result.

Notix, Node.js (notix-js)
import { Notix } from "notix-js";

const notix = new Notix(process.env.NOTIX_API_KEY);

const { data, error } = await notix.emails.send({
  from: "Acme <orders@acme.com>",
  to: "amara@example.com",
  subject: "Your order is on its way",
  html: "<p>Your parcel left our warehouse today.</p>",
  text: "Your parcel left our warehouse today.",
});
  • Tags and categories were not converted: a Notix send has no tags field. Use your own header if you need to label mail.

The converter reads the code as text in your browser. It does not run it, store it or send it anywhere.

Or change nothing yet: the compat API

Notix accepts SendGrid's send request as it is and answers in the same shape. Swap the URL, send your Notix API key as the bearer token, and your existing code keeps working while you migrate.

  • Up to 100 messages in one request, and the Idempotency-Key header works
  • Replies and errors come back in SendGrid's own shape
  • Paused while an import is waiting for its review, so nothing slips out early

It is there to get you migrated, not to build on. New code should use /v1/emails. Of the providers on this site, only Resend and SendGrid have a compat API.

The only line that changes
- https://api.sendgrid.com/v3/mail/send
+ https://app.staging.usenotix.dev/api/compat/sendgrid/v3/mail/send
A SendGrid-shaped send, through Notix
curl -X POST https://app.staging.usenotix.dev/api/compat/sendgrid/v3/mail/send \
  -H "Authorization: Bearer $NOTIX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "personalizations": [{ "to": [{ "email": "amara@example.com" }] }],
    "from": { "email": "orders@acme.com" },
    "subject": "Your order is on its way",
    "content": [{ "type": "text/html", "value": "<p>On its way.</p>" }]
  }'
Migration Center

Move your audience in one sitting

Paste a read-only SendGrid key in the Migration Center. It shows you what it found before it writes anything.

What comes across, in this order

  • Unsubscribes, bounces and complaints, first, as suppressions
  • Contacts, with your custom fields mapped
  • Lists as contact books
  • Unsubscribe groups as topics, with their opt-outs
  • Dynamic templates, as Notix templates
  • Single sends: drafts as drafts, sent ones as history
  • Event webhooks, switched off with a new secret

Templates come across from SendGrid only. From anywhere else, rebuild them in the editor or start from the 54 starter templates.

A read-only key

Settings → API Keys → Create API Key, with Read Access only.

Read only

What happens to the key

Held sealed for at most an hour, and deleted when the import starts or ends. Never written to our database, never logged, never used to send.

SendGrid tells us what a key may do, so a key that could change your account is refused before it is used.

At most 1 hour
Four weeks

How the migration goes

  1. Day one

    Connect or upload

    Paste an API key, or upload your contacts and unsubscribes as CSV. Nothing is written until you have seen what we found.

  2. During the import

    Unsubscribes first

    Every unsubscribe, bounce and complaint is written before the first contact, so nobody who opted out at your old provider can be emailed from Notix.

  3. During the import

    Your lists and fields

    Contacts land in contact books you choose, with your custom fields mapped. Anyone suppressed arrives unsubscribed.

  4. Before you send

    Add Notix to your domain

    Publish our records alongside your old provider's. Both keep sending; DNS has room for both.

  5. Weeks one to four

    Move volume gradually

    A four-week plan, 15% to 100%, so mailbox providers see a sender that grows steadily. Switch the old provider off at the end, not the start.

Where things live

SendGrid's pages, and where to find them in Notix

The console uses the same words throughout: Emails, Broadcasts, Automations, Templates, Audience, Metrics, Logs, Webhooks and API keys.

SendGrid's names as their dashboard shows them; Notix names as the console shows them.
In SendGridIn NotixGood to know
Activity FeedEmailsEvery message and its events. API calls are on Logs.
StatsMetricsSame idea, same place.
Marketing > Contacts and ListsAudienceLists become contact books.
Marketing > SegmentsAudience > SegmentsListed only: SendGrid shares just a sample of who is in one.
Unsubscribe GroupsAudience > TopicsThe Migration Center copies each group as a topic, with its opt-outs.
Single SendsBroadcastsSame idea, same place.
AutomationsAutomationsEmail, delay, wait for event, if / else, update contact and add to segment steps.
Dynamic TemplatesTemplatesThe Migration Center can import them.
SuppressionsEmails > SuppressionsSame idea, same place.
Sender AuthenticationDomainsSame idea, same place.
API KeysAPI keysSame idea, same place.
Event WebhookWebhooksSame idea, same place.
Inbound ParseEmails > ReceivingSame idea, same place.
SDKs and the API

Send through the API, side by side

The same email, as you send it today and as you send it with Notix.

Notix has official SDKs for Node.js, Python and PHP. Every other language uses the same JSON API.
LanguageSendGridNotix
Node.js and TypeScript@sendgrid/mailnotix-js
Pythonsendgridnotix-sdk
PHP and Laravelsendgrid/sendgridusenotix/notix-php
Go, Ruby, Java, .NET and the restTheir libraries, or the v3 APIREST API (JSON over HTTPS)
SendGrid today
const sgMail = require("@sendgrid/mail");
sgMail.setApiKey(process.env.SENDGRID_API_KEY);

const msg = {
  to: "amara@example.com",
  from: { email: "orders@acme.com", name: "Acme" },
  subject: "Your order is on its way",
  text: "Your parcel left our warehouse today.",
  html: "<p>Your parcel left our warehouse today.</p>",
  categories: ["shipping"],
};

await sgMail.send(msg);
Notix, with notix-js
import { Notix } from "notix-js";

const notix = new Notix(process.env.NOTIX_API_KEY);

const { data, error } = await notix.emails.send({
  from: "Acme <orders@acme.com>",
  to: "amara@example.com",
  subject: "Your order is on its way",
  html: "<p>Your parcel left our warehouse today.</p>",
  text: "Your parcel left our warehouse today.",
});
SMTP

SMTP settings, side by side

SendGrid's settings as their docs describe them; check your own account for the exact values.
SettingSendGridNotix
Hostsmtp.sendgrid.netsmtp.usenotix.dev
Ports587 or 25 (STARTTLS), 465 (TLS)465 (TLS) or 587 (STARTTLS)
Usernameapikeynotix
PasswordYour SendGrid API keyAn API key

Change the four settings and your mailer sends through Notix. Nothing else in your code moves.

Webhooks

Your events, by their new names

Every Notix webhook is signed with X-Notix-Signature and retried up to six times. Point a new endpoint at Notix and match the names below.

SendGrid's event names as their docs list them; Notix names as they arrive in the X-Notix-Event header.
SendGridNotixGood to know
processedemail.queued
deliveredemail.delivered
deferredemail.delivery_delayed
openemail.opened
clickemail.clicked
bounce, droppedemail.bouncedA drop is SendGrid refusing to send at all. Notix reports both as a bounce, with the reason in the payload.
spamreportemail.complained
unsubscribe, group_unsubscribecontact.unsubscribedYour groups come over as topics, but Notix sends one unsubscribe event for both.
Inbound Parse postemail.received

For 30 days after a migration, a Notix webhook can also send SendGrid-shaped bodies, so the handler you have keeps working while you update it. They are signed the Notix way.

Security and safety

What protects your mail and your data

Suppressions before contacts

The importer enforces the order. Someone who opted out at SendGrid cannot get mail from Notix.

Keys with limits

Give each app the key it needs: full access, or sending only.

Signed webhooks

Every delivery carries an HMAC signature and a timestamp, so your handler can refuse anything forged or replayed.

Logs without secrets

API request logs are kept 30 days. Keys, codes, email bodies and attachments are hidden before a log is saved.

A domain that protects itself

If bounces or complaints climb past safe levels, the domain pauses before it damages your reputation. How it works.

A second pair of eyes

The first broadcast to imported contacts is reviewed by us before it goes out.

Idempotency

Retries never send twice

Send an Idempotency-Key header, up to 256 characters, with any send or batch. Notix keeps the result for 24 hours: a retry with the same key and body gets the first answer back, marked Idempotent-Replayed: true, and the same key with a different body is refused with a 409.

In notix-js it is one option: emails.send(payload, { idempotencyKey }). See it in action.

Also in your account

What else comes with Notix

SMS and one-time codes

Send sign-in codes by SMS or email, with a risk check first, and verify them in one call. One-time codes.

Connect your AI

Claude, ChatGPT or Cursor can work with Notix, and live keys ask you first above a limit you set. Connect your AI.

Pay in NGN, KES or USD

Top up a wallet in naira, shillings or dollars, and Pro renews from it. Pricing.

Inbound and forwarding

Receive mail on your own domain and forward it on, with an optional forwarded-message header. Inbound email.

Broadcasts and automations

Campaigns to a list, segment or topic, and email sequences that run themselves, behind the same key.

DNS

Your SPF record keeps both

A domain may only have one SPF record, so you add Notix to the line you already have rather than replacing it. Keep include:sendgrid.net while SendGrid is still sending, add include:_spf.usenotix.dev beside it, and remove SendGrid's once you have switched off.

Pricing

What it costs

What you would pay on Notix

ProviderPlanA month
SendGridEssentials$19.95
NotixPro$15

You would save about $59 a year.

SendGrid list price, approximate, checked 13 Sep 2026: their pricing page. Prices change; check before you decide.

FAQ

Questions, answered

Do I have to rewrite my sending code?
Not on day one. Point your SendGrid send call at the Notix compat endpoint and it keeps working with your Notix key while you migrate. Then use the converter on this page to switch each call to the Notix SDK at your own pace.
Will my SendGrid unsubscribes come across?
Yes, and first. The import writes every unsubscribe, bounce and complaint before the first contact, so a person who opted out there cannot be emailed from Notix, even if the rest of the import stops halfway.
What happens to my SendGrid API key?
It is held sealed for at most an hour, and deleted when the import starts or ends. Notix never writes it to its database, never logs it and never sends email with it. Use a SendGrid key with read access only. Notix checks it and refuses a key that could change your account.
Can I keep sending from SendGrid while I migrate?
Yes. Notix's DNS records sit beside SendGrid's, and the migration takes four weeks, from 15% of your volume to all of it. Switch SendGrid off at the end, not the start.
Is there someone who can help?
Yes. Book a free migration call from the contact page and we will look at your setup with you. The first broadcast to imported contacts is also reviewed by us before it goes out.

Start migrating off SendGrid.

Convert your code, bring your audience across with unsubscribes first, and move your volume over four weeks. We are happy to do it with you.