Skip to Content
GuidesWebhooks Setup

Setting up and testing webhooks

This guide covers the practical steps to configure, test, and debug your Inzi webhook integration.


Configure your webhook URL

  1. Log in to inzipay.com 
  2. Go to Settings → Webhooks
  3. Enter your endpoint URL (must be HTTPS in production)
  4. 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 POST requests
  • Read the raw request body (don’t parse JSON before verifying the signature)
  • Return a 2xx status 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 200 within 30 seconds
  • HTTPS enabled on production URL