> ## Documentation Index
> Fetch the complete documentation index at: https://docs.get2dial.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Test webhooks against your local machine

> Receive real webhook deliveries on your local dev server using a tunnel, and replay them while you iterate.

Get2Dial doesn't have a synthetic test-event feature — every delivery is a real event from a
real call or campaign action. To develop locally, expose your machine temporarily and trigger
real events.

## Before you start

* A tunnel tool that gives your local server a public HTTPS URL (ngrok, Cloudflare Tunnel, or
  similar) — Get2Dial requires `https://` and won't deliver to a private or loopback address.

## Steps

<Steps>
  <Step title="Start your local server and tunnel">
    Run your webhook handler locally, then start your tunnel tool pointed at its port. Note
    the public HTTPS URL it gives you.
  </Step>

  <Step title="Create a subscription pointed at the tunnel URL">
    See [React to call events](/developers/recipes/react-to-call-events) for the exact
    request. Use the tunnel's URL, and save the signing secret it returns.
  </Step>

  <Step title="Trigger a real event">
    Place or receive a test call — see [Testing without a sandbox](/developers/testing-and-sandbox)
    — to generate a real delivery.
  </Step>

  <Step title="Replay it while you iterate">
    Once you've received one real delivery, you don't need to place another test call for
    every code change. Open **Settings > Integrations > Webhooks**, find the delivery, and
    select **Replay** to resend the same payload to your endpoint again.
  </Step>
</Steps>

## Verify

<Check>
  Your local server receives the delivery, and its signature verifies successfully — see
  [Verify webhook signatures](/developers/webhooks/verify-signatures).
</Check>

## Common problems

* **Your tunnel URL changed and deliveries stopped.** Most tunnel tools issue a new URL each
  session unless you're on a paid plan with a fixed one — update the subscription's URL when
  it changes.
* **You want to test a payload shape you haven't triggered yet.** Build it from the [event
  catalog](/developers/webhooks/event-catalog)'s published example and `POST` it to your own
  endpoint directly — that tests your handler, just not the real delivery path.

## Next steps

<CardGroup cols={2}>
  <Card title="React to call events" href="/developers/recipes/react-to-call-events" />

  <Card title="Webhook delivery failures" href="/troubleshooting/webhook-delivery-failures" />
</CardGroup>
