Skip to main content
Webhooks require a public HTTPS endpoint. For local development, tunnel traffic through ngrok or a similar tool.

Option 1: ngrok

ngrok prints a public URL like https://abc123.ngrok-free.app. Use that as the webhook URL:
ngrok URLs change on restart unless you have a paid plan with reserved subdomains. Easy pattern: update the webhook URL on startup via a pre-test script.

Option 2: Cloudflare Tunnel

Free, no URL rotation:
Creates a stable https://foo-bar-baz.trycloudflare.com URL.

Option 3: VS Code / JetBrains port forwarding

Recent versions of both IDEs have built-in public tunneling. VS Code: Ports panel → Forward a PortPort Visibility: Public.

Testing without tunnels

If you just want to confirm your handler logic without a live Sly webhook, call your endpoint directly:
Then:

Fire test deliveries

The simplest way to exercise your handler with a real Sly-signed payload:
Sends a webhook.test event (or a canned event of the type you specify) through the real delivery pipeline.

Local inspection

The dashboard’s webhook detail page shows the last 100 deliveries per endpoint, including request/response bodies and timing. Much easier than grepping server logs. Programmatic access:

Tunnel-less alternative: SSE

If tunneling is a pain, ship with persistent SSE instead — your code makes an outbound connection and receives events. No inbound port needed. Ideal for dev environments, local agents, and anything behind corporate firewalls.