Configure once.
Route forever

Create permanent webhook endpoints that automatically route to the correct branch deployment. No more updating links. No more confusion.

< 2ms routing latency · Cloudflare edge · 1,000 webhooks/month free

A new way to work

Branches change.
Endpoints don’t

Hookman sits between your webhook providers and your deployments, so Stripe, Paddle and the rest can keep pointing at the same endpoint.

Switch branches, add routing rules or send the same event to multiple deployments without touching your provider configuration.

Branch A Branch B Live

Setup

Up in 3 minutes

  1. 01

    Create a project

    Create an account and project. The project slug becomes part of your permanent Hookman webhook endpoint.

    https://hookman.dev/w/your-org/your-project
  2. 02

    Register your deployments

    Tell Hookman where each branch is running using the dashboard, CLI or GitHub Action.

    hookman register \
      --branch feature/checkout \
      --url    https://pr-42.myapp.com/api/webhooks/stripe
  3. 03

    Point your provider at Hookman

    Update Stripe or another webhook provider once to use the Hookman endpoint. You then leave it unchanged.

    Webhook URL https://hookman.dev/w/acme/payments
  4. 04

    Switch branches in one click

    Choose the active deployment from the dashboard or CLI, or automate the process through GitHub.

    hookman switch \
      --project payments \
      --branch  feature/checkout
    
    # Webhooks now routed to feature/checkout

#1 Switch routing

“Point a webhook somewhere but let me change it later ”

Pick a deployment, hit activate, done. Every webhook that hits your endpoint goes there until you say otherwise. No dashboard trips to Stripe, no ngrok URL in a Slack thread, no redeploy.

Capabilities

What Hookman does

Switch the active branch

Flip which deployment is live from the dashboard or hookman switch. Every webhook with no matching rule follows the active deployment — instantly, no provider changes.

Dynamic routing rules

Match on a header, query param or a field in the JSON body. First match wins; otherwise it falls through to the active deployment. The CLI and GitHub Action can register rules per-branch on deploy.

Fan-out

Mirror every default-routed webhook to extra deployments at once — test a refactor against real traffic while production keeps running. Toggle it per deployment.

Replay any webhook

Every payload is stored. Re-deliver it to any deployment without triggering a real payment or event again — syntax-highlighted bodies and headers in the log viewer.

Auto-register via CI

The GitHub Action registers a deployment (and its branch rule) on every push, and tears it down when the PR merges. Scoped API keys keep CI access tight.

Retry on failure

If your branch is still spinning up, Hookman retries delivery with backoff rather than dropping the webhook. Pro and Team.

Logging

Every webhook, on the record

Start at the wall of green. Drill into the one that isn't. Replay it once it's fixed.

Confidence

Know it's working, without asking anyone.

Every delivery is logged the moment it happens: status, timing, target, and the rule that picked it. Filter by status, method, time window or routing key and scan. A wall of 2xx is the whole answer, and you didn't write a line of logging to get it.

Logging sits off the hot path: the webhook is answered first, the record written after. Your provider never waits on us.

ReceivedMethodRoutingStatusLatency
20/09/2026, 12:02:38POSTswitch 2001.8ms
20/09/2026, 12:01:12POSTswitch 2002.3ms
20/09/2026, 11:20:37POSTswitch 2001.9ms

Diagnosis

When one goes red, open it.

The log holds both halves of the exchange: the request exactly as it arrived — headers, body, source — and the response your endpoint sent back. Failures are named, not guessed: timed out, connection refused, upstream 5xx. You'll know in a second whether your server rejected the webhook or never received it.

If routing was the problem, the log shows which rules were evaluated and why none matched.

Received
20/09/2026, 09:41:31
Method
POST
Status
200
Latency
730ms
Routing
switch
Replay
no
Source IP
3.209.55.129
Routed to
https://api.hybridtrainingplan.app/auth/strava/webhook

Replay

Fixed it? Send the same webhook again.

The original payload is kept — real headers, real bytes, 7 days on Free, 30 on Pro, 90 on Team. Hit replay and it goes again: to the same target, or to any other deployment on the project, including your laptop.

Signatures still verify, because it's the same request, not a reconstruction. No begging Stripe for another test event.

Received main - https://api.hybridtrainingplan.app/auth/strava/webhook

Re-send to:
https://api.hybridtrainingplan.app/auth/strava/webhook

Replay

Pricing

Transparent pricing

Free

£0/mo

For solo devs and side projects.

  • 1 project
  • 3 deployments per project
  • 1,000 webhooks/month
  • 7-day log retention
  • All routing methods
  • Webhook replay
Start free
Most popular

Pro

£12/mo

For active teams shipping regularly.

  • 10 projects
  • 20 deployments per project
  • 50,000 webhooks/month
  • 30-day log retention
  • Retry on failure
  • £0.50/1k overage
Start with Pro

Team

£49/mo

For teams with multiple collaborators.

  • Unlimited projects
  • Unlimited deployments
  • 500,000 webhooks/month
  • 90-day log retention
  • Up to 5 team members
  • Priority support
Start with Team

Full pricing comparison →

News

Latest from Hookman

All posts →

Changelog

  • New Live tail and routing decisions (hookman tail, live dashboard log, 'why did it go there?')
  • Release @hookman/cli v0.13.0
  • Fixed cli · Hookman tail prints its ready line to stderr in --json mode too
  • Release @hookman/cli v0.13.1

Changelog

  • New Claude Code plugin for the Hookman CLI, a marketplace entry, and llms.txt
  • Fixed Private-host check false positives and gaps; log webhooks that match no route
Wes West
Hookman has changed everything for me. Don’t wait, just try it and start feeling the benefits.
— Wes West, Creative Director at Jolt Studio

Never reconfigure a webhook again

Get a Hookman endpoint in 60 seconds. Free to start, no card required.

Get your endpoint free