Quick Start

5 Minutes to Your First Webhook

Instant webhook debugging in real time. No sign-up required — generate a URL, send a payload, inspect the result.

Step 1 — Grab a Listening URL

Open the WebhookLab dashboard and create a new channel. You'll receive a unique endpoint like https://wklb.io/eh/7f3a9c2d that forwards every incoming HTTP request to your browser in real time.

Channels auto-expire after 24 hours of inactivity. You can pin a custom path (e.g., /eh/payments-callback) for persistent integration testing.

Step 2 — Send a Test Payload

Use any HTTP client. Below are ready-to-run examples for curl, Python, and Node.js that hit your listening URL with a realistic Stripe-style event.

curl

curl -X POST https://wklb.io/eh/7f3a9c2d \
  -H "Content-Type: application/json" \
  -H "X-Webhook-Signature: sha256=a1b2c3d4e5f6" \
  -d '{
    "id": "evt_1NqR3kL2mP4xYz",
    "type": "payment_intent.succeeded",
    "data": {
      "object": {
        "amount": 4999,
        "currency": "usd",
        "status": "succeeded"
      }
    }
  }'

Python 3.9+

import requests

payload = {
    "id": "evt_1NqR3kL2mP4xYz",
    "type": "payment_intent.succeeded",
    "data": {
        "object": {
            "amount": 4999,
            "currency": "usd",
            "status": "succeeded"
        }
    }
}

headers = {
    "Content-Type": "application/json",
    "X-Webhook-Signature": "sha256=a1b2c3d4e5f6"
}

resp = requests.post(
    "https://wklb.io/eh/7f3a9c2d",
    json=payload,
    headers=headers
)
print(resp.status_code)  # 200

Node.js 18+

const fetch = require("node-fetch");

const payload = {
  id: "evt_1NqR3kL2mP4xYz",
  type: "payment_intent.succeeded",
  data: {
    object: { amount: 4999, currency: "usd", status: "succeeded" }
  }
};

const res = await fetch("https://wklb.io/eh/7f3a9c2d", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-Webhook-Signature": "sha256=a1b2c3d4e5f6"
  },
  body: JSON.stringify(payload)
});

console.log(res.status); // 200

Each example sends a JSON body with a custom X-Webhook-Signature header so you can verify signature validation in your own handler later. WebhookLab echoes back the full request — method, headers, body, and response status — in the live inspector.

Step 3 — Inspect in the Terminal

Open your WebhookLab channel page. Every request appears instantly with full metadata. Here's what you'll see in the built-in terminal view after running the curl command above:

Terminal Output

$ wklb listen 7f3a9c2d
▶ Listening on https://wklb.io/eh/7f3a9c2d
  ──────────────────────────────────────────────
  [14:32:07] POST /eh/7f3a9c2d
    Status: 200 OK
    Content-Type: application/json
    X-Webhook-Signature: sha256=a1b2c3d4e5f6
    Body (48 bytes):
    {
      "id": "evt_1NqR3kL2mP4xYz",
      "type": "payment_intent.succeeded",
      "data": {
        "object": {
          "amount": 4999,
          "currency": "usd",
          "status": "succeeded"
        }
      }
    }
  ──────────────────────────────────────────────

Click any request to expand raw headers, view the response you sent back (if your handler replied), and replay the exact payload for regression testing. The replay feature preserves the original timestamp and signature header so you can validate idempotency logic without touching your production systems.

What You Can Do Next

Signature Verification

Copy the X-Webhook-Signature header and the raw body into WebhookLab's signature checker. Paste your secret key (e.g., whsec_mK8vR2pL9xQ4nY7w) and confirm the HMAC-SHA256 matches before trusting the payload.

Mock Responses

Configure WebhookLab to reply with a custom status code and JSON body. Useful for testing how your service handles 500 errors, 401 unauthorized, or delayed responses when integrating with providers like GitHub, Stripe, or Twilio.

Export & Share

Download the full request log as a HAR file or a JSON array. Share a read-only link with your team so everyone sees the same webhook events without needing access to your production logs.

Need a permanent URL for CI/CD pipelines?

Create Account Read the Docs