POST with a signed JSON body to the endpoint you registered.
Use webhooks to:
- Confirm that an invoice payment settled, failed or was reversed, including payments made in large async batches.
- React to card and UPI transactions as they succeed, fail or get declined.
- Collect expense receipts as soon as they’re uploaded.
- Follow expenses through approval and accounting sync.
- Track payout transactions to the bank.
How it works
1
Something happens in Pazy
For example, an invoice payment settles. Pazy records an event with a unique
id.2
Pazy delivers it
Pazy sends a
POST to every endpoint of your organization that is subscribed to that event type. The body is signed with your endpoint’s secret.3
You verify and acknowledge
Your handler checks the signature, saves the event, and replies with a
2xx status quickly.4
Pazy retries if needed
Any other response, or no response in time, triggers retries with exponential backoff, up to 5 attempts.
What you need to know first
At-least-once delivery
The same event can arrive more than once. Deduplicate on the event
id.No ordering guarantee
A retried event can arrive after a newer one. Use timestamps and status fields, not arrival order.
Signed requests
Always verify
X-Pazy-Webhook-Signature before trusting a payload.Sandbox supported
Webhooks work in the sandbox too, with the same payloads and signing.
Get started
Set up an endpoint
Request an endpoint, choose events, and meet the URL requirements.
Verify signatures
Working code for Node.js, Python and Go.
Event reference
Every event type with its payload fields and an example.
Troubleshooting
Fix signature failures, missing events and duplicate deliveries.
Webhooks and the API
Webhooks tell you that something changed. They are not a replacement for the API. When you need the full record, use theid in the event to fetch it, for example with Expense Details. Treat the API as the source of truth if you ever suspect you missed an event.