< 2ms routing latency · Cloudflare edge · 1,000 webhooks/month free
The problem
This is every webhook service. Stripe, Paddle, GitHub, Shopify. One URL. Configured once. Expected to never change. Your branch deployments change constantly.
The fix
# 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
# 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
Sign up and create a project. Pick a slug — this becomes part of your Hookman endpoint. Your project maps to one webhook integration.
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
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
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
Capabilities
Flip the active deployment in your dashboard or with hookman switch. Webhooks follow immediately.
Include a routing key in a custom header and Hookman routes to the matching deployment automatically.
Point Hookman at a field in your webhook JSON body and routing happens based on whatever value the sender includes.
Every payload is stored. Re-deliver to any deployment without triggering a real payment or event again.
The GitHub Action registers and removes deployments automatically. Merge a PR and the deployment is cleaned up.
If your branch is spinning up, Hookman retries delivery with backoff rather than dropping the webhook. Pro and Team.
Automation
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.yml name: 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
For solo devs and side projects.
For active teams shipping regularly.
For teams with multiple collaborators.
Get a Hookman endpoint in 60 seconds. Free to start, no card required.
Get your endpoint free