Integrations guide
Notifizz ingests events from external sources via dedicated webhook endpoints. This guide walks through setting up each connector — Segment, Stripe, HubSpot, Intercom — from “zero” to “campaign fires from a provider event”. The exact wire format per provider is in connector webhooks reference. This page is task-oriented; jump there when you need the headers and HMAC formulas.TL;DR
- Each provider has a dedicated
POST /v1/webhooks/{provider}/:sourceIdendpoint. - The dashboard mints a
sourceIdandverificationSecretper source. - Configure the webhook on the provider side with the URL + secret.
- Notifizz verifies the signature, maps the provider event to the Notifizz event grammar, and feeds it into the same pipeline as
client.track()calls.
Common flow
The setup is the same shape for every provider:Create a source in the dashboard
sourceId and a verificationSecret. Both are needed in the next step.Configure the webhook on the provider
https://api.notifizz.com/v1/webhooks/{provider}/<sourceId>. The secret goes into the provider’s “shared secret” / “signing secret” / “client secret” field — the exact name varies.Test delivery
Map provider events to Notifizz events
invoice.paid arrives as invoice.paid. The provider’s type is the canonical identifier, so what you read in the provider’s own documentation is what you key on here. Your event catalogue lists each type the source has actually sent.Wire campaigns
client.track() events — campaigns key on the event name. Create a campaign listening on invoice.paid and trigger it from any Stripe webhook delivery. Copy the name from your event catalogue rather than typing it: a single character apart, the campaign never fires.Per-provider setup
Segment
Add a Segment source in Notifizz
verificationSecret.Configure Segment
verificationSecret.Map your Segment events
track, identify, page, screen, or group. The mapper translates them — the most common pattern is track events keep their event name, others get a segment.identify / segment.page prefix. Customise via the dashboard’s mapping UI.x-signature, value is hex(HMAC-SHA1(verificationSecret, rawBody)).
Stripe
Add a Stripe source in Notifizz
Add a webhook endpoint in Stripe
verificationSecret field.Map Stripe events
invoice.paid, customer.subscription.updated), and Notifizz keeps them as they are. Bear the collision in mind when you name your own events: a client.track('invoice.paid', …) of your own would land on the same name as Stripe’s.stripe-signature with Stripe’s multi-element format (t=<ts>,v1=<sig>). Notifizz delegates to Stripe’s official verifier — the same logic as Webhook.constructEvent in the Stripe SDK.
HubSpot
Add a HubSpot source in Notifizz
Set up the HubSpot app webhook
verificationSecret.Subscribe to events
contact.creation, deal.propertyChange, …). The mapper produces hubspot.contact.created, hubspot.deal.updated, etc.x-hubspot-signature-v2 (with x-hubspot-signature fallback), value is hex(HMAC-SHA256(clientSecret, rawBody)).
Intercom
Add an Intercom source in Notifizz
Configure the Intercom webhook
verificationSecret.Subscribe to topics
conversation.user.replied, contact.created, …). The mapper translates them to intercom.conversation.replied, intercom.contact.created, etc.x-hub-signature, value is sha1=<hex(HMAC-SHA1(verificationSecret, rawBody))> — the same GitHub-style scheme. Note the sha1= prefix.
Debugging signature failures
The dashboard delivery history flags signature failures with a 401 entry. The most common causes:Mapping events
Each connector ships a default mapping out of the box. The dashboard’s mapping UI exposes:- The list of provider event types observed in delivery history.
- The mapped Notifizz event name (editable).
- An “ignore” toggle for events you don’t want propagated.
FAQ
Segment 'invalid signature' — wrong secret or wrong source ID?
Segment 'invalid signature' — wrong secret or wrong source ID?
sourceId produces a 404. Wrong secret produces 401 + signature failure in the log. The dashboard delivery history distinguishes the two — read the entry’s reason field.Stripe `customer.subscription.updated` — what does my campaign listen on?
Stripe `customer.subscription.updated` — what does my campaign listen on?
customer.subscription.updated, exactly as Stripe names it. Connector event names are not rewritten, so there is nothing to choose and nothing to keep in sync: the provider’s type is the name. If you want your own vocabulary instead, emit your own event from your backend with client.track() when you handle the change.Drop events I don't care about — how?
Drop events I don't care about — how?
Pause a connector temporarily?
Pause a connector temporarily?
Same Stripe event arrives twice — duplicate?
Same Stripe event arrives twice — duplicate?
idempotencyKey. A retried delivery from Stripe short-circuits with { duplicate: true }. Genuinely identical events from your end (e.g. user clicks twice) have different event ids and are not deduped.Multiple sources from the same provider — supported?
Multiple sources from the same provider — supported?
sourceId + verificationSecret. You can have, say, two Stripe accounts (production + sandbox) wired to the same Notifizz environment; campaigns can match on event content if they need to differentiate.