A webhook is not firing. Or it is firing, but your handler is returning 500. Or it is firing and returning 200, but the data looks nothing like what you expected.
So you fire up ngrok, add fifteen console.log statements, trigger the event manually, wait, scroll through terminal noise, and hope you catch the one line that matters.
There has to be a better way. And now there is.
Webhooks are the backbone of modern application integration. But debugging them is stuck in the dark ages.
Once a webhook fires, it disappears. There is no browser DevTools for server-side HTTP requests.
Providers cannot reach localhost:3000. You need a tunnel tool, another process, another terminal tab.
Each provider has a different signing mechanism. Getting it wrong means silent failures with no error messages.
Something failed? Copy the payload, craft a curl command, hope you got the headers right. Want to replay 50 events? Good luck.
Depify gives you a permanent webhook URL that captures every incoming request and makes it inspectable, replayable, and debuggable.
Depify does not just capture raw JSON blobs. It understands the webhooks it receives.
Our smart parser auto-detects the provider and transforms raw payloads into human-readable summaries.
| Provider | Raw Event | Depify Summary |
|---|---|---|
| Stripe | invoice.payment_succeeded |
"Payment of $49.99 succeeded for customer cus_abc123" |
| GitHub | push |
"3 commits pushed to main by @johndoe" |
| Shopify | orders/create |
"New order #1042 for $127.50 (3 items)" |
| Twilio | MessageStatus |
"SMS to +1-555-0123 delivered" |
| SendGrid | delivered |
"Email to user@example.com delivered (open rate: 42%)" |
| Razorpay | payment.captured |
"Payment of 4,999 INR captured for order ord_xyz" |
Found a bug in your handler? Fix the code, then replay the exact same webhook with one click. No need to trigger a real event in your test environment.
But Depify goes further. You can edit the payload before replaying.
Test edge cases by modifying specific values in the payload before replaying.
Test forward compatibility by adding new fields that a provider might introduce.
Test graceful degradation by removing fields to simulate provider changes.
Change the event type to test different webhook handlers with the same payload structure.
// Original Stripe webhook payload
{
"type": "invoice.payment_succeeded",
"data": {
"object": {
"amount_paid": 4999,
"currency": "usd",
"customer": "cus_abc123"
}
}
}
// Edit before replay: test a failed payment
{
"type": "invoice.payment_failed",
"data": {
"object": {
"amount_paid": 0,
"amount_due": 4999,
"currency": "usd",
"customer": "cus_abc123",
"attempt_count": 3,
"next_payment_attempt": null
}
}
}
Each provider signs payloads differently. Depify verifies signatures automatically and shows you the verification result alongside each captured event.
Depify shows you exactly why: wrong signing secret, timestamp outside tolerance, payload modified in transit, or wrong signature header being read.
Depify includes a built-in tunnel that replaces ngrok for webhook development. Set it up with one command.
# Install the Depify CLI
npm install -g @depify/cli
# Start the tunnel
depify tunnel --port 3000 --project my-saas
# Output:
# Tunnel active: https://wh.depify.io/p/my-saas
# Forwarding to: http://localhost:3000/webhooks
# Dashboard: https://app.depify.io/webhooks/my-saas
The tunnel is backed by WebSocket (Action Cable), so it is fast and reliable. Unlike free-tier tunnel tools, there are no request limits, no session timeouts, and no random URLs that change every restart.
When your webhook handler goes down for an extended period, you can lose hundreds of events. With Depify, every webhook is captured regardless of handler health.
When you recover from an outage, you can filter, select, and bulk replay events.
# Bulk replay via CLI
depify replay \
--project my-saas \
--from "2026-03-23T10:00:00Z" \
--to "2026-03-23T13:00:00Z" \
--provider stripe \
--concurrency 5 \
--delay 200ms \
--target http://localhost:3000/webhooks/stripe
# Output:
# Found 247 events matching criteria
# Replaying: [=========> ] 112/247 (45%)
# Success: 110 | Failed: 2 | Pending: 135
Creating a webhook project in Depify takes 30 seconds.
curl -X POST https://api.depify.io/api/v1/webhook_projects \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"webhook_project": {
"name": "Production Webhooks",
"forward_url": "https://api.myapp.com/webhooks",
"providers": ["stripe", "github", "shopify"],
"signing_secrets": {
"stripe": "whsec_abc123...",
"github": "gh_webhook_secret_xyz"
},
"retry_policy": {
"max_retries": 3,
"backoff": "exponential"
}
}
}'
"We replaced ngrok, RequestBin, and 200 lines of custom logging middleware with Depify. The payload editing feature alone has saved us hours of debugging."
Webhook debugging is available on all Depify plans. The free tier includes 1 webhook project with 100 captured events.
Pro plans include unlimited projects and 30-day event retention.
Capture, inspect, replay, and forward webhooks from any provider. No more terminal logs.
Start Free Trial