Signed webhooks: events in, alerts out
Send events to Pulseri and get alerts back, signed so you know they are real. Works with any tool that can post.
What it does
A webhook is a web request one system sends to another. Pulseri uses signed webhooks in both directions.
Events in. When something happens in your system, such as a ticket closing, send Pulseri a signed request. A trigger can then start a survey for that person.
Alerts out. When an alert rule matches an answer, Pulseri can call a web address you choose. Each call is signed so your system can verify it, and each is listed with its result.
Send a signed event
Sign the exact bytes you send. Use the receiver URL and signing secret from Settings, then Webhooks.
import { createHmac } from 'node:crypto'
const body = JSON.stringify({
event_key: 'ticket.closed',
external_event_id: 'evt_8f14e45f',
person_id: 'user_123',
payload: { email: '[email protected]' },
occurred_at: '2026-10-15T09:30:00Z',
})
const signature = 'sha256=' + createHmac('sha256', process.env.PULSERI_SIGNING_SECRET).update(body).digest('hex')
const res = await fetch(process.env.PULSERI_RECEIVER_URL, {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'X-Pulseri-Signature': signature },
body,
})
console.log(res.status) // 200 when Pulseri accepts the request
Who it suits
Anyone with a tool Pulseri does not connect to natively, or who wants alerts to start work in their own systems.
Fields in the request
Only the event key is required. The rest helps Pulseri find the right person and ignore repeats.
event_key
The name of what happened, such as "ticket.closed". Pulseri uses it to pick the trigger. Required.
external_event_id
Your own ID for this event. If you send the same ID twice, Pulseri keeps one.
person_id
Your own ID for the person, such as a customer ID. Pulseri matches on it before the email.
payload.email
The person's email, used to find them when there is no person ID. If nobody matches, Pulseri adds them.
occurred_at
When it happened, in ISO 8601 format. If omitted, Pulseri uses the time it received the request.
How to set it up
Most people finish in minutes.
- An administrator opens Settings, then Webhooks, and copies the receiver URL and signing secret.
- In your system, build a JSON body with an event key, such as "ticket.closed", and who it is about. Add an event ID so repeats are ignored.
- Sign the body with your signing secret (HMAC-SHA-256) and send it in the X-Pulseri-Signature header as sha256= plus the hex value.
- POST the body to the receiver URL as application/json. Pulseri answers 200 when it accepts the request.
- Create a trigger in Pulseri for that event, choose the survey and add a delay if you like.
Which plans have it
This comes from the current plan table.
All plansSee plans and pricing
Common questions
Works well with
REST API
Send people and events in, and read answers and reports out.
Build your own
All plansSlack
Low-score alerts in the channel you pick, with the full comment.
Alerts in your chat
All plansStripe
Ask for feedback after an invoice is paid or a checkout is completed.
Start a survey from your tools
All plans
Try it on your own feedback
Start a free trial and connect it today.
Free for 14 days. Cancel any time before it ends.