One send endpoint.
POST a from, a to, a subject and an HTML or text body. The API answers with an emailId you can read back or match against webhook events.
Notix is a JSON email API for developers that sends transactional and marketing mail through the same endpoint and the same key. It takes a message, returns an emailId, and posts every delivery event to your webhook. Batch and scheduled sends, idempotency keys, typed SDKs for TypeScript, Python, Go and PHP, and an SMTP relay for code you would rather not change are part of the same account, on a free plan that asks for no card.
This page is the API surface: sending, batching, scheduling, webhooks and SDKs. The transactional email API page covers the transactional use in depth, and the SMTP relay covers the case where your framework already knows how to send mail and you would rather not change it.
POST a from, a to, a subject and an HTML or text body. The API answers with an emailId you can read back or match against webhook events.
Several messages in one request, or one message held until a time you set. Scheduled messages can be updated or cancelled before they go.
Email, contact and domain events post to your URL as they happen, with a signature you verify so a forged request cannot reach your handler.
TypeScript, Python, Go and PHP packages that wrap the JSON endpoints. Everything they do, plain HTTPS can do too.
Contact books, double opt-in and templates live behind the same key, so a campaign and a receipt share one suppression list.
Add a domain, publish the SPF, DKIM and DMARC records the dashboard shows you, and the API sends from it once they resolve.
The same request in curl and in each SDK. Every sample sends from a verified domain, sets an idempotency key where the client supports it, and gets back an emailId.
curl -X POST https://app.usenotix.dev/api/v1/emails \
-H "Authorization: Bearer $NOTIX_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-4471-receipt" \
-d '{
"from": "receipts@acme.com",
"to": "customer@example.com",
"subject": "Your receipt",
"html": "<p>Thanks for your order.</p>"
}'
import { Notix } from "notix-js";
const notix = new Notix(process.env.NOTIX_API_KEY);
const { data, error } = await notix.emails.send({
from: "receipts@acme.com",
to: "customer@example.com",
subject: "Your receipt",
html: "<p>Thanks for your order.</p>",
});
import os
from notix import Notix
notix = Notix(os.environ["NOTIX_API_KEY"])
data, error = notix.emails.send({
"from": "receipts@acme.com",
"to": "customer@example.com",
"subject": "Your receipt",
"html": "<p>Thanks for your order.</p>",
})
package main
import (
"bytes"
"net/http"
"os"
)
func main() {
body := bytes.NewBufferString(`{
"from": "receipts@acme.com",
"to": "customer@example.com",
"subject": "Your receipt",
"html": "<p>Thanks for your order.</p>"
}`)
req, _ := http.NewRequest("POST", "https://app.usenotix.dev/api/v1/emails", body)
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer "+os.Getenv("NOTIX_API_KEY"))
http.DefaultClient.Do(req)
}
<?php
$ch = curl_init('https://app.usenotix.dev/api/v1/emails');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Authorization: Bearer ' . getenv('NOTIX_API_KEY'),
],
CURLOPT_POSTFIELDS => json_encode([
'from' => 'receipts@acme.com',
'to' => 'customer@example.com',
'subject' => 'Your receipt',
'html' => '<p>Thanks for your order.</p>',
]),
]);
curl_exec($ch);
Add the domain you send from and publish the SPF, DKIM and DMARC records the dashboard gives you. The API refuses to send from an unverified domain, which is what keeps your mail out of the spam folder later.
POST the message with your API key in the Authorization header. The response carries an emailId and the message enters the queue. Batch and scheduled sends use the same shape with a list of messages or a send time added.
Register a webhook URL and each message reports accepted, queued, sent, delivered, bounced or complained as it happens. Read the same history back by emailId when you need it in a support tool.
The batch endpoint takes many messages in one request, each with its own recipient, subject and body, and returns an emailId for every one of them. A failure in one message does not fail the batch; each result says what happened to that message. It is the right call for a nightly digest or a password-rotation notice that goes to every account at once.
Pass a send time and the message waits until then. Until it goes, you can move the time or cancel the message through the API, so a reminder that is no longer needed never reaches the customer. Scheduled messages report the same lifecycle events as immediate ones.
Email events, contact events and domain events post to the URL you register, each delivery signed with your webhook secret. Verify the signature, act on the event, return 200. A handler that does not answer is retried, so a short outage on your side does not lose events.
Contact books, double opt-in and templates are API objects, not a separate product. A subscriber added through the API confirms through the same double opt-in flow the dashboard uses, and an unsubscribe from a campaign lands on the same suppression list your transactional sends check.
Analytics for delivery, bounces and complaints are in the dashboard and behind the API, and a deliverability pre-check API and an OTP API for email and SMS sit beside the send endpoint. The transactional page describes both.
Free: 5,000 emails a month, 200 a day, no card, no end date.
Pro: $15 a month for 50,000 emails, usage past that metered on the same invoice.
See the full pricing pageReceipts, alerts and one-time codes: the transactional use, with idempotency keys, a deliverability pre-check and suppression.
Transactional email APIPoint a framework's mailer at one host and port and get the same tracked send without touching your code.
SMTP relayVerify a domain, copy an API key, make the first call. Five minutes from an empty account to a delivered message.
QuickstartWhat a unit is, what the free plan includes, and what a month of mixed sending costs on Pro.
Pricing| Item | Limit | Where it is set |
|---|---|---|
| Recipients | 50 per message across to, cc and bcc; each one counts as an email | POST /v1/emails, and RCPT TO on the SMTP relay |
| Attachments | 10 files, 7 MB each, 10 MB per email | Request body, measured after base64 decoding |
| Batch | 100 messages per call, 40 MB of attachments across the batch | POST /v1/emails/batch |
| Idempotency key | 256 characters, kept 24 hours | Idempotency-Key header |
OTPs, receipts and alerts with idempotency keys, a deliverability pre-check and a shared suppression list.
ProductPoint any framework's mailer at one host and port; the relay turns SMTP into the same tracked, suppressed send.
NotixA free plan with no card, and Pro at $15 a month for 50,000 emails. Only sent volume is metered.
Use casesSend one-time codes by email or SMS with two API calls, with expiry, length and risk scoring handled for you.
GuidesThe SDK, plain fetch, or Nodemailer pointed at the relay: three ways to send from Node in a few minutes.
ProductBilled in naira or shillings from a prepaid wallet, no dollar card needed, the same API and SMTP relay everywhere.
Verify a domain, copy an API key, send one message. The free plan does not ask for a card, and the SDKs are one install away.