Credit a customer only from a verified disbursement.completed event —
never from a client callback. Delivery is at-least-once and signed
(Pulse-Signature, HMAC-SHA256 over the raw request body); a re-serialized
JSON object will not match the signature.
De-duplication
verifyOnce verifies the signature, checks replay tolerance, and de-duplicates
on event.id using an in-memory store by default — it returns null for a
redelivery, which you should acknowledge with a 200 rather than treat as an
error.
On multiple instances, back de-duplication with a shared store (Redis, a
database table) that implements the ProcessedEventStore contract (has /
add on event id), passed to the Pulse constructor:
Credit a customer only after a verified disbursement.completed webhook.
Client-side callbacks such as onSuccess are UX signals — they can be spoofed.
The signed webhook is the only source of truth for crediting a user.
See the webhook event catalog for every event and
payload.