Troubleshooting

Running into issues? This guide covers common problems and their solutions. If you don't find your answer here, reach out to support@webhook.rodeo—we're happy to help!

Webhook not receiving events

Problem

You've configured a webhook in the sending service (GitHub, Stripe, etc.) but events aren't showing up in webhook.rodeo.

Solutions

Check the webhook URL format

Make sure the URL is exactly:

https://webhook.rodeo/w/your-username/webhook-name

Common mistakes:

  • http:// instead of https://
  • ❌ Missing /w/ prefix
  • ❌ Extra / at the end
  • ❌ Username or webhook name with spaces/uppercase

Verify the webhook exists

Log into webhook.rodeo and confirm the webhook is listed in your dashboard. Check for typos in the name.

Check webhook status

Inactive webhooks reject all events with 403 Forbidden. Make sure your webhook is active (toggle switch should be green).

Test with curl

Send a test request directly:

curl -X POST https://webhook.rodeo/w/your-username/webhook-name \
  -H "Content-Type: application/json" \
  -d '{"test": true}'

If this works but the service doesn't, the issue is with their webhook configuration, not webhook.rodeo.

Forward failures

Problem

Events are arriving at webhook.rodeo, but forwarding to your destination URL is failing.

Solutions

Check the forward URL

  • Must be HTTPS (not HTTP)
  • Must be publicly accessible (not localhost or private IPs)
  • Must be a valid URL format

Check your endpoint

Test it directly:

curl -X POST https://your-app.com/api/webhooks \
  -H "Content-Type: application/json" \
  -d '{"test": true}'

If this fails, the issue is with your endpoint, not webhook.rodeo.

Check response time

If your endpoint takes longer than 30 seconds to respond, webhook.rodeo will timeout. Solutions:

  1. Return 202 Accepted immediately
  2. Process the webhook asynchronously
  3. Optimize your handler code

Review delivery attempts

In the event details, check all delivery attempts:

  • What status code is your endpoint returning?
  • What's in the response body?
  • How long is it taking to respond?

Common issues:

  • 500 errors - Bug in your webhook handler
  • Connection timeout - Endpoint unreachable or too slow
  • SSL errors - Invalid HTTPS certificate

Local development

For local testing, use:

Then use the public URL as your forward URL.

Signature verification failing

Problem

Signature verification is enabled but webhooks are being rejected with 401 Unauthorized.

Solutions

Check signature computation

Make sure you're computing the HMAC-SHA256 signature correctly:

const crypto = require('crypto')

const signature = crypto
  .createHmac('sha256', secret)
  .update(requestBody)  // Raw body, not parsed JSON!
  .digest('hex')        // Hex encoding, not base64!

Common mistakes:

  • ❌ Using JSON.stringify() on parsed body
  • ❌ Using base64 instead of hex encoding
  • ❌ Using wrong hash algorithm (SHA1, MD5)
  • ❌ Adding newlines or whitespace

Check the header name

The signature must be in:

X-Rodeo-Signature: abc123...

Not:

  • X-Signature
  • Authorization
  • X-Hub-Signature (that's for GitHub's own verification)

Verify the secret matches

The secret in your webhook sender must exactly match the secret configured in webhook.rodeo. Copy-paste to avoid typos.

Check character encoding

Use UTF-8 encoding for both the payload and secret. Other encodings can cause mismatches.

Test without signature first

Remove signature verification temporarily:

  1. Remove the secret from your webhook configuration
  2. Send webhooks without the signature header
  3. Verify they're received successfully
  4. Re-enable signatures and debug from there

This isolates whether the issue is with signature computation or something else.

Rate limit errors

Problem

Getting 429 Too Many Requests responses.

Solutions

Check your plan limits

  • Free: 10 requests/minute
  • Starter: 300 requests/minute
  • Pro: 1,500 requests/minute

Implement backoff

When you receive a 429 response:

async function sendWithRetry(url, payload, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    const response = await fetch(url, {
      method: 'POST',
      body: JSON.stringify(payload)
    })
    
    if (response.status !== 429) {
      return response
    }
    
    // Wait before retrying
    const retryAfter = parseInt(response.headers.get('retry-after') || '30')
    await new Promise(resolve => setTimeout(resolve, retryAfter * 1000))
  }
  
  throw new Error('Rate limit exceeded after retries')
}

Upgrade your plan

If you're consistently hitting rate limits, upgrade to a plan with higher limits.

Batch webhooks

If possible, have the sending service batch multiple events into fewer webhooks instead of sending individually.

Slack delivery issues

Problem

Slack destination is configured but messages aren't appearing in the channel.

Solutions

Check bot is in channel

For private channels, the webhook.rodeo bot must be invited manually:

  1. Go to the Slack channel
  2. Type: /invite @Webhook Rodeo
  3. Press Enter

For public channels, the bot joins automatically.

Verify workspace connection

In webhook.rodeo:

  1. Go to Integrations
  2. Check that your Slack workspace shows as "Connected"
  3. If not, reconnect it

Check channel still exists

If the Slack channel was deleted or renamed, remove and re-add the Slack destination with the correct channel.

Review Slack API errors

In the event details, check the Slack delivery attempt for error messages like:

  • channel_not_found - Channel was deleted
  • not_in_channel - Bot needs to be invited
  • invalid_auth - Workspace needs to be reconnected

Test with a different channel

Try changing to a different channel temporarily to isolate whether it's a channel-specific issue.

Getting help

Still stuck? We're here to help!

Before reaching out

Please have ready:

  1. Request ID - From the event that's having issues
  2. Webhook name - Which webhook is affected
  3. What you expected - Desired behavior
  4. What happened - Actual behavior
  5. Steps to reproduce - How to trigger the issue

Contact support

Email us at: support@webhook.rodeo

Include:

  • Relevant request IDs
  • Screenshots if helpful
  • Error messages you're seeing

Was this page helpful?