Setting up and testing webhooks
This guide covers the practical steps to configure, test, and debug your Inzi webhook integration.
Configure your webhook URL
- Log in to inzipay.com
- Go to Settings → Webhooks
- Enter your endpoint URL (must be HTTPS in production)
- Copy the Webhook Secret — you’ll need it to verify signatures
You can also override the webhook URL per-checkout by passing webhook_url in the create checkout request.
Set up your endpoint
Your webhook endpoint must:
- Accept
POSTrequests - Read the raw request body (don’t parse JSON before verifying the signature)
- Return a
2xxstatus code within 30 seconds
// Express.js — use raw body for signature verification
app.use('/webhooks/inzi', express.raw({ type: 'application/json' }))
app.post('/webhooks/inzi', (req, res) => {
const event = verifyWebhook(req.body.toString(), req.headers, WEBHOOK_SECRET)
// Process event...
res.json({ ok: true })
})Test with test mode
Use your sk_test_ key to create checkouts. A mock checkout.completed webhook fires automatically after 5 seconds.
curl -X POST https://api.inzilink.com/api/v1/checkouts \
-H "Authorization: Bearer sk_test_xxxxx" \
-H "Content-Type: application/json" \
-d '{"amount": "10.00", "currency": "USD", "webhook_url": "https://yoursite.com/webhooks/inzi"}'Use a tunnel for local development
For local development, use a tunneling service to expose your local server:
# Using ngrok
ngrok http 3000
# → https://abc123.ngrok.app
# Use the ngrok URL as your webhook_url
curl -X POST https://api.inzilink.com/api/v1/checkouts \
-H "Authorization: Bearer sk_test_xxxxx" \
-d '{"amount": "10.00", "currency": "USD", "webhook_url": "https://abc123.ngrok.app/webhooks/inzi"}'Debug failed deliveries
Check the webhook dashboard at Dashboard → Webhooks to see:
- Delivery status (success/failed)
- Request/response details
- Retry attempts
You can manually retry failed webhooks from the dashboard.
Checklist before going live:
- Signature verification works
- Idempotency handling (deduplicate by
checkout_id) - All 3 event types handled:
completed,expired,underpaid - Endpoint returns
200within 30 seconds - HTTPS enabled on production URL