Schedule email
Send an email later, then reschedule or cancel it before it goes.
Add scheduledAt to a send and the email goes out at that time instead of now. Until then you can move it or cancel it.
Schedule a send
Pass an ISO 8601 date and time with a time zone, such as 2026-10-12T09:00:00Z or 2026-10-12T10:00:00+01:00.
curl -X POST https://app.usenotix.dev/api/v1/emails \
-H "Authorization: Bearer $NOTIX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "Acme <hello@acme.com>",
"to": "ada@example.com",
"subject": "Your trial ends tomorrow",
"html": "<p>Your trial ends tomorrow. Pick a plan to keep your data.</p>",
"scheduledAt": "2026-10-12T09:00:00Z"
}'
import { Notix } from "notix-js";
const notix = new Notix(process.env.NOTIX_API_KEY);
const { data, error } = await notix.emails.send({
from: "Acme <hello@acme.com>",
to: "ada@example.com",
subject: "Your trial ends tomorrow",
html: "<p>Your trial ends tomorrow. Pick a plan to keep your data.</p>",
scheduledAt: "2026-10-12T09:00:00Z",
});
from datetime import datetime, timezone
from notix import Notix
notix = Notix() # reads NOTIX_API_KEY
data, error = notix.emails.send({
"from": "Acme <hello@acme.com>",
"to": "ada@example.com",
"subject": "Your trial ends tomorrow",
"html": "<p>Your trial ends tomorrow. Pick a plan to keep your data.</p>",
"scheduledAt": datetime(2026, 10, 12, 9, 0, tzinfo=timezone.utc),
})
use Notix\Notix;
$notix = new Notix(getenv('NOTIX_API_KEY'));
$email = $notix->emails->send([
'from' => 'Acme <hello@acme.com>',
'to' => 'ada@example.com',
'subject' => 'Your trial ends tomorrow',
'html' => '<p>Your trial ends tomorrow. Pick a plan to keep your data.</p>',
'scheduledAt' => '2026-10-12T09:00:00Z',
]);
The email is saved with the status SCHEDULED. The Python SDK turns a datetime into the right format for you.
A time that has already passed is not an error. The email goes out now.
How limits count
A scheduled email does not count against today's send limit. It counts on the day it goes out. If you cancel it first, it never counts at all.
Move it
Change the time with Reschedule an email:
curl -X PATCH https://app.usenotix.dev/api/v1/emails/cmg8x2k4b0001qz8v3hf7d2ab \
-H "Authorization: Bearer $NOTIX_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "scheduledAt": "2026-10-13T09:00:00Z" }'
const { data, error } = await notix.emails.update("cmg8x2k4b0001qz8v3hf7d2ab", {
scheduledAt: "2026-10-13T09:00:00Z",
});
data, error = notix.emails.update("cmg8x2k4b0001qz8v3hf7d2ab", {"scheduledAt": "2026-10-13T09:00:00Z"})
$email = $notix->emails->update('cmg8x2k4b0001qz8v3hf7d2ab', ['scheduledAt' => '2026-10-13T09:00:00Z']);
Cancel it
Stop it with Cancel a scheduled email. The status becomes CANCELLED and the email never goes out.
curl -X POST https://app.usenotix.dev/api/v1/emails/cmg8x2k4b0001qz8v3hf7d2ab/cancel \
-H "Authorization: Bearer $NOTIX_API_KEY"
const { data, error } = await notix.emails.cancel("cmg8x2k4b0001qz8v3hf7d2ab");
data, error = notix.emails.cancel("cmg8x2k4b0001qz8v3hf7d2ab")
$email = $notix->emails->cancel('cmg8x2k4b0001qz8v3hf7d2ab');
You can also cancel from the console. Open the email on the Emails page. Beside Scheduled for, press Cancel email and type cancel to confirm.
You can only move or cancel an email that is still SCHEDULED. Once it has gone out, both calls answer 400 with the message "Email already processed".
Find your scheduled emails
On the Emails page, open More filters and set Status to Scheduled. Through the API, List emails returns scheduledAt on each email.