Joins a contact list
Everyone added to the list from now on starts, whether they came from an import, a sign-up form, the API or a teammate.
CONTACT_ADDEDWelcome a new sign-up today, send a tip in three days and a check-in in a week. Set it up once and Notix walks every person through it on their own clock.
Add a step, fill it in, and branch where it matters. Every change saves on its own.
An automation is a set of steps joined by paths. Each email step uses a template or one you write in place, filled with the event's data. Delay pauses; Wait for event holds until your app says something happened; If / else splits on a rule; Update contact and Add to segment keep your list up to date.
2 emails, the last one day 3. Each person moves through on their own clock.
steps: [
{ type: "EMAIL", from: "Acme <hello@acme.com>", subject: "Welcome to Acme" },
{ type: "WAIT", seconds: 259200 },
{ type: "EMAIL", from: "Acme <hello@acme.com>", subject: "Three tips to get started" },
]Three ways in, and an optional segment to narrow it down.
Everyone added to the list from now on starts, whether they came from an import, a sign-up form, the API or a teammate.
CONTACT_ADDEDOne call per person, at the moment that matters to your product, such as a trial with three days left.
APISend payment.failed or order.shipped from your app. Every automation on that event starts, and its data goes into the emails.
EVENTLimit it to people who match a segment, and let them leave early when they stop matching.
exitWhenLeavesSegmentimport { Notix } from "notix-js";
const notix = new Notix(process.env.NOTIX_API_KEY);
// Your app decides when someone starts, for example 3 days before a trial ends.
await notix.automations.enroll("jrn_trial_ending", {
email: "wanjiru@example.com",
});
from notix import Notix
notix = Notix() # reads NOTIX_API_KEY
notix.journeys.enroll("jrn_trial_ending", {"email": "wanjiru@example.com"})
<?php
use Notix\Notix;
$notix = new Notix(getenv('NOTIX_API_KEY'));
$notix->journeys->enroll('jrn_trial_ending', ['email' => 'wanjiru@example.com']);
curl -X POST https://app.usenotix.dev/api/v1/automations/jrn_trial_ending/enroll \
-H "Authorization: Bearer $NOTIX_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "email": "wanjiru@example.com" }'
Each recipe arrives with its steps in place. Change what you like.
Pick a goal, choose who gets it and name it. The same recipes are in the API, so your code or your AI agent can set one up too.
const { data: welcome } = await notix.automations.createFromRecipe({
recipeId: "welcome",
name: "Welcome series",
triggerType: "CONTACT_ADDED",
contactBookId: "cb_signups",
fromEmail: "Acme <hello@acme.com>",
});
// Check every email, then turn it on.
await notix.automations.preflight(welcome!.id);
await notix.automations.activate(welcome!.id);
Review before it goes live, then follow every person through it.
Review and activate checks every email first: a verified domain that is not paused, an unsubscribe link and nothing the deliverability check blocks. Once it runs, the report shows how many started, are in it now, opened and finished.
journey.enrolled, journey.completed and journey.exited webhook eventsWrite a broadcast in the editor or start from a template, send it to a list or segment now or on a schedule, and read the results.
Explore BroadcastsA block editor for email, 54 starter templates across 14 industries, and variables you fill in from the API or a broadcast.
Explore TemplatesContact books, custom properties, segments and topics people can opt in and out of, all behind the same API key.
Explore AudienceStart from a recipe, add your emails and test it in your own inbox before anyone else gets it.