One endpoint. Every branch. Never reconfigure.

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

The problem

You've done this before.

01 Open the Stripe dashboard. Navigate to Developers → Webhooks.
02 Update the endpoint URL. Your branch's preview URL. Again.
03 Test. Merge. The endpoint still points to a dead preview URL.
04 Switch branches. Start over. Every provider. Every developer.

One URL. Configured once. Expected to never change.

StripePaddleLemon SqueezyGitHubGitLabShopifyWooCommerceLinearSlackPagerDutyTwilioSendGridPostmarkVercelNetlify

The fix

Configure once. Route forever.

Before
# Every time you switch branches...
stripe webhooks update wh_xxx \
  --url https://pr-NEW.myapp.com/webhooks

# Then when you merge...
stripe webhooks update wh_xxx \
  --url https://myapp.com/webhooks

# Oh you forgot to update the Paddle one
# And the dev on your team has a different branch
After
# Configure Stripe once, forever:
stripe webhooks update wh_xxx \
  --url https://hookman.dev/w/acme/pay

# Register your branch deployment:
hookman register \
  --branch feature/checkout \
  --url    https://pr-42.myapp.com

# Done. Hookman routes it.

Setup

Up in 3 minutes.

01

Create a project

Sign up and create a project. Pick a slug — this becomes part of your Hookman endpoint. Your project maps to one webhook integration.

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

Register your deployments

Tell Hookman where each branch lives. Use the dashboard, the CLI, or drop the GitHub Action into your workflow.

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

Point your provider at Hookman

In Stripe (or wherever), update the webhook endpoint URL to your Hookman endpoint. You'll never need to change this URL again.

stripe listen \
  --forward-to https://hookman.dev/w/acme/payments
04

Switch branches in one click

Flip the active deployment in the dashboard or CLI. No Stripe dashboard. No copy-pasting URLs. The GitHub Action handles it automatically on every deployment.

hookman switch \
  --project payments \
  --branch  feature/checkout

# Webhooks now routed to feature/checkout

How routing works

One request in. The right branch out.

stripe webhook
POST /w/acme/payments
{ "project": "dev" }
Hookman
evaluate rules by priority
rule matches body.project == "dev"
→ routes to the dev deployment · fan-out skipped
no match → default
→ routes to the active deployment
+ also mirrored to every fan-out deployment

Rules are checked first; a match routes straight there and skips fan-out. Only when no rule matches does the request hit the active deployment — and that's when it's also mirrored to any fan-out deployments. Every delivery is logged and replayable.

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.

Automation

Drop in. Walk away.

The Hookman GitHub Action listens for deployment_status events — which fire when Vercel, Netlify, or Cloudflare Pages post a preview URL back to GitHub. It registers the deployment automatically, and removes it when the PR closes.

.github/workflows/hookman.ymlname: Hookman webhook routing

on:
  deployment_status:          # Vercel/Netlify/CF Pages posts the preview URL here
  pull_request:
    types: [closed]               # Clean up on merge

jobs:
  hookman:
    runs-on: ubuntu-latest
    steps:
      - uses: hookman-dev/register-deployment@v1
        with:
          api-key:      ${{ secrets.HOOKMAN_API_KEY }}
          org:          acme
          project:      payments
          webhook-path: /api/webhooks/stripe

Works with Vercel, Netlify, Cloudflare Pages, Render, Railway, and any platform that posts deployment URLs back to GitHub. Full reference →

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 →

Never reconfigure a webhook again.

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

Get your endpoint free