Testing webhooks during development requires a publicly accessible HTTPS URL — your local machine's localhost is not reachable from Rackwave's servers. This article explains the tools available to expose your local server to the internet for webhook testing, plus how to use the built-in test event feature.
Method 1 — Use the Built-in Test Event Feature (Simplest)
Both MigoSMTP and Telnxo dashboards include a Send Test Event button that fires a sample payload to your registered endpoint without needing to trigger a real send. This is the fastest way to verify your endpoint is configured and responding correctly.
- Register your endpoint URL in the platform dashboard.
- Click Send Test Event or Test Webhook next to your registered endpoint.
- Select the event type you want to test (e.g.
email.delivered). - Rackwave sends a sample payload with realistic dummy data.
- Check your endpoint's response in the Delivery Log — you should see HTTP 200 returned.
- Inspect your server logs to confirm the payload was received and parsed correctly.
Method 2 — ngrok (Most Popular)
ngrok creates a secure tunnel from a public HTTPS URL to your local machine. It is free for basic use and takes under 2 minutes to set up.
Setup Steps
- Download ngrok from ngrok.com/download and install it.
- Sign up for a free ngrok account and copy your authtoken.
- Run:
ngrok config add-authtoken YOUR_TOKEN - Start your local server (e.g. on port 3000).
- In a separate terminal, run:
ngrok http 3000 - ngrok displays a public URL like:
https://abc123.ngrok-free.app - Register this URL as your webhook endpoint in MigoSMTP or Telnxo (e.g.
https://abc123.ngrok-free.app/webhooks/rackwave). - Trigger a test event — requests appear in real time in the ngrok terminal and the ngrok web inspector at
http://localhost:4040.
ngrok Web Inspector
The ngrok web inspector at http://localhost:4040 is particularly useful for webhook debugging:
- See every request received with full headers and body.
- View the exact response your endpoint returned.
- Replay any request by clicking the Replay button — resends the identical payload without needing to trigger a new event in the platform dashboard.
- Inspect timing to identify slow response times that may cause timeouts.
Method 3 — Cloudflare Quick Tunnel (No Account Required)
Cloudflare provides free tunnels with no account required for short testing sessions:
- Install cloudflared:
brew install cloudflare/cloudflare/cloudflared(macOS) or download from the Cloudflare website. - Start your local server on a port (e.g. 3000).
- Run:
cloudflared tunnel --url http://localhost:3000 - A public HTTPS URL is displayed (e.g.
https://random-words.trycloudflare.com). - Register this URL as your webhook endpoint.
Method 4 — VS Code Port Forwarding
If you use Visual Studio Code with GitHub Codespaces or VS Code Remote Tunnels:
- Open the Ports panel in VS Code (View → Terminal → Ports tab).
- Click Forward a Port and enter your local port number.
- Set the visibility to Public.
- VS Code generates a public HTTPS URL — copy it and use as your webhook endpoint.
Debugging Checklist for Local Webhook Testing
| Symptom | Check |
|---|---|
| Webhook delivery log shows connection refused | Is your local server running? Is the tunnel active? Check the correct port is forwarded. |
| Delivery log shows SSL error | The tunnel URL must use HTTPS — ensure you copied the https:// URL, not http://. |
| Endpoint receives request but returns 401 | Signature verification is failing — check your WEBHOOK_SECRET env variable matches the secret shown in the platform dashboard. |
| Endpoint returns 200 but payload is not processed | Returning 200 but throwing an error in async processing — add error logging to your background handler. |
| Timeout after 30 seconds | Heavy synchronous processing before responding — return 200 immediately and process asynchronously. |
| No request received on local server despite test event | The public URL may have changed (ngrok free tier resets on restart) — re-register the current URL in the platform dashboard. |
| JSON parsing fails | Framework is receiving the body as a Buffer instead of a string — ensure raw body middleware is configured before JSON parsing. |
Moving from Local Testing to Production
When you are ready to move from local testing to production:
- Deploy your webhook handler to a production server with a stable, permanent HTTPS URL.
- Obtain a valid TLS certificate from Let's Encrypt, your hosting provider, or a CDN (Cloudflare, AWS CloudFront).
- Update your webhook endpoint URL in the platform dashboard to the production URL.
- Ensure the
WEBHOOK_SECRETenvironment variable is set on your production server. - Send a test event from the platform dashboard to confirm the production endpoint is working before going live.
- Set up uptime monitoring on the production endpoint URL.