Notifizz Event Tracking SDK
Event tracking is how your backend tells Notifizz that something happened. You emit one event with a flattrack(eventName, properties) call, and the Notifizz orchestrator resolves campaigns, builds recipients, and dispatches notifications across every channel — no client-side workflow or recipient targeting.
TL;DR
- One call, server-side routing.
client.track(eventName, properties)is the only method you need to send. Campaign matching, enrichment, and channel dispatch happen in Notifizz. - Three SDKs, same wire format. Node, Java, and PHP all post to
POST /v1/events/trackwith the same payload shape. - Idempotency built in. Every
track()call carries an idempotency key (auto-generated UUID by default, caller-supplied when retrying jobs). - Retries built in. Each SDK retries transient failures twice (
1s, then2s) before bubbling the error. - Same surface in all three. Enrichers, event declaration and schema validation modes ship in Node, Java and PHP alike (Java and PHP since
2.0.0). The only Node-specific extra is the bundled Zod re-export.
Available SDKs
Node.js
@notifizz/nodejs — npm package for Node and TypeScript backends. Bundles a Zod re-export for schemas.Java / Kotlin
com.notifizz:notifizz-java — Maven Central package for JVM applications.PHP
notifizz/php — Composer package for PHP applications.Cross-language feature matrix
Schemas are the one place the three SDKs differ in shape, not in capability. Node accepts Zod (bundled and re-exported) or raw JSON Schema; Java and PHP take plain JSON Schema, with a
JsonSchema fluent builder for the common cases. What travels on the wire — and what the orchestrator reads — is JSON Schema in every language.Wire format
All three SDKs hit the same backend endpoint:occurredAt is optional and omitted entirely unless you declare it — an absent field means reception time is the event time. When present it must be ISO 8601 and must not be in the future (60-second skew tolerance), or the call is refused with event/invalid-occurred-at.
The full DTO and idempotency contract are in the Event Tracking reference.
FAQ
Which SDK should I pick?
Which SDK should I pick?
Use the SDK that matches your backend runtime. Since
2.0.0 on the JVM and PHP sides, the three cover the same backend surface: track(), enrichers, declareEvent(), schema modes, Audience identity, widget auth. The only remaining delta is the bundled Zod re-export, which is specific to Node — Java and PHP describe schemas as JSON Schema instead.Why is there no `send()` method anymore?
Why is there no `send()` method anymore?
client.send(...) and the POST /v1/notification/.../track route were removed. The whole platform is now event-driven: emit an event, let a campaign decide the channel and the recipients. Migrating is a one-line change to client.track(eventName, properties).What if I need to send to a specific list of recipients?
What if I need to send to a specific list of recipients?
Put the recipient identifiers in the event properties (
{ userId, email, ... }) and let the campaign’s orchestrator resolve them — directly, via an enricher, or via a dynamic recipient source. The shape “one event per audience” is intentional: it keeps the recipient resolution server-side and traceable.Can I batch several events in one call?
Can I batch several events in one call?
Not today. Each
track() call is one event. If you need to emit many events at once, fire them in parallel from your code — the SDK retries each one independently and idempotency keys prevent duplicates.What does `{ duplicate: true }` mean in the response?
What does `{ duplicate: true }` mean in the response?
The backend has already accepted an event with the same idempotency key. This is the success path for a retried emit — your code does not need to do anything. See the Event Tracking reference for the full response shape.
My language isn't listed — can I still call the API?
My language isn't listed — can I still call the API?
Yes. The wire format is plain HTTP+JSON — see the Event Tracking reference. Any language that can make an authenticated POST works. The SDKs only add idempotency-key generation, retries, and HMAC token helpers on top.
See also
Backend quickstart
Send your first event in under five minutes.
Event Tracking reference
Full HTTP wire format, idempotency contract, error shapes.
Notification Center widget
Display the notifications your events drive.
Authentication overview
Pick the right widget auth mode for your stack.