Skip to main content
Webhook gateway

Deliver webhooks to services behind your firewall. Nix the inbound ports.

Stripe, GitHub, Twilio, and 70+ providers need to reach services in your private network. ngrok verifies every signature and routes the event to your on-prem app without arbitrary polling.

  • Calendly
  • Cyera
  • Databricks
  • GitHub
  • Grafana
  • Harvey
  • Hugging Face
  • Mercor
  • Microsoft
  • Okta
  • Open AI
  • Perplexity
  • Ramp
  • Schneider Electric
  • Twilio
  • Vercel
  • Windsurf
  • Zoom
How it works

Pipe every provider into your private network.

Run the ngrok agent next to the service that needs the webhook to dial out to ngrok's cloud on port 443. Providers deliver to your URL, ngrok verifies the signature, and the event lands on your on-prem app, without an iota of public exposure.

ngrok verifies signatures at the edge for 70+ providers. It rejects spoofed and tampered requests before they reach your compute.

The agent dials out over port 443, so your on-prem Jenkins, CI server, or internal API receives events with no inbound firewall rule and no public IP.

policy.yml

1on_http_request:2  # Verify GitHub, then trigger the on-prem Jenkins pipeline3  - name: GitHubWebhooks4    expressions:5      - "req.url.path.startsWith('/github')"6    actions:7      - type: verify-webhook8        config:9          provider: github10          secret: ${secrets.get('webhook-vault', 'github-secret')}11      - type: forward-internal12        config:13          url: https://jenkins.internal14 15  # Different provider, different upstream, any protocol, same agent config.16  # Jenkins never hears about your invoices.17  - name: StripeWebhooks18    expressions:19      - "req.url.path.startsWith('/stripe')"20    actions:21      - type: verify-webhook22        config:23          provider: stripe24          secret: ${secrets.get('webhook-vault', 'stripe-secret')}25      - type: forward-internal26        config:27          url: https://billing.internal

Store provider secrets in an encrypted vault and reference them from a single Traffic Policy, so you never scatter secrets across services.

Add a new provider with a Traffic Policy rule, not a new public endpoint. Stripe, GitHub, Bitbucket, Twilio, Slack, and dozens more run through one gateway.

Why ngrok?

Stop polling and stop hitting API rate limits. Receive events the moment they happen instead of hammering a SaaS API on a timer.

No public endpoint to stand up or defend. Cloud webhook services still need your receiver on the internet. ngrok delivers into the private network directly.

One gateway for every provider. Verification, routing, and secrets sit in a single Traffic Policy instead of duplicated in each app.

Route your first provider to on-prem in 10 minutes.

No open ports and no upfront costs. Pay only for what you use.

Frequently asked questions