---
title: "Forward Webhooks to Localhost & Internal Servers"
meta:
  "og:description": "Forward webhooks from any source to localhost, on-prem servers or your laptop — no public IP required. Inspect, transform, fan out and retry deliveries."
  "og:title": "Forward Webhooks to Localhost & Internal Servers"
  description: "Forward webhooks from any source to localhost, on-prem servers or your laptop — no public IP required. Inspect, transform, fan out and retry deliveries."
---

# **Webhooks on localhost**

Webhook Relay delivers webhooks from any provider to localhost, on-prem servers and private networks through an outbound agent connection — no public IP, no port forwarding, and a public URL that never changes. Stripe, GitHub, Shopify or your own app posts to your Webhook Relay endpoint; the relay agent forwards it to your laptop or internal service.

[Start Forwarding ->](https://my.webhookrelay.com/new-internal-destination) [Learn More](https://webhookrelay.com/docs/webhooks/internal/localhost)

![Cron](https://webhookrelay.com/images/landing/webhooks/behind-firewall.png)

## **Inspect payloads**

When developing locally, inspect payloads and responses in real-time to understand the event structure, what webhooks are being sent and received.

![Cron](https://webhookrelay.com/images/landing/webhooks/inspect.png)

### Private and public destinations

Configure forwarding to private and public destinations. Send webhooks to both your staging and development environments.

### Broadcasting webhooks

Multiple agents can connect to a single bucket. All your team members can connect to a bucket and receive the same webhooks. This allows seamless collaboration and testing.

### Execute serverless functions

Webhooks can trigger Functions to customize your workflows. Whether it's accessing 3rd party APIs or inserting into data warehouse, choice is yours.

## **How to receive webhooks on localhost**

1. Create a bucket — it gets a permanent public URL such as `https://my-app.hooks.webhookrelay.com`. Paste it into Stripe, GitHub, Shopify or any provider once.
2. Install the `relay` agent (a single binary for macOS, Linux and Windows, or Docker) and run `relay forward -b my-app http://localhost:3000/webhooks`.
3. Every webhook is stored, streamed to your local server over the agent's outbound connection, and logged with the response your code returned — replay any of them after a fix.

Exact commands: [receive webhooks on localhost with the relay CLI](https://webhookrelay.com/docs/webhooks/internal/localhost/). Weighing the options? See [five ways to receive webhooks on localhost](https://webhookrelay.com/blog/receive-webhooks-on-localhost/) and the [ngrok alternatives comparison](https://webhookrelay.com/blog/ngrok-alternative/).

### **When to use forwarding instead of a tunnel**

A tunnel such as ngrok exposes your whole local server on a temporary hostname. Webhook Relay forwarding is purpose-built for webhooks: the URL is permanent, requests are kept and retried while you are offline, the whole team can subscribe to the same bucket, and payloads can be filtered or transformed before they reach your code. If you do need to expose a complete service, Webhook Relay also provides [tunnels](https://webhookrelay.com/tunnels/).

|  | Webhook Relay forwarding | ngrok-style tunnel |
| --- | --- | --- |
| **Public URL stays the same** | Yes — permanent per bucket | Often a new hostname per session |
| **Works while your laptop is offline** | Yes — stored and retried for up to 30 days | No — the provider gets an error |
| **Whole team receives the same events** | Yes — many agents per bucket | No — one tunnel, one machine |
| **Filter or transform before delivery** | Yes — rules and functions | No |
| **Exposes your full local server** | No — webhooks only | Yes |
| **Replay a webhook after a fix** | Yes — from the logs, or on reconnect | No |

## **Frequently asked questions**

### **How do I receive webhooks on localhost?**

Install the relay CLI, run relay forward -b my-bucket http://localhost:3000/webhook, and give the bucket's public URL to the provider. Webhooks arrive on your laptop over the agent's outbound connection. The URL is permanent, so you configure the provider once.

### **Does the public URL change every time I restart?**

No. Each bucket has a permanent public endpoint. Restart the agent, reboot, or switch machines and the same URL keeps working — unlike free tunnel tools that assign a new hostname per session.

### **Can my whole team receive the same test webhooks?**

Yes. Any number of agents can subscribe to the same bucket, so every developer gets every event on their own machine, and a staging server can receive them at the same time.

### **Do I need to install anything?**

To deliver to localhost you run the relay agent — a single binary for macOS, Linux and Windows, or a Docker image. To only inspect payloads, use the free Webhook Bin with no install and no account.

### **How is this different from ngrok?**

ngrok exposes a full local server on a temporary hostname. Webhook Relay forwarding is purpose-built for webhooks: a persistent URL, storage and retries while you are offline, team broadcast, and optional filtering and transformation. Webhook Relay also provides tunnels for when you need to expose a complete service.

### **Can I replay a webhook to localhost after fixing a bug?**

Yes. Every request is logged; resend any of them from the dashboard, or have missed webhooks replayed automatically when the agent reconnects.

![Stripes](https://webhookrelay.com/images/stripes-dark.svg)

## **Start forwarding webhooks in minutes **

Connect a source, pick a destination, and Webhook Relay handles delivery, retries and transforms. Set up your first webhook in under five minutes.

[Start for free ->](https://my.webhookrelay.com/register)

Free plan · No credit card required · 7-day money-back guarantee on paid plans