Notify your users. One API call.
One POST sends email, Slack, and in-app notifications. Sliding-window rate limiting, automatic retries, and a live delivery feed.
npm install pulsekit-sdkawait pulse.notify({
event: "invoice.paid",
user: "usr_4f91",
data: { amount: 2400, currency: "USD" }
});
// 202 accepted
// { eventId: "1f9c2a…", receivedAt: "2026-09-18T14:32:08Z" }Infrastructure, not another workflow builder.
You define delivery targets; PulseKit runs the pipeline. Channels fail independently — a Slack failure never re-sends a delivered email.
resend.comRendered from templates, sent via Resend with per-delivery status. No queue juggling on your side.
incoming webhookFan out to channels or users through a plain incoming webhook. Failures are logged, never silently dropped.
project inboxWritten to the project inbox with read receipts and per-user targeting. New arrivals surface on the live feed.
Emit. Route. Observe.
Emit
Call notify once. Events are validated, persisted, and acknowledged with 202 before any work happens.
Route
Events pass a sliding-window rate limit, then the API enqueues delivery jobs. Channels fail independently — a failure on one never re-sends another.
Observe
Workers retry with exponential backoff + jitter and write a delivery log. Check status from the dashboard.
The contract, not the marketing.
Response codes, rate limits, and retry semantics are the product. Everything below is observable from the real API.
accepted, queued, acknowledged
sliding window per project
exponential backoff + jitter
Illustrative sample — connect a project for the real feed
user.invited1.4sinvoice.paid1.7sreport.ready2.0ssecurity.alert2.3sExplicit failure
Failures are recorded against the delivery log. No silent drops — a failed attempt is a visible status.
Boring primitives
One HTTP API, a queue, and workers. No esoteric SDK surface; the only moving part on your side is a POST.
Safe by default
Your secret key is issued once. User IDs and event names arrive as plain strings, and rate limits are on by default.
Your first event is one request away.
Create a project, copy a key, and call notify. The rest is a queue and a dashboard.