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

# Testing webhooks

> Exercise your handler before you depend on it.

## Locally

Your handler needs a public URL. Tunnel to it:

```bash theme={null}
ngrok http 3000
```

Register the tunnel URL in the dashboard, then trigger a real event with your
**test** key — a small virtual-account collection is the quickest.

## Confirm it actually arrived

Do not infer delivery from your own logs alone. Check both ends:

**1. Trigger an event**

Collect into a test virtual account.

**2. Watch your endpoint**

You should see one POST with a `flick-signature` header.

**3. Answer 2xx**

A non-2xx is treated as a failure, and the event may be retried or dropped.

**4. Replay if you missed it**

`POST /merchant/resend-webhook` with the transaction id.

## A checklist worth keeping

* Reject a bad `flick-signature` with `401` — and verify that you do, by sending one
* Return `2xx` before doing slow work, not after
* Handle the same `data.Id` twice without double-crediting
* Handle an unknown `status` without crashing; new events get added
* Read amounts as minor units


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.