Testing Webhooks
Test webhook delivery and verification in sandbox and local development.
Placeholder webhook contract
Event names, signature headers, and payload fields are illustrative until the finalized webhook specification is published.
Prove delivery, signature verification, and idempotency in sandbox before you rely on webhooks in production.
Sandbox setup
- Register a public HTTPS URL (or tunnel) in the sandbox project under Project Settings → Webhooks.
- Store the sandbox signing secret as
WEBHOOK_SECRET— verify signatures from day one, even in tests. - Trigger test events and inspect recent deliveries, response codes, and retry history in the dashboard.
Simulating events
- Use the dashboard's "Send test event" action if your sandbox offers it (illustrative).
- Otherwise complete a sandbox payment and watch your endpoint receive the real deliveries.
Test the failure path
Deliberately return 500 once, then confirm the retry arrives with the same event id.
Local development
Expose localhost with a tunnel, then use the public HTTPS URL as your endpoint:
- ngrok — simple HTTPS tunnels with public URLs
- cloudflared — Cloudflare Tunnel for local services
ngrok http 8080
# use the https://*.ngrok-free.app URL as your webhook endpointPre-production checklist
- Every request verified with
X-HellOOpass-Signatureusing constant-time comparison. - Events deduplicated by event id with a unique constraint.
-
2xxreturned only after durable persistence; heavy work runs in the background. -
5xxreturned when persistence fails, so delivery is retried. - Dead-letter queue and alerts exist for poison events and delivery failures.
-
WEBHOOK_SECRETstored securely and never logged.
Related: Webhook Event Types · Webhook Payload Structure