One key, two doors
The same API key works for the API and the relay. Revoke it and both stop at once.
Your framework, CMS or help desk already knows how to send over SMTP. Give it our host, a port, the username notix and an API key, and its mail is tracked, suppressed and reported exactly like an API send.
The same host, port, username and key in the shape each tool expects. Keep the key in an environment variable, never in the code.
If your app already sends email, moving it to Notix is a config change. The relay turns each SMTP message into the same send the API makes, so you get logs and webhooks without touching the code that builds the mail.
smtp.usenotix.devnotix, password your API keyimport nodemailer from "nodemailer";
export const mailer = nodemailer.createTransport({
host: "smtp.usenotix.dev",
port: 465,
secure: true, // implicit TLS
auth: {
user: "notix",
pass: process.env.NOTIX_API_KEY,
},
});
Two ways to start TLS, and a backup port for each, for hosts that block the usual ones.
| Port | Encryption | When to use it |
|---|---|---|
465 | TLS from the start | Your client asks for SSL or TLS |
587 | STARTTLS | Your client asks for STARTTLS, the usual choice |
On port 587 the relay will not accept a login until the connection is encrypted, so your API key never crosses the network in the clear.
Whether a message came in over SMTP or the API, it is checked, sent and reported the same way.
A message from your help desk sits beside one from your API code, with the same events, the same bounce reasons and the same webhooks. An address that bounced or unsubscribed is suppressed for both.
Prefer code? The email API adds batches, scheduling and idempotency keys on top.
Any language with an SMTP client works, often from its standard library. Scripts, cron jobs and old services can send through Notix without adding a dependency.
import os
import smtplib
from email.message import EmailMessage
msg = EmailMessage()
msg["From"] = "Acme <orders@acme.com>"
msg["To"] = "amara@example.com"
msg["Subject"] = "Your order is on its way"
msg.set_content("Your parcel left our warehouse today.")
with smtplib.SMTP("smtp.usenotix.dev", 587) as smtp:
smtp.starttls()
smtp.login("notix", os.environ["NOTIX_API_KEY"])
smtp.send_message(msg)
The same API key works for the API and the relay. Revoke it and both stop at once.
Mail leaves from your verified domain with SPF, DKIM and DMARC in place. About deliverability.
Delivered, bounced, opened and clicked events post to your URL for SMTP mail too.
Send, batch, schedule and retry safely with idempotency keys, then follow every message through logs, events and signed webhooks.
Explore Email APISPF, DKIM and DMARC records ready to publish, one-click DNS with Domain Connect, and a domain that pauses itself before bounces hurt it.
Explore DeliverabilityLet Claude, ChatGPT or Cursor work with Notix through the hosted MCP server, with live keys that ask before big sends.
Explore Connect your AIMore on sending and deliverability on the Notix blog.
Verify a domain, copy an API key, make one call. The free plan does not ask for a card.