Free Webhook Testing Tool — The Best RequestBin Alternative

Published March 2026 5 min read Beginner-friendly

Need to test webhooks from Stripe, GitHub, Slack, or any other service? You need a URL that captures incoming HTTP requests so you can inspect them. RequestBin used to be the go-to tool, but its free tier is limited and requires signup.

Webhook Inspector is a free, open alternative. Create a unique URL, point your webhook at it, and inspect every request — headers, body, method, and timing. No signup. No rate limits. Works in 10 seconds.

TL;DR: Run curl -X POST https://webhook-inspector-landing-one.vercel.app/new to get a free webhook URL instantly. Send webhooks to it, then poll for captured requests.

Why You Need a Webhook Testing Tool

Webhooks are how modern services notify your app about events — a payment was processed, a pull request was merged, a message was sent. But debugging webhooks is painful:

A webhook testing tool gives you a public URL that captures every request, so you can see exactly what's being sent before you write a single line of handler code.

Quick Start: Test a Webhook in 3 Steps

1 Create an inbox

# Create a free webhook URL (no signup needed)
curl -X POST https://webhook-inspector-landing-one.vercel.app/new

Response:

{
  "id": "a1b2c3d4e5f6",
  "url": "https://webhook-inspector-landing-one.vercel.app/a1b2c3d4e5f6",
  "inspectUrl": "https://webhook-inspector-landing-one.vercel.app/inspect/a1b2c3d4e5f6",
  "expiresInHours": 24,
  "maxRequests": 100
}

You get two URLs: the webhook URL (where you point your service) and the inspect URL (where you view captured requests in a browser).

2 Send a webhook to it

Point your service at the webhook URL — or test it manually with curl:

# Simulate a Stripe payment webhook
curl -X POST https://webhook-inspector-landing-one.vercel.app/a1b2c3d4e5f6 \
  -H "Content-Type: application/json" \
  -H "Stripe-Signature: t=1234,v1=abc123" \
  -d '{
    "type": "payment_intent.succeeded",
    "data": {
      "object": {
        "amount": 4999,
        "currency": "usd",
        "customer": "cus_ABC123"
      }
    }
  }'

Response:

{"ok": true, "inbox": "a1b2c3d4e5f6", "received": "2026-03-03T14:52:57.704Z"}

3 Inspect captured requests

View the webhook in your browser at the inspect URL, or poll via API:

# Get all captured requests
curl https://webhook-inspector-landing-one.vercel.app/api/inbox/a1b2c3d4e5f6/requests

Response:

{
  "inbox": {
    "id": "a1b2c3d4e5f6",
    "requestCount": 1
  },
  "requests": [
    {
      "method": "POST",
      "headers": {
        "content-type": "application/json",
        "stripe-signature": "t=1234,v1=abc123"
      },
      "body": "{\"type\":\"payment_intent.succeeded\",\"data\":{...}}",
      "ip": "203.0.113.45",
      "receivedAt": 1772549577
    }
  ]
}

Every detail is captured: HTTP method, headers, body, source IP, and timestamp. You can see exactly what your webhook provider is sending.

Webhook Inspector vs RequestBin vs Alternatives

Feature Webhook Inspector RequestBin Webhook.site Beeceptor
Free tier Unlimited 20 requests/day 500 requests 50 requests/day
No signup required Yes No Yes No
REST API Yes Yes Paid only No
Browser inspector Yes Yes Yes Yes
HTTPS Yes Yes Yes Yes
Any HTTP method Yes Yes Yes Yes
Programmatic inbox creation Yes Paid only No No
Inbox duration 24 hours 48 hours Varies 24 hours

Common Use Cases

Testing Stripe Webhooks

When building payment integrations, you need to handle events like payment_intent.succeeded, charge.failed, and customer.subscription.updated. Create a webhook URL and add it in the Stripe Dashboard to see exactly what Stripe sends.

# 1. Create inbox
INBOX=$(curl -s -X POST https://webhook-inspector-landing-one.vercel.app/new | python3 -c "import json,sys; print(json.load(sys.stdin)['url'])")
echo "Add this URL to Stripe webhooks: $INBOX"

# 2. Trigger a test event in Stripe dashboard
# 3. Check what arrived
curl -s https://webhook-inspector-landing-one.vercel.app/api/inbox/$(basename $INBOX)/requests | python3 -m json.tool

Testing GitHub Webhooks

GitHub sends webhooks for pushes, pull requests, issues, and 30+ other events. Use Webhook Inspector to see the payload structure before writing your handler.

# Simulate a GitHub push event
curl -X POST https://webhook-inspector-landing-one.vercel.app/YOUR_INBOX_ID \
  -H "Content-Type: application/json" \
  -H "X-GitHub-Event: push" \
  -H "X-GitHub-Delivery: abc-123-def" \
  -d '{
    "ref": "refs/heads/main",
    "repository": {"full_name": "user/repo"},
    "commits": [{"message": "Fix bug #42"}]
  }'

Testing Slack Webhooks

When building Slack bots or integrations, you need to handle slash commands, interactive messages, and event subscriptions. Capture them with a test URL first.

CI/CD Pipeline Testing

Webhook Inspector is useful for testing notification webhooks from CI/CD services like GitHub Actions, CircleCI, or Jenkins. Verify your deployment notifications are correct before wiring them into your monitoring.

Using the REST API Programmatically

Unlike most webhook testing tools, Webhook Inspector has a full REST API. This means you can integrate it into your automated tests.

Python Example

import requests
import time

# Create a test inbox
inbox = requests.post("https://webhook-inspector-landing-one.vercel.app/new").json()
webhook_url = inbox["url"]
inbox_id = inbox["id"]

print(f"Webhook URL: {webhook_url}")

# Simulate your application sending a webhook
requests.post(webhook_url, json={
    "event": "order.shipped",
    "order_id": "ORD-789",
    "tracking": "1Z999AA10123456784"
})

# Wait a moment, then check what was captured
time.sleep(1)
result = requests.get(
    f"https://webhook-inspector-landing-one.vercel.app/api/inbox/{inbox_id}/requests"
).json()

for req in result["requests"]:
    print(f"Method: {req['method']}")
    print(f"Body: {req['body']}")
    print(f"Headers: {req['headers']}")

Node.js Example

// Create inbox and test webhook delivery
const res = await fetch("https://webhook-inspector-landing-one.vercel.app/new", {
  method: "POST"
});
const inbox = await res.json();

console.log(`Webhook URL: ${inbox.url}`);

// Send a test webhook
await fetch(inbox.url, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    event: "user.registered",
    userId: "usr_456",
    email: "dev@example.com"
  })
});

// Check captured requests
const captured = await fetch(
  `https://webhook-inspector-landing-one.vercel.app/api/inbox/${inbox.id}/requests`
).then(r => r.json());

console.log(`Captured ${captured.requests.length} request(s)`);
captured.requests.forEach(req => {
  console.log(`  ${req.method} — ${req.body}`);
});

Integration Testing with Webhook Inspector

One of the most powerful uses is in automated integration tests. Instead of mocking webhook handlers, create a real inbox and verify that your service sends the correct payload:

# In your test script

# 1. Create a test inbox
INBOX=$(curl -s -X POST https://webhook-inspector-landing-one.vercel.app/new)
INBOX_URL=$(echo $INBOX | python3 -c "import json,sys; print(json.load(sys.stdin)['url'])")
INBOX_ID=$(echo $INBOX | python3 -c "import json,sys; print(json.load(sys.stdin)['id'])")

# 2. Configure your app to send webhooks to this URL
# (e.g., set WEBHOOK_URL=$INBOX_URL in your test config)

# 3. Trigger the action in your app
curl -X POST http://localhost:8080/api/orders -d '{"item": "widget", "qty": 3}'

# 4. Verify the webhook was sent correctly
sleep 2
REQUESTS=$(curl -s https://webhook-inspector-landing-one.vercel.app/api/inbox/$INBOX_ID/requests)
COUNT=$(echo $REQUESTS | python3 -c "import json,sys; print(json.load(sys.stdin)['inbox']['requestCount'])")

if [ "$COUNT" -eq 1 ]; then
  echo "PASS: Webhook was sent"
else
  echo "FAIL: Expected 1 webhook, got $COUNT"
  exit 1
fi

Start Testing Webhooks Now

No signup. No credit card. Just create an inbox and go.

Open Webhook Inspector

or run: curl -X POST https://webhook-inspector-landing-one.vercel.app/new

API Reference

Method Endpoint Description
POST /new Create a new inbox (returns webhook URL)
ANY /{id} Send a webhook (GET, POST, PUT, PATCH, DELETE)
GET /inspect/{id} View inbox in browser (HTML UI)
GET /api/inbox/{id}/requests Poll for captured requests (JSON API)

FAQ

How long do inboxes last?

Each inbox expires after 24 hours and can capture up to 100 requests. Create a new inbox anytime you need one.

Is it really free?

Yes. No signup, no API key, no rate limits on inbox creation. Completely free for development and testing.

Can I use it in CI/CD pipelines?

Absolutely. The REST API makes it easy to create inboxes and poll for requests programmatically. See the integration testing example above.

Does it support all HTTP methods?

Yes. GET, POST, PUT, PATCH, DELETE, and any custom method. Headers, query parameters, and request body are all captured.

Can I test multiple webhooks at once?

Yes. Create multiple inboxes and point different webhook sources at each one. Each inbox independently captures up to 100 requests.