Open Source · MIT · Python 3.12+

Webhook debugger
for developers

Capture, inspect and replay webhooks locally with a single FastAPI process. No cloud. No accounts. No tunneling required.

Deployment
Self-hosted
Storage
SQLite — local file
Replay
Full request forwarding
Dependencies
No external services

See it in action

1 — Capture a webhook
curl -X POST http://localhost:8000/hooks/stripe \
  -H "Content-Type: application/json" \
  -d '{"type":"payment.succeeded","amount":4200}'
2 — Inspect the result
{
  "id":      "3f2a1b8c-...",
  "slug":    "stripe",
  "status":  "captured"
}
3 — Replay to any target
curl -X POST "http://localhost:8000/requests/3f2a1b8c/replay?target_url=http://localhost:3000/webhooks"

# → {"status_code": 200, "duration_ms": 48, ...}
HookDump Swagger UI — showing all captured, inspect and replay endpoints

Architecture

One process. One file. Nothing else.

Webhook provider (Stripe, GitHub, …) │ │ POST /hooks/{slug} ▼ ┌───────────────────────┐ │ HookDumpFastAPI · single process │ │ │ capture → SQLite │ hookdump.db — local file │ inspect ← SQLite │ │ replay → ──────── │──► Target URL └───────────────────────┘

Quickstart

Python

pip install -r requirements.txt
uvicorn main:app --reload

# HookDump running
# Capture endpoint : http://localhost:8000/hooks/{slug}
# Docs             : http://localhost:8000/docs

Docker

docker compose up

Data persists in a Docker named volume across restarts.

API endpoints

# Capture
POST   /hooks/{slug}              # receive any webhook

# Inspect
GET    /requests                   # list captures  ?limit=50&slug=stripe
GET    /requests/{id}             # full headers + body
DELETE /requests/{id}             # remove

# Replay
POST   /requests/{id}/replay      # replay  ?target_url=https://...

# Meta
GET    /health
GET    /docs                       # Swagger UI

Use cases

Stripe webhook debugging

Capture Stripe test events once, replay against your local handler as many times as needed — without re-triggering events from the dashboard.

GitHub webhook inspection

Inspect push, PR, and review events with full headers, including X-Hub-Signature, exactly as GitHub sends them.

Local integration testing

Use HookDump as a local inbox during development. Capture once from a tunnel, then iterate on your handler and replay on demand.

Replay failed payloads

Reproduce edge cases deterministically. The exact bytes that arrived — method, headers, body — are forwarded verbatim.

Why HookDump

Single process

No workers, no queues, no sidecars. One uvicorn command, one SQLite file.

No cloud dependency

Nothing leaves your machine. No API keys, no rate limits, no vendor lock-in.

Deterministic debugging

Replay the exact request that arrived. Byte-for-byte identical — not a reconstruction.

Minimal setup

Three dependencies. Under 200 lines across five files. Audit the whole codebase in 10 minutes.