Events
Name the events your app sends, send them by API, and use their data in automation emails.
An event is something your app tells Notix happened to one person: user.signed_up, payment.failed, order.shipped. An event can start an automation, and a waiting automation can go on when it arrives. The event's data can go into your emails.
The Events tab
Open Automations and press Events. The table lists each event with its Properties, how many arrived in the last 30 days, which automations use it, and when the last one arrived.
An event your app sends before you name it is added to the list for you, with no properties.
Add an event
Press Add event
On the Events tab, press + Add event.
Name it
Use lowercase letters, numbers and dots, like
order.shipped. Names starting withnotix.are reserved.Add its properties
Give each property a name and a type: Text, Number, Date or Yes / no. In an email, a property reads as
event.order_id.Save
Press Save event.
When an event has properties, Notix checks each one when the event arrives. A value that reads as the right type is taken (the text "15" as the number 15). A value of the wrong type is refused with 422, and nothing starts.
Send an event
Send it from your app with an API key:
curl -X POST https://app.usenotix.dev/api/v1/events \
-H "Authorization: Bearer $NOTIX_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "event": "order.shipped", "email": "ada@example.com", "payload": { "order_id": "o_123", "tracking_url": "https://track.example.com/o_123" } }'
await fetch("https://app.usenotix.dev/api/v1/events", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.NOTIX_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
event: "order.shipped",
email: "ada@example.com",
payload: { order_id: "o_123", tracking_url: "https://track.example.com/o_123" },
}),
});
Name the person with contact_id or email, never both. The answer is 202 with the runs it started, the automations it skipped and why, and how many waiting runs went on.
| Rule | What happens |
|---|---|
| An address Notix has not seen | It becomes a contact in the automation's list, when you use a full access key. |
| A suppressed address that is not a contact yet, or a list with double opt-in | No contact is made and nothing starts. |
| A contact whose address is suppressed | The run starts, but Notix blocks every email to them: each send is suppressed. |
| A sending-only key | It reaches existing contacts only. |
| The person is already in the automation, or started it in the last hour | They are not started again. |
| The automation is waiting for review | The run is held until Notix approves your sending. |
| A key with a draft-only approval policy | It cannot start automations. |
Each automation an event starts, and each waiting run it wakes, counts as one enrolment against the key's daily limit and toward its approval policy, and its emails against the key's email caps. A key pinned to one domain only starts and wakes automations that send from that domain. A key can send 600 events a minute (dry runs included), and a team 10,000 events a day on Free or 200,000 on Pro; past either the answer is 429. Send an Idempotency-Key header to make a retry safe for 24 hours, and Notix-Dry-Run: true to see which automations it would start without starting them.
A full access key's answer says why each automation did not start. Any other key's answer says only not_started.
Only a full access key names a new event by sending it. An event no automation uses is recorded without its data. Notix keeps the data of an event an automation started or woke from for 30 days, and clears it when the contact is deleted.
Use the data in emails
In a Send email step, fill a template's blank from the event (event.amount), the contact (contact.first_name), or an event a Wait for event step received (wait_events.payment.succeeded.amount). The review screen's Every blank is filled check tells you if a blank has nowhere to come from.
Migrating from Resend
Notix takes Resend's event calls as they are. Point Resend's client at Notix's Resend compatibility address (https://app.usenotix.dev/api/compat/resend) with a Notix API key, and resend.events.send(...) and resend.events.create(...) keep working. An event's schema ({ "plan": "string" }) becomes its properties. Copying your Resend events in the Migration Center is coming soon.
Events from the API
Send an event, and list, create, update or delete your events. The Events reference lists every endpoint.