Skip to main content

Request Debugger

Special Cloudflare Tunnel with built-in HTTP server and request loggingβ€”perfect for debugging webhooks and testing API integrations.

What is Request Debugger?​

Simple Explanation: Request Debugger is a special tunnel type that includes a built-in HTTP server that logs every incoming request. You don't need a local service runningβ€”just start the debugger and give the URL to webhook providers.

Perfect for:

  • πŸͺ Webhook development
  • πŸ” Understanding third-party requests
  • πŸ§ͺ API integration testing
  • πŸ“Š Inspecting HTTP requests
  • πŸ› Debugging external services

How It Differs from Standard Tunnel​

Standard Tunnel​

Your Local Service (must be running)
↓
Cloudflare Tunnel
↓
Public URL β†’ Your Service

Requirements:

  • Local service must be running
  • Must handle requests properly
  • Need to check service logs

Request Debugger​

Built-in HTTP Server (automatic)
↓
Cloudflare Tunnel + Request Logging
↓
Public URL β†’ Logs Everything

Features:

  • No local service needed
  • Automatic port selection
  • Logs all requests
  • Visual request inspector

Creating Request Debugger​

Step 1: Create New​

Cloudflare Tunnels tab
β†’ Click "New Tunnel"
β†’ Select "Request Debugger"

or

Click "New Request Debugger" directly

Step 2: Configure​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ New Request Debugger β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Name: * β”‚
β”‚ [Stripe Webhook Testing ] β”‚
β”‚ β”‚
β”‚ Description: β”‚
β”‚ [Debug Stripe payment webhooks] β”‚
β”‚ β”‚
β”‚ [βœ“] Auto-start β”‚
β”‚ β”‚
β”‚ [Cancel] [Create] β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Step 3: Start & Get URL​

Click "Create" β†’ Click "Start"

Status: Starting... β†’ Active ●

Public URL generated:
https://webhook-test-5f2c.trycloudflare.com

Copy and use this URL for webhooks!

Viewing Request Logs​

Request List​

Click tunnel to open details:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Webhook Testing - Request Log β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ [Clear Logs] [Export] [Auto-scroll]β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ 2:45:32 PM POST /webhook/stripe β”‚
β”‚ 200 OK β”‚
β”‚ Content-Type: application/json β”‚
β”‚ [View Details] β”‚
β”‚ β”‚
β”‚ 2:44:18 PM POST /api/callback β”‚
β”‚ 200 OK β”‚
β”‚ Content-Type: application/json β”‚
β”‚ [View Details] β”‚
β”‚ β”‚
β”‚ 2:43:05 PM GET / β”‚
β”‚ 200 OK β”‚
β”‚ Content-Type: text/html β”‚
β”‚ [View Details] β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Shows:

  • ⏰ Timestamp
  • πŸ”€ Method (GET, POST, PUT, DELETE, etc.)
  • πŸ“ Path
  • βœ… Status code
  • πŸ“‹ Content-Type
  • πŸ” View details button

Request Details​

Click "View Details" to see everything:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Request Details [βœ•] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Time: 2:45:32 PM β”‚
β”‚ Method: POST β”‚
β”‚ Path: /webhook/stripe β”‚
β”‚ Status: 200 OK β”‚
β”‚ β”‚
β”‚ ─── Headers ────────────────────────────── β”‚
β”‚ Content-Type: application/json β”‚
β”‚ User-Agent: Stripe/1.0 β”‚
β”‚ Stripe-Signature: t=123,v1=abc... β”‚
β”‚ Content-Length: 1234 β”‚
β”‚ β”‚
β”‚ ─── Query Parameters ───────────────────── β”‚
β”‚ event_type: payment_intent.succeeded β”‚
β”‚ test: true β”‚
β”‚ β”‚
β”‚ ─── Body ───────────────────────────────── β”‚
β”‚ { β”‚
β”‚ "id": "evt_123", β”‚
β”‚ "object": "event", β”‚
β”‚ "type": "payment_intent.succeeded", β”‚
β”‚ "data": { β”‚
β”‚ "object": { β”‚
β”‚ "id": "pi_123", β”‚
β”‚ "amount": 2000, β”‚
β”‚ "currency": "usd" β”‚
β”‚ } β”‚
β”‚ } β”‚
β”‚ } β”‚
β”‚ β”‚
β”‚ ─── Response ───────────────────────────── β”‚
β”‚ 200 OK β”‚
β”‚ {"received": true} β”‚
β”‚ β”‚
β”‚ [Copy JSON] [Export] [Close] β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Everything captured:

  • βœ… Full headers
  • βœ… Query parameters
  • βœ… Request body
  • βœ… Response sent
  • βœ… Formatted JSON

Use Cases​

1. Stripe Webhook Testing​

Scenario: Testing Stripe payment webhooks

Steps:

1. Create Request Debugger:
Name: Stripe Webhooks

2. Start and copy URL:
https://stripe-test-123.trycloudflare.com

3. In Stripe Dashboard:
β†’ Developers β†’ Webhooks
β†’ Add endpoint
β†’ Paste URL + /webhook
β†’ Select events

4. Trigger test event in Stripe

5. View request in Xermius:
- See webhook data
- Check Stripe-Signature header
- Verify event format

What you see:

{
"id": "evt_1234567890",
"type": "payment_intent.succeeded",
"data": {
"object": {
"id": "pi_1234567890",
"amount": 5000,
"currency": "usd",
"status": "succeeded"
}
}
}

Stripe-Signature header captured:

t=1678886400,
v1=5257a869e7ecebeda32affa62cdca3fa51cad7e77a0e56ff536d0ce8e108d8bd

2. GitHub Webhook Development​

Scenario: Building GitHub webhook integration

Steps:

1. Start Request Debugger

2. Copy URL:
https://github-hook-xyz.trycloudflare.com

3. In GitHub repo settings:
β†’ Webhooks β†’ Add webhook
β†’ Payload URL: [paste URL]
β†’ Content type: application/json
β†’ Events: Push, Pull request

4. Make a commit or PR

5. See webhook in real-time:
- Full payload
- Headers
- Signature verification data

3. Payment Gateway Testing​

Scenario: Testing payment callback

Setup:

Request Debugger URL:
https://payment-test-abc.trycloudflare.com/callback

Configure in payment gateway:
Callback URL: https://payment-test-abc.trycloudflare.com/callback

Make test payment

View callback details:
- Transaction ID
- Status
- Amount
- Customer data

4. OAuth Callback Testing​

Scenario: Testing OAuth flow

Steps:

1. Start debugger

2. Use as OAuth redirect URI:
https://oauth-test-456.trycloudflare.com/callback

3. Configure in OAuth provider

4. Initiate OAuth flow

5. See callback:
- Authorization code
- State parameter
- Query parameters

5. API Integration Understanding​

Scenario: Third-party will call your API

Problem: Don't know request format

Solution:

1. Give them Request Debugger URL

2. They make test requests

3. You see EXACTLY what they send:
- Headers
- Authentication
- Body format
- Query params

4. Now you know how to build your API!

Managing Logs​

Auto-scroll​

[βœ“] Auto-scroll

New requests automatically scroll to top
Always see latest
Perfect for real-time testing

Clear Logs​

Click "Clear Logs" button

Removes all logged requests
Fresh start
(Note: Can't be undone)

Export Logs​

Click "Export" button

Export formats:
- JSON (all request data)
- CSV (summary)
- HAR (HTTP Archive)

Use for:
- Documentation
- Bug reports
- Analysis

Filter Requests​

Search bar:
[Search requests... ]

Filter by:
- Path (/webhook)
- Method (POST)
- Status (200)
- Content

Quick find specific requests

Delete Single Request​

Hover over request
β†’ Click Γ— button
β†’ Request removed

Remove test requests
Keep logs clean

Request Details Features​

Copy Functions​

Copy JSON:

Click "Copy JSON"
β†’ Request body copied to clipboard
β†’ Paste into code editor
β†’ Use in tests

Copy Headers:

Right-click header
β†’ Copy header
β†’ Use for testing

Copy URL:

Copy full request URL
Test in curl, Postman, etc.

Export Individual Request​

Export button in details
β†’ Save as JSON file
β†’ Share with team
β†’ Document API format

Test Response​

View what was sent back:

Response section shows:
- Status code (200, 404, etc.)
- Response body
- Response time

Debugger always responds with:
200 OK
{"received": true}

Tips & Best Practices​

1. One Debugger Per Integration​

Don't:
βœ— Use one debugger for everything

Do:
βœ“ Stripe Webhooks β†’ Debugger 1
βœ“ GitHub Webhooks β†’ Debugger 2
βœ“ Payment Gateway β†’ Debugger 3

Easier to organize
Clear logs per service

2. Name Descriptively​

Good names:
βœ“ "Stripe - Payment Webhooks"
βœ“ "GitHub - PR Events"
βœ“ "PayPal - IPN Testing"

Bad names:
βœ— "Debug 1"
βœ— "Test"

3. Clear Logs Between Tests​

Before new test:
β†’ Click "Clear Logs"
β†’ Fresh start
β†’ No confusion with old requests

4. Export Before Closing​

Found useful request?
β†’ Export it
β†’ Save for reference
β†’ Use in documentation

5. Use Specific Paths​

Give webhook providers specific paths:
βœ“ https://xyz.trycloudflare.com/stripe/webhook
βœ“ https://xyz.trycloudflare.com/github/events
βœ“ https://xyz.trycloudflare.com/paypal/ipn

Not just:
βœ— https://xyz.trycloudflare.com

Easier to identify requests

6. Test Signatures​

Many webhooks include signatures:
- Stripe: Stripe-Signature
- GitHub: X-Hub-Signature
- PayPal: X-Paypal-Signature

Check these in request details
Verify signature format
Use for implementation

Troubleshooting​

No Requests Appearing​

Issue: Started debugger but no requests

Check:

1. Tunnel status: Active?
2. Correct URL configured?
3. Webhook provider sent request?
4. Check provider's webhook logs

Test:

# Send test request
curl -X POST https://your-url.trycloudflare.com/test \
-H "Content-Type: application/json" \
-d '{"test": true}'

Should appear in logs immediately

Can't See Request Body​

Issue: Request body empty

Cause: Content-Type not set

Solution:

Check request headers
Ensure Content-Type is set:
- application/json
- application/x-www-form-urlencoded
- etc.

Body parsed based on Content-Type

Logs Disappeared​

Issue: Logs cleared accidentally

Prevention:

Export important logs
Keep as backup
Can't recover deleted logs

Advanced Features​

Custom Responses (Future)​

Coming soon:

  • Configure custom responses
  • Return specific status codes
  • Simulate errors
  • Response delays

Request Filtering​

Coming soon:

  • Filter by method
  • Filter by path
  • Filter by status
  • Advanced search

Webhook Replay​

Coming soon:

  • Save requests
  • Replay to local service
  • Test your implementation

Next Steps​