All posts
product

What is Webhook Watchtower?

I built the tool I always wished existed when debugging webhook failures. What it does, why I built it, and what's included.

9 June 20265 min read

I spent an embarrassing amount of time staring at server logs trying to answer one question: did this webhook actually arrive?

Not "did it get processed correctly" or "did it trigger the right action." Just: did it arrive. That should be a five-second lookup. It never was.

That's what Webhook Watchtower fixes.

Why I built it

Webhooks fail silently. No exception in your logs, no alert, just a customer emailing to say something didn't happen. Then you spend an hour reconstructing what went wrong from two different dashboards and a timeline that doesn't quite add up.

I kept building the same rough solution at every job: a dedicated ingest route, some basic logging, a way to see what arrived. Never quite good enough, always the last thing prioritised.

At some point I decided to build it properly, as a standalone product. Something you could point any webhook provider at and immediately have full visibility into what's arriving, what's failing, and what you need to do about it.

What it does

Webhook Watchtower sits between your webhook providers and your own endpoints. Every event that comes in is captured in full, forwarded to your destination, and tracked through its entire delivery lifecycle.

What that looks like in practice:

  • Captured - full headers, raw body, method, and timestamp on every ingest
  • Verified - HMAC signature checked against your secret before anything is forwarded
  • Forwarded - delivered to your endpoint asynchronously, with automatic retries if it fails
  • Tracked - every attempt recorded with the exact response code, response body, and timing
  • Replayable - one click to re-send any event, whether it failed last week or just now

"The provider says delivered but we have nothing" becomes a thing of the past.

What's included

Live event stream

Events appear in the dashboard the moment they land at your ingest URL. No polling, no refreshing. You can watch traffic arrive in real time, which is useful when setting up a new integration or debugging something live.

Signature verification

Stripe, GitHub, and Shopify each have their own signature format. Watchtower handles all three natively. For anything else, custom HMAC-SHA256 is supported. Every event is stamped Verified, Failed, or Skipped so you always know whether a request was trusted.

Failed events can be quarantined: stored for inspection but not forwarded to your endpoint until you decide what to do with them.

Delivery retries with exponential backoff

Failed deliveries retry automatically based on your plan. Correction (15 October 2026): the retry schedule uses fixed waits of 1 minute, 5 minutes, 30 minutes, then 2 hours, with no jitter. Current default attempts are Scout 1, Guard 3, Sentinel 5, and Bastion 5, subject to workspace settings and grandfathered plans.

PlanAttemptsSchedule
Scout1No retries - manual replay only
Guard31 min, 2 min
Sentinel51 min, 2 min, 4 min, 8 min
Bastion51 min, 2 min, 4 min, 8 min

When all attempts are exhausted, you get an email and an in-app notification. The event stays stored so you can replay it when you're ready.

Delivery status that reflects reality

A delivery in progress shows as Retrying with the current attempt count. You can see at a glance whether the system is still working on something or has genuinely given up. The replay button only appears once retries are exhausted, so you can't accidentally interfere with an in-progress delivery.

Replay - single and batch

Any event can be replayed individually from the detail view. You can also select a range and replay them all at once, which is useful after an outage when you need to push through a backlog. Replay history is logged so there's no ambiguity about what was triggered and when.

Error diagnostics

Every failed attempt records a structured error category: connection error, timeout, HTTP 4xx, HTTP 5xx. Diagnosing failure patterns across a destination takes seconds, not a grep through raw logs.

Audit log

Every action in your workspace is recorded: who created or deleted a source, who rotated a token, who replayed an event, what changed in a destination config. Each entry shows a before/after diff. Sensitive fields like signing secrets are masked.

Sources and destinations use soft delete, so nothing is permanently gone on the first click.

Team workspaces

Invite teammates by email. Role-based access (owner, admin, member) is enforced across the API and the dashboard. New members land directly in your workspace after accepting their invite.


Pricing

Four tiers, monthly or annual. No surprises.

PlanPriceEvents/monthRetention
ScoutFree10,0001 day
Guard£19/mo100,0007 days
Sentinel£59/mo500,00030 days
Bastion£149/mo2,000,00090 days

Scout is free forever, no card required. It's enough to try the product on a real integration before deciding whether to upgrade.

What's coming

The core is solid. A few things on the roadmap:

  • Advanced filtering - search across payloads, filter by header values, response codes, verification status
  • Webhook transformations - reshape a payload before forwarding, without needing an intermediate service
  • More provider presets - native setup flows for popular providers beyond Stripe, GitHub, and Shopify
  • Delivery analytics - success rate trends, latency distributions, reliability metrics over time

Follow the changelog as things ship.


If you want early access or have questions, email hello@webhookwatchtower.co.uk. I read every one.

Share this post

Webhook Watchtower

Stop debugging webhooks in logs.

Capture every event, replay failures, and get alerted when deliveries fail, without changing your existing setup.

Try it free →