A read-only key
Settings → API Keys → Create API Key, with Read Access only.
Read onlyNotix 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.
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.
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.",
});
The converter reads the code as text in your browser. It does not run it, store it or send it anywhere.
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.
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.
- https://api.sendgrid.com/v3/mail/send
+ https://app.staging.usenotix.dev/api/compat/sendgrid/v3/mail/send
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>" }]
}'
Paste a read-only SendGrid key in the Migration Center. It shows you what it found before it writes anything.
Templates come across from SendGrid only. From anywhere else, rebuild them in the editor or start from the 54 starter templates.
Settings → API Keys → Create API Key, with Read Access only.
Read onlyHeld 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 hourPaste an API key, or upload your contacts and unsubscribes as CSV. Nothing is written until you have seen what we found.
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.
Contacts land in contact books you choose, with your custom fields mapped. Anyone suppressed arrives unsubscribed.
Publish our records alongside your old provider's. Both keep sending; DNS has room for both.
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.
The console uses the same words throughout: Emails, Broadcasts, Automations, Templates, Audience, Metrics, Logs, Webhooks and API keys.
| In SendGrid | In Notix | Good to know |
|---|---|---|
| Activity Feed | Emails | Every message and its events. API calls are on Logs. |
| Stats | Metrics | Same idea, same place. |
| Marketing > Contacts and Lists | Audience | Lists become contact books. |
| Marketing > Segments | Audience > Segments | Listed only: SendGrid shares just a sample of who is in one. |
| Unsubscribe Groups | Audience > Topics | The Migration Center copies each group as a topic, with its opt-outs. |
| Single Sends | Broadcasts | Same idea, same place. |
| Automations | Automations | Email, delay, wait for event, if / else, update contact and add to segment steps. |
| Dynamic Templates | Templates | The Migration Center can import them. |
| Suppressions | Emails > Suppressions | Same idea, same place. |
| Sender Authentication | Domains | Same idea, same place. |
| API Keys | API keys | Same idea, same place. |
| Event Webhook | Webhooks | Same idea, same place. |
| Inbound Parse | Emails > Receiving | Same idea, same place. |
The same email, as you send it today and as you send it with Notix.
| Language | SendGrid | Notix |
|---|---|---|
| Node.js and TypeScript | @sendgrid/mail | notix-js |
| Python | sendgrid | notix-sdk |
| PHP and Laravel | sendgrid/sendgrid | usenotix/notix-php |
| Go, Ruby, Java, .NET and the rest | Their libraries, or the v3 API | REST API (JSON over HTTPS) |
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);
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.",
});
| Setting | SendGrid | Notix |
|---|---|---|
| Host | smtp.sendgrid.net | smtp.usenotix.dev |
| Ports | 587 or 25 (STARTTLS), 465 (TLS) | 465 (TLS) or 587 (STARTTLS) |
| Username | apikey | notix |
| Password | Your SendGrid API key | An API key |
Change the four settings and your mailer sends through Notix. Nothing else in your code moves.
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 | Notix | Good to know |
|---|---|---|
processed | email.queued | |
delivered | email.delivered | |
deferred | email.delivery_delayed | |
open | email.opened | |
click | email.clicked | |
bounce, dropped | email.bounced | A drop is SendGrid refusing to send at all. Notix reports both as a bounce, with the reason in the payload. |
spamreport | email.complained | |
unsubscribe, group_unsubscribe | contact.unsubscribed | Your groups come over as topics, but Notix sends one unsubscribe event for both. |
Inbound Parse post | email.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.
The importer enforces the order. Someone who opted out at SendGrid cannot get mail from Notix.
Give each app the key it needs: full access, or sending only.
Every delivery carries an HMAC signature and a timestamp, so your handler can refuse anything forged or replayed.
API request logs are kept 30 days. Keys, codes, email bodies and attachments are hidden before a log is saved.
If bounces or complaints climb past safe levels, the domain pauses before it damages your reputation. How it works.
The first broadcast to imported contacts is reviewed by us before it goes out.
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.
Send sign-in codes by SMS or email, with a risk check first, and verify them in one call. One-time codes.
Claude, ChatGPT or Cursor can work with Notix, and live keys ask you first above a limit you set. Connect your AI.
Top up a wallet in naira, shillings or dollars, and Pro renews from it. Pricing.
Receive mail on your own domain and forward it on, with an optional forwarded-message header. Inbound email.
Campaigns to a list, segment or topic, and email sequences that run themselves, behind the same key.
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.
| Provider | Plan | A month |
|---|---|---|
| SendGrid | Essentials | $19.95 |
| Notix | Pro | $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.
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.