Notify
Reach people where they'll see it.
One call sends a notification to your app's inbox, email or push. Your users choose what reaches them, and you can see why anything didn't.
One call, every channel.
Send a notification type to your users by your own user ids. Notify writes it for the inbox, the email and each push platform, for up to 1,000 people per call.
Your users choose.
People pick which kinds of notification reach them on which channel, and set quiet hours in their own timezone. Security notices still get through.
Email them only if they haven't seen it.
Every notification lands in your app's inbox, and can go out as a push too. If it is still unread after a delay you set, Notify sends an email.
Know why something didn't arrive.
Every delivery is logged with its outcome and the reason. Explain answers “why didn't they get it?” for one person, in the console.
How it works
Your first notification in three steps.
- Turn on Notify and add a notification type with its channels.
- Send it from your server to your own user id.
- Show the inbox in your app, with the React component or any framework.
import { Notify } from "@productcraft/notify";
// Server only: reads PRODUCTCRAFT_API_KEY and PRODUCTCRAFT_WORKSPACE_ID.
const notify = new Notify();
// Your own user id is the recipient. The type's routing picks the channels,
// for example the inbox always, then push, with email as the fallback.
await notify.notifications.send(
{
type: "invoice.paid",
recipients: [{ external_id: "user_123", email: "ada@example.com" }],
data: { amount: "12.00", invoice_url: "https://app.example.com/invoices/inv_123" },
},
// A retry with the same key returns the same notification, never a second one.
{ idempotencyKey: "invoice-paid:inv_123" },
);More in the box
Everything else Notify does.
What you bring
The keys only you can create. Notify handles everything after them.
- iOS: your APNs key A key from your own Apple Developer account. Apple ties it to your account, so nobody else can create it for you. Create an APNs key
- Android: your Firebase project A service account from your own Firebase project, with only the messaging role. Set up Firebase
- Web push: nothing Notify makes the keys browsers need, so web push works without an Apple or Google account. Set up web push
- Email: a sender in Mail Email goes out through ProductCraft Mail, from your verified domain.
- Templates with locales Per channel, with variables and language versions that fall back to your default, and history with revert.
- Retries never notify twice Send with a key, and a retried request returns the same notification instead of a second one.
- An inbox in your app Unread counts, read and archived states, up to two buttons per item, and live updates.
- React, or any framework
@productcraft/notify-reactfor React and Next.js,@productcraft/notify-jsfor everything else. - No secret key in your app Your backend gives the signed-in user a short-lived token; the browser or app never sees your API key.
- Device tokens, kept clean Notify refreshes device tokens and removes the ones Apple, Google and browsers report as dead.
- Credentials stay write-only APNs and Firebase credentials are checked when you upload them, stored encrypted and never shown again.
- Push status you can trust Push shows as sent, never as delivered: Apple and Google only confirm they accepted it.
- Signed webhooks Events for sends, deliveries, failures and inbox reads, with Send test, a 30-day event log and replay.
- Erasure on request Delete a person and their profile, devices, preferences and inbox go with them.
- Hosted in the EU Notify runs in Frankfurt with the rest of ProductCraft.
For your AI agents
MCP tools that list notification types and deliveries and explain skipped messages, behind the policies you set on each key. No tool can read or upload a credential. Read about MCP
Your first notification, end to end.
Send one to your own user id and watch it land in the inbox. Notify is free during the preview, with documented limits and no SLA.
Coming from Knock, Courier, OneSignal or Novu? Read the migration guide